gdal_translate
পাইথন কোড থেকে কল করার জন্য কিছু জিডিএল এপিআই ব্যবহার করা সম্ভব ? আমি কেবল ফাইল সিস্টেম থেকে gdal_translate.exe সম্পাদন করতে চাইছি না, বরং কোডটি এটি কোনওভাবে কল করব যাতে gdal_translate নির্বাহযোগ্য সঠিক ডিরেক্টরিটি আমার জানা দরকার না?
gdal_translate
পাইথন কোড থেকে কল করার জন্য কিছু জিডিএল এপিআই ব্যবহার করা সম্ভব ? আমি কেবল ফাইল সিস্টেম থেকে gdal_translate.exe সম্পাদন করতে চাইছি না, বরং কোডটি এটি কোনওভাবে কল করব যাতে gdal_translate নির্বাহযোগ্য সঠিক ডিরেক্টরিটি আমার জানা দরকার না?
উত্তর:
জিডিএল ২.১ (যেহেতু এখানে আরও তথ্য ), জিডিএল এবং ওজিআর ইউটিলিটিগুলি গ্রন্থাগার ফাংশন হিসাবে ব্যবহার করা যেতে পারে। এই ক্ষেত্রে:
from osgeo import gdal
ds = gdal.Open('input.tif')
ds = gdal.Translate('output.tif', ds, projWin = [-75.3, 5.5, -73.5, 3.7])
ds = None
gdal.Translate()
এখানে তালিকাভুক্ত করা হয়েছে: gdal.org/python/osgeo.gdal-module.html# TransransOptions
জিডিএল এপিআই টিউটোরিয়াল দেখুন ।
#Import gdal
from osgeo import gdal
#Open existing dataset
src_ds = gdal.Open( src_filename )
#Open output format driver, see gdal_translate --formats for list
format = "GTiff"
driver = gdal.GetDriverByName( format )
#Output to new format
dst_ds = driver.CreateCopy( dst_filename, src_ds, 0 )
#Properly close the datasets to flush to disk
dst_ds = None
src_ds = None
আপনি যদি আরও আউটপুট নিয়ন্ত্রণ চান, যেমন আকার পরিবর্তন, সাবসেটিং ইত্যাদি etc ... ইনপুট হিসাবে কোনও ভিআরটি ব্যবহার করেন , gdal_translate এটি অভ্যন্তরীণভাবে এটি করে।
হ্যাঁ আপনি পাইথনের মধ্যে থেকে জিডিএল ইউটিলিটিগুলি কল করতে পারেন। ইউটিলিটিটি তার নিজস্ব ডানদিকে এক্সিট কিনা বা পাইথন কোডের একটি অংশের উপর নির্ভর করে পদ্ধতির মধ্যে খুব সামান্য পার্থক্য রয়েছে। যে কোনও উপায়ে আপনাকে সাবপ্রসেস মডিউলটি ব্যবহার করার প্রয়োজন রয়েছে :
import subprocess
# constants
gdalTranslate = r'C:\Program Files\GDAL\gdal_translate.exe'
src = r"C:\somefolder\somefile.tif"
dst = r"C:\someotherfolder\myresul.tif"
cmd = "-ot float32 -outsize 25 25" # just for example!
# see note below
def youCanQuoteMe(item):
return "\"" + item + "\""
fullCmd = ' '.join([gdalTranslate, cmd, youCanQuoteMe(src), youCanQuoteMe(dst)])
subprocess.popen(fullCmd)
আপনি লক্ষ্য করবেন যে আমি আমার পথগুলির চারপাশে পালানো উদ্ধৃতি চিহ্ন যুক্ত করেছি। এটি কারণ, উইন্ডোজে, আমি পাথগুলিতে সমস্যা করেছি, বিশেষত ফাঁকা জায়গাগুলি বা যেখানে '\' অক্ষরগুলির মধ্যে একটি অপরটিকে দুর্ঘটনাকবলিত পালিয়ে যাওয়া চরিত্র তৈরি করে। সুতরাং, আমি কেবল এসপিকে সঠিক পথটি সংরক্ষণ করেছি।
আপনি যদি পাইথন ইউটিলিটিগুলির মধ্যে একটি ব্যবহার করে থাকেন তবে সাবপ্রসেস কমান্ড স্ট্রিংয়ের শুরুতে আপনার এক্সটি ব্যতীত একই জিনিসটি এখন "সি: \ পাইথন 32 y পাইথন.এক্সই" (বা আপনার যে সংস্করণ রয়েছে) এবং আপনার দ্বিতীয় উপাদানটি হ'ল অজগর ইউটিলিটি আপনি ব্যবহার করতে চান।
স্পষ্টতই আপনি হার্ড-কোডেড ধ্রুবক ব্যবহার না করে আপনার ফাইল সিস্টেমের উপরে পুনরাবৃত্তি করতে পারেন, তবে এটি কেবল উদাহরণ।
সম্পাদনা - কিউজিআইএস প্লাগইনগুলির জন্য সাধারণকরণ কিউজিআইএস
শুরুতে বেশ কয়েকটি পরিবেশের ভেরিয়েবল তৈরি / সংশোধন করে। সুতরাং, আপনি উপরের উদাহরণে হার্ড-কোডেড পাথগুলির পরিবর্তে এগুলি (সেটিংস-> বিকল্পগুলি> সিস্টেম দেখুন) জিডিএল লাইব্রেরি / ইউটিলিটিগুলিতে সাধারণীকরণের পথের পরিবর্তনশীলগুলি তৈরি করতে পারেন।
আমি এটি বিভিন্ন জিডিএল কমান্ড দিয়ে ওএস.সিস্টেম ব্যবহার করে করি যা আপনি কমান্ড লাইন থেকে ফাংশন কল করতে ব্যবহার করতে পারেন:
os.system("gdal_translate -of GTiff " + sourcefile + " " + destinationfile)
এটি এখানে 7 টি বক্তৃতায়ও বর্ণিত হয়েছে: http://www.gis.usu.edu/~chrisg/python/2009/
subprocess.call
চেয়েও নিরাপদ os.system
।
gdal.Warp()
একটি PG:
ডাটাসোর্স সঠিকভাবে পেতে কয়েক ঘন্টা জন্য কুস্তি । (আমি জানি, ঠিক? কয়েক ঘন্টা আসলে কিছু কাজ করছে ? ভয়াবহতা! </ কিডিং>)। শেষ পর্যন্ত এটি কাজ করে গেছে, এবং এটি সম্ভবত বা এর চেয়ে দ্রুত গতিযুক্ত বলে মনে হচ্ছে । এটা তোলে ~ 2 মিলিয়ন cutlines করছে, তাই আমি যদি এটা জানবে না আসলে দ্রুত কিছু সময় পর্যন্ত আজ রাতে ... কিন্তু এটা ঠিক ডান কাজ করছে। cutlineDSName
cutlineSQL
os.system()
subprocess.call()
পাইথনের জিডিএল ট্রান্সলেশন ব্যবহার করে পৃথক ফাইলে একটি সমন্বিত মাল্টি-ব্যান্ড টিআইএফ থেকে ব্যান্ডগুলি সংরক্ষণ করতে ইচ্ছুক ব্যক্তির জন্য এখানে একটি দ্রুত কোড।
import gdal
in_path = 'C:/GIS/Sample.tif' #input composite raster
out_path = 'C:/GIS/Output/' #output directory for individual bands as files
#Open existing raster ds
src_ds = gdal.Open(in_path)
for i in range(1,src_ds.RasterCount +1): #Save bands as individual files
out_ds = gdal.Translate(out_path + 'band' + str(i) + '.tiff', src_ds, format='GTiff', bandList=[i])
out_ds=None
এটি আরও প্রক্রিয়াজাতকরণের জন্য দরকারী হতে পারে (যেমন, এখানে যেমন রাস্টারিও ব্যবহার করে )।