Gdal: অন্য রাস্টার দিয়ে একটি রাস্টার ক্লিপ করছে


14

আমি একই (ছোট) অঞ্চলে মাল্টি-ব্যান্ড জিওটিফ রাস্টার ফাইলগুলির ব্যাচগুলি ক্রপ করার জন্য একটি সহজ ইউটিলিটি লিখছি। জিডালওয়ার্প ব্যবহার করে, আমি সহজেই একটি একক বহুভুজ ক্লিপিং শেফফাইল ব্যবহার করে একটি ফাইল ক্রপ করতে পারি:

gdalwarp -cutline clipper.shp -crop_to_cutline input.tif output.tif

তবে, যে অঞ্চলটি আমি ক্লিপ করতে চাইছি তা প্রাথমিকভাবে অন্য কোনও জিওটিফ রাস্টার ফাইল দ্বারা সংজ্ঞায়িত করা হবে, কোনও শেফফিল নয়। আমি যদি ক্লাস্টিং ফাইল হিসাবে সেই রাস্টারটির ব্যাপ্তিটি ব্যবহার করতে পারি তবে এটি দুর্দান্ত হবে তবে আমি কীভাবে এটি করব তা নিশ্চিত নই। আশ্চর্যজনকভাবে, নিম্নলিখিতগুলি কাজ করে না (এটি কোনও ত্রুটি উত্থাপন করে না, এটি কেবল কিছু উত্পাদন করে না):

gdalwarp -cutline clipper.tif-crop_to_cutline input.tif output.tif

সুতরাং, আমার প্রশ্নটি হল, কোনও রাস্টার সরবরাহ করার কোনও উপায় আছে gdalwarp -cutlineকি? পর্যায়ক্রমে, এমন আরও একটি জিডিএল ফাংশন রয়েছে যা অন্য রাস্টার ব্যবহার করে কোনও রাস্টার ক্লিপ করতে পারে? যদি এগুলির উভয়ই সম্ভব না হয় তবে রাস্টারের পরিধি দ্বারা সংজ্ঞায়িত একক বহুভুজ সহ একটি শৈলফিল তৈরি করার খুব সহজ উপায় কি?

এই কোডটি আরও বিস্তৃত পাইথন স্ক্রিপ্টে আবৃত হবে, তাই আমি কমান্ড লাইন gdal ইউটিলিটিগুলি বা gdal এর জন্য পাইথন বাইন্ডিংগুলির কোনওটি ব্যবহার করতে পারি।

পার্শ্ব নোট হিসাবে, আমি জানি যে আমি খুব সহজেই কেবল একটি ক্লিপিং শেফফিল তৈরি করতে পারি যা কিউজিআইএসে আমার রাস্টারের পরিমাণকে কভার করে। আমি যদি এটির কোনও সহজ সমাধান না খুঁজে পাই তবে শেষ পর্যন্ত আমি এই ইউটিলিটি কয়েক শতাধিক অঞ্চলে ব্যবহার করতে পারব না যদি একটি বৃহত স্বয়ংক্রিয় বিশ্লেষণের অংশ হিসাবে শত শত অঞ্চল না থাকে, তাই আমি ক্লান্তিকর না থাকতে পছন্দ করব ম্যানুয়াল পদক্ষেপ এটি খুব সহজ হলেও।

উত্তর:


11

আমি জানি না যে কোনও রাস্টারকে অন্য রাস্টার দিয়ে ক্লিপ করা সম্ভব কিনা তবে আপনি নিজের রাস্টারটির পরিধি সহ শেফফিলটি তৈরি করতে gdaltindex ব্যবহার করতে পারেন।

http://www.gdal.org/gdaltindex.html


4
gdaltindex আমার প্রাথমিক রাস্টার থেকে ক্লিপিং শেফফাইল তৈরি করতে পুরোপুরি কাজ করে। আমি যে সমস্যাটি ব্যবহার করি তা সমাধান করতে gdaltindex clipper.shp clipper.tif, তার পরেgdalwarp -cutline clipper.shp -crop_to_cutline input.tif output.tif
জো

আমি এই পদ্ধতির ব্যবহার করছিলাম তবে দেখতে পেলাম যে এটি কখনও কখনও ক্লিপড সংস্করণে একক পিক্সেল বন্ধ ছিল। আমি মনে করি আপনার টার্গেটটি নীচে একটি লা জাভিয়েরের উত্তরটি প্রসারিত করা আরও সহজবোধ্য এবং তারপরে জিডালওয়ার্প ব্যবহার করুন এবং মিল না পাওয়া সিআরএসগুলি পরিচালনা করতে -te_srs নির্দিষ্ট করুন।
জন

7

অনিয়মিত বহুভুজগুলির জন্য এবং ধরে নিচ্ছেন যে আপনার জিওটিফ রাস্টার ফাইলটি বাইনারি রাস্টার, আপনি জিডিএল_ক্যাল্যাক ব্যবহার করতে পারেন :

GDAL_Calc.py -A Mask.tif -B CutBigImageToClip.tif --outfile=SmallerFile.tif --NoDataValue=0 --Calc="B*(A>0)" 

এই কোয়েরিটি 0 যেখানে মাস্ক.টিফিট <= 0 এবং বিগিমেজ যেখানে মাস্ক> 0 স্থাপন করবে this এটি করার জন্য উভয় রাস্টারকে অবশ্যই একই ঘরের আকার, সারি এবং কলাম থাকতে হবে। একই এক্সেটেন্টগুলি বের করতে -projwin ulx uly lrx lryবিকল্পটি জিডিএল_আর ট্রান্সলেট ব্যবহার করুন (বাক্সটি প্রজেক্টেড কোঅর্ডিনেটে রয়েছে), তবে নিশ্চিত করুন যে প্রজউইন বাক্সটি রাস্টারের উভয় প্রান্তের উপরে প্রসারিত হবে না।

GDAL_Translate -of GTIFF -projwin ulx uly lrx lry BigImageToClip.tif CutBigImageToClip.tif

মাস্ক থেকে প্রাপ্ত প্রোজউইন বাক্সের বিকল্প মান values


1
+1 এটি দরকারী তথ্য, তবে আমি মনে করি @ লেজেদির উত্তরটি ব্যবহার করে আমি কম পদক্ষেপে আমার সমস্যাটি সমাধান করতে পারি।
জো

4

আকৃতি তৈরি না করে সরাসরি পাইথনের সমাধান:

import gdal
from gdalconst import GA_ReadOnly

data = gdal.Open('img_mask.tif', GA_ReadOnly)
geoTransform = data.GetGeoTransform()
minx = geoTransform[0]
maxy = geoTransform[3]
maxx = minx + geoTransform[1] * data.RasterXSize
miny = maxy + geoTransform[5] * data.RasterYSize
call('gdal_translate -projwin ' + ' '.join([str(x) for x in [minx, maxy, maxx, miny]]) + ' -of GTiff img_orig.tif img_out.tif', shell=True)

1
এনবি: এই দ্রবণগুলি কেবল একই এসআরএসে থাকলে কাজ করে।
স্কাইলিয়ন

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