Gdalbuildvrt এর পাইথন সমতুল্য


12

জিডিএল পাইথন বাইন্ডিং ব্যবহার করে gdalbuildvrt ইউটিলিটি হিসাবে একই কাজ সম্পাদনের জন্য কি কোনও উপায় আছে? এখন পর্যন্ত আমি একক ডেটাসেটের ভিআরটি তৈরি করা এবং ম্যানুয়ালি এক্সএমএল সম্পাদনা করা ছাড়া এটি করার কোনও উপায় খুঁজে পাই না। আমি একাধিক রাস্টার (মূলত একটি মোজাইক সম্পাদন করা) থেকে একটি ভিআরটি তৈরি করতে চাই। খাঁটি পাইথন ব্যবহার করে এটি কি সম্ভব? আমার অন্য বিকল্পটি হ'ল কেবল gdalbuildvrt কল করতে সাবপ্রসেস ব্যবহার করা।

উত্তর:


10

সত্যি এটি ব্যবহার করে এই কাজ করা আরো সহজ gdalbuildvrt একটি subprocessবা os.system

পাইথনের মাধ্যমে যদি আপনি এটি করতে চান তবে এটি করা যেতে পারে। জিডিএল পাইথনের মধ্যে স্ট্যান্ডার্ড ডেটাসেট তৈরির পদ্ধতি ব্যবহার করে আমরা সহজেই বেস ডেটাसेट ভিআরটি তৈরি করতে পারি ।

from osgeo import gdal

drv = gdal.GetDriverByName("VRT")
vrt = drv.Create("test.vrt", x_size, y_size, 0)

নোট করুন যে আমরা প্রাথমিকভাবে কোনও ব্যান্ড ছাড়াই ডেটাসেট তৈরি করছি। উপর ডকুমেন্টেশন থেকে VRTs VRT ডেটাসেট কয়েক ডেটা সেটটি ধরনের যে গ্রহণ করতে পারে এক যে AddBandআর্গুমেন্ট।

vrt.AddBand(gdal.GDT_Float32)
band = vrt.GetRasterBand(1)

এখন প্রতিটি ব্যান্ডের জন্য আমাদের মেটাডেটা আইটেমগুলি ম্যানুয়ালি সেট করতে হবে:

simple_source = '<SourceFilename relativeToVRT="1">%s</SourceFilename>' % source_path + \
    '<SourceBand>%i</SourceBand>' % source_band + \
    '<SourceProperties RasterXSize="%i" RasterYSize="%i" DataType="Real" BlockXSize="%i" BlockYSize="%i"/>' % (x_size, y_size, x_block, y_block) + \
    '<SrcRect xOff="%i" yOff="%i" xSize="%i" ySize="%i"/>' % (x_offset, y_offset, x_source_size, y_source_size) + \
    '<DstRect xOff="%i" yOff="%i" xSize="%i" ySize="%i"/>' % (dest_x_offset, dest_y_offset, x_dest_size, y_dest_size)
band.SetMetadataItem("SimpleSource", simple_source)
band.SetMetadataItem("NoDataValue", -9999)

SetMetadatItemদুটি আর্গুমেন্ট গ্রহণ করে, প্রথমটি মেটাটাটা আইটেমের একটি স্ট্রিং, দ্বিতীয়টি নিজে আইটেম। এর অর্থ হ'ল আপনি কোনও মেটাডেটা আইটেমটি সাবসেট করতে পারবেন না, সুতরাং ডেটা উত্সগুলির জন্য আপনাকে পুরো বিষয়বস্তুকে স্ট্রিং হিসাবে সেট করতে হবে।

নোট করুন যে আমরা জটিল উত্স তৈরি করতে এই পদ্ধতিটি ব্যবহার করতে পারি ( ComplexSource) যাতে মানগুলির চেহারা-সারণী KernelFilteredSource, স্বেচ্ছাসেবী আকার এবং আকারের কার্নেল ফিল্টার উত্স ( ) এবং মাস্ক ব্যান্ড ( MaskBand) থাকে।


আপনাকে ধন্যবাদ_মোহেনার্স - gdalbuildvrt কল করতে আমি সাবপ্রসেসটি ব্যবহার করে শেষ করেছি। কমান্ড লাইনের পরিবর্তে পাইথনের সাথে আমি আরও অভিজ্ঞ, তাই আমি আশা করছিলাম যে আমি পাইথনে সরাসরি এটি করতে পারি তবে আপনি বর্ণিত এক্সএমএল স্ট্রিংগুলি তৈরি করে ঝামেলা পোহাতে হবে না। এটি অবশ্যই জেনে রাখা ভাল যে ভবিষ্যতে যদি প্রয়োজন হয় তবে আমি তা করতে পারি।
ব্রায়ান

অজগর সমতুল্য হওয়ার জন্য সবেমাত্র একটি ব্যবহারের কেস পেয়েছে: অসমর্থিত বৈশিষ্ট্য যুক্ত করে। উদাহরণস্বরূপ, ভিআরটি ফাইল ফর্ম্যাট কোনও overviewsউপাদানকে সমর্থন করে , তবে gdalbuildvrt এটি ব্যবহার করে না। কীভাবে পাইথনে এটি যুক্ত হতে পারে তা একটি স্টাব সরবরাহ করার জন্য ধন্যবাদ।
ম্যাট উইলকি

