गदल: एक रैस्टर को दूसरे रैस्टर से क्लिप करना


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क्या रास्टर को आपूर्ति करने का कोई तरीका है ? वैकल्पिक रूप से, क्या कोई अन्य गदल फ़ंक्शन है जो एक रैस्टर को दूसरे रैस्टर का उपयोग करके क्लिप कर सकता है? यदि इनमें से कोई भी संभव नहीं है, तो क्या रेखापुंज की सीमा से परिभाषित एकल बहुभुज के साथ एक आकृति बनाने का एक बहुत ही सरल तरीका है?

इस कोड को एक अधिक व्यापक अजगर लिपि में लपेटा जाएगा, इसलिए मैं या तो कमांड लाइन गाल्ड यूटिलिटीज का उपयोग कर सकता हूं या गेल्ड के लिए किसी भी पाइथन बाइंडिंग का उपयोग कर सकता हूं।

एक साइड नोट के रूप में, मुझे पता है कि मैं आसानी से एक कतरन आकार बना सकता हूं जो QGIS में मेरे रेखापुंज की सीमा को कवर करता है। मैं ऐसा कर सकता हूं कि अगर मुझे सीधा हल नहीं मिलता है, लेकिन मैं अंततः दर्जनों पर इस उपयोगिता का उपयोग करके हवा निकालूंगा अगर एक बड़े स्वचालित विश्लेषण के हिस्से के रूप में सैकड़ों क्षेत्र नहीं हैं, तो मैं एक थकाऊ नहीं होना पसंद करूंगा मैनुअल कदम भले ही यह बहुत आसान है।

जवाबों:


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
जो

मैं इस दृष्टिकोण का उपयोग कर रहा था, लेकिन पाया कि यह कभी-कभी क्लिप्ड संस्करण में एक एकल पिक्सेल बंद था। मुझे लगता है कि अपने लक्ष्य की गणना करने के लिए यह अधिक सरल है कि नीचे एक ला ज़ेवियर का उत्तर दिया गया है और फिर बेमेल CRS को संभालने के लिए gdalwarp और निर्दिष्ट -te_srs का उपयोग करें।
जॉन

7

अनियमित बहुभुजों के लिए, और यह मानते हुए कि आपकी जियोटीफ़ रेखापुंज फ़ाइल एक द्विआधारी रेखापुंज है, आप GDAL_Calc का उपयोग कर सकते हैं :

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

यह क्वेरी 0 को पॉप्युलेट करेगी जहां Mask.tif <= 0 और BigImage जहां Mask> 0. ऐसा करने के लिए दोनों रैस्टर्स समान सेल साइज, रो और कॉलम होने चाहिए। समान एक्सटेंशन निकालने के लिए -projwin ulx uly lrx lryविकल्प के साथ GDAL_Translate का उपयोग करें (बॉक्स अनुमानित निर्देशांक में है), लेकिन सुनिश्चित करें कि प्रोजविन बॉक्स या तो रेखापुंज के किनारों पर विस्तार नहीं करता है।

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

मास्क से प्राप्त प्रोजविन बॉक्स के लिए स्थानापन्न मान।


1
+1 यह उपयोगी जानकारी है, लेकिन मुझे लगता है कि मैं @ lejedi के उत्तर का उपयोग करके कम चरणों में अपनी समस्या को हल कर सकता हूं।
जो

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
एनबी: यह समाधान केवल तभी काम करता है जब वे उसी एसआरएस में हों।
स्काईलियन

@Skylion लेकिन आप -te_srs विकल्प को शामिल करके आसानी से इसका हिसाब कर सकते हैं, हालाँकि आपको -te विकल्प के बजाय gdalwarp की आवश्यकता है।
जॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.