পাইথন কোড থেকে gdal_translate কল কিভাবে?


40

gdal_translateপাইথন কোড থেকে কল করার জন্য কিছু জিডিএল এপিআই ব্যবহার করা সম্ভব ? আমি কেবল ফাইল সিস্টেম থেকে gdal_translate.exe সম্পাদন করতে চাইছি না, বরং কোডটি এটি কোনওভাবে কল করব যাতে gdal_translate নির্বাহযোগ্য সঠিক ডিরেক্টরিটি আমার জানা দরকার না?


4
হ্যাঁ, gdal-2.1 হিসাবে। এই উত্তরটি সঠিক হিসাবে গ্রহণ করা উচিত।
পিট

উত্তর:


27

জিডিএল ২.১ (যেহেতু এখানে আরও তথ্য ), জিডিএল এবং ওজিআর ইউটিলিটিগুলি গ্রন্থাগার ফাংশন হিসাবে ব্যবহার করা যেতে পারে। এই ক্ষেত্রে:

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

2
গ্রহণযোগ্য সমস্ত বিকল্পগুলি gdal.Translate()এখানে তালিকাভুক্ত করা হয়েছে: gdal.org/python/osgeo.gdal-module.html# TransransOptions
মার্সেলো ভিলা

23

জিডিএল এপিআই টিউটোরিয়াল দেখুন

#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 এটি অভ্যন্তরীণভাবে এটি করে।


দুর্ভাগ্যক্রমে এটি প্রত্যাবর্তনকে অন্তর্ভুক্ত করে না, তাই না?
রিকার্ডো

1
@ বুচার - না কারণ প্রশ্নে প্রত্যাখ্যানের কথা উল্লেখ করা হয়নি। অবশ্যই আপনি জিডাল পাইথন এপিআই দিয়ে রাস্টারগুলিকে পুনরায় প্রজেক্ট করতে পারেন। যদি আপনি জানতে চান তবে একটি নতুন প্রশ্ন জিজ্ঞাসা করুন।
ব্যবহারকারী2856

