জিআইএস-এ একটি সাধারণ প্রয়োজনীয়তা হ'ল বিভিন্ন ফাইলগুলিতে একটি প্রসেসিং সরঞ্জাম প্রয়োগ করা বা একটি ফাইলের বিভিন্ন বৈশিষ্ট্যের জন্য অন্য একটি ফাইলে একটি প্রক্রিয়া প্রয়োগ করা।
এই অপারেশনগুলির বেশিরভাগটি বিব্রতকরভাবে সমান্তরাল যে গণনার ফলাফলগুলি কোনওভাবেই লুপের কোনও অপারেশনকে প্রভাবিত করে না। শুধু তাই নয় প্রায়শই ইনপুট ফাইলগুলি প্রতিটি স্বতন্ত্র।
পয়েন্টে একটি ক্লাসিক কেস হ'ল বহুভোগযুক্ত ফাইলগুলির বিরুদ্ধে ফাইলগুলি ক্লিপ করার জন্য আকারের ফাইলগুলি টাইলিং আউট করা।
কিউজিআইএসের অজগর স্ক্রিপ্টে এটি অর্জনের জন্য এখানে একটি (পরীক্ষিত) শাস্ত্রীয় পদ্ধতিগত পদ্ধতি রয়েছে। (এফআইআই অস্থায়ী মেমোরি ফাইলগুলির আউটপুটটি সত্যিকারের ফাইলগুলিতে আমার পরীক্ষার ফাইলগুলি প্রক্রিয়াকরণের সময় থেকে অর্ধেকের বেশি)
import processing
import os
input_file="/path/to/input_file.shp"
clip_polygons_file="/path/to/polygon_file.shp"
output_folder="/tmp/test/"
input_layer = QgsVectorLayer(input_file, "input file", "ogr")
QgsMapLayerRegistry.instance().addMapLayer(input_layer)
tile_layer = QgsVectorLayer(clip_polygons_file, "clip_polys", "ogr")
QgsMapLayerRegistry.instance().addMapLayer(tile_layer)
tile_layer_dp=input_layer.dataProvider()
EPSG_code=int(tile_layer_dp.crs().authid().split(":")[1])
tile_no=0
clipping_polygons = tile_layer.getFeatures()
for clipping_polygon in clipping_polygons:
print "Tile no: "+str(tile_no)
tile_no+=1
geom = clipping_polygon.geometry()
clip_layer=QgsVectorLayer("Polygon?crs=epsg:"+str(EPSG_code)+\
"&field=id:integer&index=yes","clip_polygon", "memory")
clip_layer_dp = clip_layer.dataProvider()
clip_layer.startEditing()
clip_layer_feature = QgsFeature()
clip_layer_feature.setGeometry(geom)
(res, outFeats) = clip_layer_dp.addFeatures([clip_layer_feature])
clip_layer.commitChanges()
clip_file = os.path.join(output_folder,"tile_"+str(tile_no)+".shp")
write_error = QgsVectorFileWriter.writeAsVectorFormat(clip_layer, \
clip_file, "system", \
QgsCoordinateReferenceSystem(EPSG_code), "ESRI Shapefile")
QgsMapLayerRegistry.instance().addMapLayer(clip_layer)
output_file = os.path.join(output_folder,str(tile_no)+".shp")
processing.runalg("qgis:clip", input_file, clip_file, output_file)
QgsMapLayerRegistry.instance().removeMapLayer(clip_layer.id())
আমার ইনপুট ফাইলটি 2 জিবি এবং বহুভুজ ক্লিপিং ফাইলটিতে 400+ বহুভুজ রয়েছে তা বাদে এটি ঠিক থাকবে fine ফলাফলের প্রক্রিয়াটি আমার কোয়াড কোর মেশিনে এক সপ্তাহ সময় নেয় takes তিনটি কোর কেবল অলস অবস্থায় রয়েছে।
আমার মাথায় সমাধানটি হ'ল প্রক্রিয়াটি স্ক্রিপ্ট ফাইলগুলিতে রফতানি করা এবং উদাহরণস্বরূপ gnu সমান্তরাল ব্যবহার করে এটিকে অবিচ্ছিন্নভাবে চালানো। তবে কিউজিআইএস অজগর থেকে স্থানীয় কিছু ব্যবহার না করে কিউজিআইএসকে কোনও ওএস নির্দিষ্ট সমাধানে ফেলে দেওয়া লজ্জার বলে মনে হচ্ছে। সুতরাং আমার প্রশ্নটি হ'ল:
আমি কি অজগর কিউজিসের অভ্যন্তরে বিব্রতকরভাবে সমান্তরাল ভৌগলিক ক্রিয়াকলাপকে সমান্তরাল করতে পারি?
যদি তা না হয় তবে সম্ভবত কারও কাছে ইতিমধ্যে এই ধরণের কাজ অ্যাসিক্রোনাস শেল স্ক্রিপ্টগুলিতে প্রেরণের কোড রয়েছে?