@ ওমেনার্সরা কি পাইথন.ক্রেটকপি ('পাথ / টু / ফাইল / ভিআরটি', ইনপুট_ডিএস) পাইথনের পাইপথ ইনপুট_ডিএস ফাইলের নিখুঁত পথ সহ কোনও উপায় আছে? আপেক্ষিকটিওভিআরটি = "1" বিকল্প রয়েছে, তবে ভিআরটি তৈরি করার সময় কীভাবে এটি পরিবর্তন করবেন বা সেট করবেন?
দিমিত্রি লিটভিনভ

8

যেহেতু জিডিএল ২.১ সিএলআই সরঞ্জামগুলি লাইব্রেরির ফাংশন হিসাবে উপলব্ধ, এবং বাস্তবে সি এল এল সরঞ্জামগুলি অভ্যন্তরীণভাবে ডাকে call

উদাহরণ স্বরূপ:

gdalbuildvrt -r cubic -addalpha my.vrt one.tif two.tif

এর সমতুল্য:

from osgeo import gdal

vrt_options = gdal.BuildVRTOptions(resampleAlg='cubic', addAlpha=True)
gdal.BuildVRT('my.vrt', ['one.tif', 'two.tif'], options=vrt_options)

প্রাপ্তিসাধ্য CLI অপশন সরাসরি পরামিতি ম্যাপ BuildVRTOptions , প্লাস সেখানে উন্নতি callbacks মত কিছু অতিরিক্ত উপলব্ধ।


এটি কেবলমাত্র কিছু নির্দিষ্ট সি এল আই সরঞ্জামের জন্য বলে মনে হচ্ছে। উদাহরণস্বরূপ, আমি gdaladdo কাজ করার চেষ্টা করছি কিন্তু এটি প্রদর্শিত হবে না। Gdalwarp একই। তারা কি এগুলি সমর্থন করার পরিকল্পনা করে কিনা আপনি কি জানেন? খুব সহায়ক হবে।
fpolig01

দেখুন - @ fpolig01 তাদের অধিকাংশই আছে RegenerateOverviews()এবং Warp()এপিআই রেফারেন্স । যুক্তিগুলি সাধারণত সিএলআই কমান্ডের সাথে মেলে।
rcoup

@ rccoup উত্তরের জন্য ধন্যবাদ। রিজেনারেট ওভারভিউ () কি গডালাদডোর সমান? আপনি কি এটি কাজ করে একটি উদাহরণ আছে? আমি gdaladdo -r গড় "ডি: \ ইমেজ.টিফ"
fpolig01

@ fpolig01 এই পোস্টটি পরামর্শ দেয়BuildOverviews() (যা আসলে আমি খুঁজে পেয়েছিলে তা অনুসন্ধান করতে গিয়েছিলাম RegenerateOverviews) - সম্ভবত চেষ্টা করে দেখুন?
rcoup

8

@Rcoup এর উত্তর কেবলমাত্র আমার জন্য কাজ করেছে, যদি এটি নীচে পরিবর্তন করে:

from osgeo import gdal 

vrt_options = gdal.BuildVRTOptions(resampleAlg='cubic', addAlpha=True)
my_vrt = gdal.BuildVRT('my.vrt', ['one.tif', 'two.tif'], options=vrt_options)
my_vrt = None

অন্যথায়, ফাইলটি ডিস্কে লেখা হয় না।


জেনসেল ধন্যবাদ! আপনি কি my_vrt এর অন্তর্দৃষ্টি ব্যাখ্যা করতে পারেন = ডিস্কে লেখার জন্য কিছুই নেই? ঠিক সত্যিই অদ্ভুত বলে মনে হচ্ছে
mmann1123

3
@ mmann1123 : অন্যথায় এটি কার্যকর হয়নি এবং আমি মনে রেখেছিলাম যে জিডিএল এপিআই টিউটোরিয়াল বলেছিল: "নোট করুন যে ক্রিয়েটকপি () পদ্ধতিটি একটি লিখনযোগ্য ডেটাসেটটি ফিরিয়ে দেয় এবং এটি সম্পূর্ণভাবে লেখার জন্য এবং ডেটাসেটটিকে ডিস্কে ফ্লাশ করার জন্য সঠিকভাবে বন্ধ করা আবশ্যক পাইথনের ক্ষেত্রে "dst_ds" সুযোগের বাইরে চলে গেলে এটি স্বয়ংক্রিয়ভাবে ঘটে "" অজগর জন্য কোন নেই closing, আপনি vrtএটি সুযোগ দ্বারা আপনার সুযোগ বাইরে আনতে হবে None
জেনসেল

প্রকৃতপক্ষে, তারা এই সমস্যাটি ঠিক করেছেন ( osgeo-org.1560.x6.nabble.com/… দেখুন )
umbe1987
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.