আমি এটি ইতিমধ্যে এখানে সম্পন্ন করেছি: gis.stackexchange.com/questions/103874/… তবে থিয়াসটিকে নকল হিসাবে চিহ্নিত করা হয়েছিল :-(
রিকার্ডো

2
@ বুচার - এটি এই প্রশ্নের সদৃশ হিসাবে বন্ধ ছিল। আপনার প্রশ্নটি gdal_translate সম্পর্কেও জিজ্ঞাসা করে। আপনি কি জানেন যে gdal_translate পুনঃপ্রসূচনা করে না? আপনি যদি পুনরায় প্রজেক্ট করতে চান তবে gdalwarp বা gdal পাইথন এপিআই পদ্ধতিটি ব্যবহার করুন - gdal.ReprojectI छवि
user2856

10

হ্যাঁ আপনি পাইথনের মধ্যে থেকে জিডিএল ইউটিলিটিগুলি কল করতে পারেন। ইউটিলিটিটি তার নিজস্ব ডানদিকে এক্সিট কিনা বা পাইথন কোডের একটি অংশের উপর নির্ভর করে পদ্ধতির মধ্যে খুব সামান্য পার্থক্য রয়েছে। যে কোনও উপায়ে আপনাকে সাবপ্রসেস মডিউলটি ব্যবহার করার প্রয়োজন রয়েছে :

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 পাইথন.এক্সই" (বা আপনার যে সংস্করণ রয়েছে) এবং আপনার দ্বিতীয় উপাদানটি হ'ল অজগর ইউটিলিটি আপনি ব্যবহার করতে চান।

স্পষ্টতই আপনি হার্ড-কোডেড ধ্রুবক ব্যবহার না করে আপনার ফাইল সিস্টেমের উপরে পুনরাবৃত্তি করতে পারেন, তবে এটি কেবল উদাহরণ।

সম্পাদনা - কিউজিআইএস প্লাগইনগুলির জন্য সাধারণকরণ কিউজিআইএস
শুরুতে বেশ কয়েকটি পরিবেশের ভেরিয়েবল তৈরি / সংশোধন করে। সুতরাং, আপনি উপরের উদাহরণে হার্ড-কোডেড পাথগুলির পরিবর্তে এগুলি (সেটিংস-> বিকল্পগুলি> সিস্টেম দেখুন) জিডিএল লাইব্রেরি / ইউটিলিটিগুলিতে সাধারণীকরণের পথের পরিবর্তনশীলগুলি তৈরি করতে পারেন।


তাহলে আমি এই কাজ করতে পারি না? gdal_translate আমদানি করুন এবং তারপরে। মেইন () কে কল করবেন?
কেটি ই।

না - এটি কাজ করবে না। gdal_translate পাইথন প্যাকেজ নয়, তাই পাইথন এটি সম্পর্কে কিছুই জানতে পারে না। "Gdal_translate নামে ইমপোর্টেরর নো মডিউল" বলে ত্রুটি পাবেন। পরিবর্তে এটি কল করতে সাবপ্রসেস মডিউলটি ব্যবহার করুন।
ম্যাপ্পাগনোসিস

ঠিক আছে gdal_retile.py ব্যবহারের সাথে একটি অবিশ্বাস্য প্রশ্ন .. আমি নিম্নলিখিতগুলি করার চেষ্টা করেছি: gdal_retile gdal_retile.main আমদানি করুন ("- ভি-বিআর বিলিনিয়ার-লেভেলস 4 -ps 2048 2048 -co t" টাইল্ড = ইয়েস \ "-তারকাজের ডায়ার কেপিরমিড - -optfile ফাইল.txt ") তবে আমি ত্রুটিটি পেয়েছি: অজানা কমান্ড বিকল্প: - কোনও ধারণা কেন?
কেটি ই।

আমার অনুমান ব্যতীত অফহ্যান্ড আমি সমস্যাটি দেখতে পাচ্ছি না এটি '--optfile' স্যুইচটিকে পছন্দ না করে। দ্বিতীয়টি নথিভুক্ত নয়।
ম্যাপ্পাগনোসিস

@ ম্যাপ্পাগনোসিস পাইথন জিডাল লাইব্রেরিতে জিডাল_ট্রাসান্টের বিকল্প আছে কি?
মাল্টিগডোভার্স

7

আমি এটি বিভিন্ন জিডিএল কমান্ড দিয়ে ওএস.সিস্টেম ব্যবহার করে করি যা আপনি কমান্ড লাইন থেকে ফাংশন কল করতে ব্যবহার করতে পারেন:

os.system("gdal_translate -of GTiff " + sourcefile + " " +  destinationfile)

এটি এখানে 7 টি বক্তৃতায়ও বর্ণিত হয়েছে: http://www.gis.usu.edu/~chrisg/python/2009/


জিডিএল কমান্ডগুলি জিডিএল ২.১-তে আরএফসি 59.1 এর মাধ্যমে পাইথন ফাংশন হিসাবে উপলব্ধ । এর subprocess.callচেয়েও নিরাপদ os.system
দিমিত্রি চুবারভ

1
কাউকে সেই পাইথন ফাংশনগুলির একটি ভাল উদাহরণ লিখতে হবে; আমি ড্রাইভ হিসাবে gdal.Warp()একটি PG:ডাটাসোর্স সঠিকভাবে পেতে কয়েক ঘন্টা জন্য কুস্তি । (আমি জানি, ঠিক? কয়েক ঘন্টা আসলে কিছু কাজ করছে ? ভয়াবহতা! </ কিডিং>)। শেষ পর্যন্ত এটি কাজ করে গেছে, এবং এটি সম্ভবত বা এর চেয়ে দ্রুত গতিযুক্ত বলে মনে হচ্ছে । এটা তোলে ~ 2 মিলিয়ন cutlines করছে, তাই আমি যদি এটা জানবে না আসলে দ্রুত কিছু সময় পর্যন্ত আজ রাতে ... কিন্তু এটা ঠিক ডান কাজ করছে। cutlineDSNamecutlineSQL os.system()subprocess.call()
জিটি

3

পাইথনের জিডিএল ট্রান্সলেশন ব্যবহার করে পৃথক ফাইলে একটি সমন্বিত মাল্টি-ব্যান্ড টিআইএফ থেকে ব্যান্ডগুলি সংরক্ষণ করতে ইচ্ছুক ব্যক্তির জন্য এখানে একটি দ্রুত কোড।

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

এটি আরও প্রক্রিয়াজাতকরণের জন্য দরকারী হতে পারে (যেমন, এখানে যেমন রাস্টারিও ব্যবহার করে )।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.