ভ্যাসকোবুনিউনস, একসাথে ডেইজি চেইনের জন্য পাইথন স্ক্রিপ্টটি ব্যবহার করে এই সমস্যাটি কীভাবে সম্পন্ন করেছি তা এখানে। আপনি এটিকে সহজেই একটি ব্যাচের স্ক্রিপ্টে রূপান্তর করতে পারেন, মূলত আমি কেবল ogr2ogr নির্দেশাবলী ( cmd
) একসাথে একত্রিত করি , তারপরে তাদের ডেকে os.system(cmd)
চালনা করে, ogr2ogr কমান্ডটি আমি একত্রিত করে পাস করি passing
গোপন অস্ত্রটি হ'ল ( ক্যাপুটি প্রদর্শিত হিসাবে ) আপনি নিজের মার্জ ফলাফলের সাথে যুক্ত হচ্ছেন উত্স ডেটাসেটের ধ্রুবক মান হিসাবে ফাইল নাম চাপানোর জন্য ওজিআরএসএসকিউএল প্রয়োগ করা।
আমার উদাহরণে, -sql
পতাকাটি হ্যান্ডেল করে, কোডটিতে এটি এর মতো:
-sql "SELECT \'' + filename + '\' AS filename, * FROM ' + filenameNoExt + '"'
তবে এটি পড়তে বিভ্রান্তিকর কারণ আমার ফলস্বরূপ উপসংহারে একক উদ্ধৃতি এবং ডাবল উদ্ধৃতি প্রয়োগ করতে হবে। এটি করার জন্য আমাকে তাদের "বাস্তবের জন্য" ব্যবহার করতে একক উদ্ধৃতি (অর্থাত্ \ ') এড়িয়ে যেতে হবে। সুতরাং পাঠযোগ্যতার জন্য, এটি ভেরিয়েবলগুলি এবং পালানোর ক্রম ছাড়াই এটি দেখতে সহায়তা করে। আপনি যদি কোনও নির্দিষ্ট পুনরাবৃত্তির জন্য ফাইলের নামটি "রোডস 1" হিসাবে ভান করেন তবে ফলস্বরূপ কনটেন্টেশনটি ogr2ogr বাক্যে এই জাতীয় চেহারা দেখাবে:
-sql "SELECT 'roads1.shp' AS filename, * FROM roads1"
এই .py স্ক্রিপ্ট তিন ঠাট আমি থেকে চুরি একজন সংমিশ্রণ হয় অনুজ্জ্বল উইলকি (একটি খালি, একটি shapefile এর ক্লোন), j03lar50n (ogrinfo এবং ogr_sql ব্যবহার করে একটি shapefile করতে একটি কলাম যোগ), এবং capooti (ogr_sql ব্যবহার করে একটি নির্দিষ্ট কলাম মান আরোপ একটি আকারে সমস্ত রেকর্ডে)। সুতরাং এখানে সম্পূর্ণ স্ক্রিপ্ট:
# merge_shps.py
import os
path = "D:/GIS/01_tutorials/ND_Roads/extracted" # path to your folder of .shp files
merge = "merge_filename" # this will be the name of your merged result
directory = os.listdir(path)
count = 0
for filename in directory:
if ".SHP" in filename.upper() and not ".XML" in filename.upper():
# On the first pass, create a clone and add the filename column.
if count == 0:
# Make a clone (matt wilkie)..
cmd = 'ogr2ogr ' + path + '/' + merge + '.shp ' + path + '/' + filename + ' -where "FID < 0"'
os.system(cmd)
# Add the field (j03lar50n)..
cmd = 'ogrinfo ' + path + '/' + merge + '.shp -sql "ALTER TABLE ' + merge + ' ADD COLUMN filename character(50)"'
os.system(cmd)
# Now populate the data (capooti)..
print "Merging: " + str(filename)
# You'll need the filename without the .shp extension for the OGR_SQL..
filenameNoExt = filename.replace(".shp","")
cmd = 'ogr2ogr -f "esri shapefile" -update -append ' + \
path + '/' + merge + '.shp ' + \
path + '/' + filename + \
' -sql "SELECT \'' + filename + '\' AS filename, * FROM ' + filenameNoExt + '"'
# Uncomment this line to spit the ogr2ogr sentence to the terminal..
#print "\n" + cmd + "\n"
os.system(cmd)
count += 1