जवाबों:
मैं नहीं यकीन है कि GDAL API के बारे में, वहाँ है कर रहा हूँ void* GDALWarpOptions::hCutline
में वार्प विकल्प से संदर्भित वार्प एपीआई ट्यूटोरियल है, लेकिन कोई स्पष्ट उदाहरण हैं। क्या आप सुनिश्चित हैं कि आपको प्रोग्रामेटिक उत्तर की आवश्यकता है? कमांड लाइन उपयोगिताओं बॉक्स से बाहर कर सकते हैं:
ogrinfo
क्लिपिंग शेपफाइल की सीमा निर्धारित करने के लिए उपयोगgdal_translate
आकार विस्तार करने के लिए क्लिप का उपयोग करेंgdalwarp
साथ उपयोग करें-cutline
चरण 2 और 3 अनुकूलन के लिए हैं, आप बस के साथ प्राप्त कर सकते हैं gdalwarp -cutline ...
।
देखें GDAL बहुभुज का उपयोग कर के साथ कतरन rasters linux आधारित समाधान सब एक स्क्रिप्ट में ऊपर लपेट के लिए Linfinity से। माइकल कोरी के ट्यूटोरियल में मैपनिक के लिए पहाड़ियों का निर्माण करते हुए एक और कटलाइन उदाहरण देखा जा सकता है ।
जियोस्पैटियल पाइथन के जोएल लावहेड ने शेपफाइल , एक अच्छी तरह से ट्यूटोरियल का उपयोग करके क्लिप रैस्टर में अजगर उदाहरण को पूरा किया है । आपको Python Image Library (PIL) को स्थापित करने की आवश्यकता होगी जो Osgeo4W में शामिल नहीं है (जिसके लिए आपको इंस्टॉल प्रोग्राम को काम करने के लिए विंडोज़ रजिस्ट्री में o4w अजगर को जोड़ना होगा )।
ऐसा लगता है कि यह विषय हमेशा वापस आ रहा है। मैं खुद नहीं जानता था कि GDAL> 1.8 इतना उन्नत है कि यह पहले से ही आपको उस कार्य को करने के लिए उचित कमांड लाइन से निपटने देता है।
माइक टोज़ की टिप्पणी बहुत उपयोगी है लेकिन आप उदाहरण के लिए बस कर सकते हैं:
gdalwarp -of GTiff -cutline DATA/area_of_interest.shp -cl area_of_interest -crop_to_cutline DATA/PCE_in_gw.asc data_masked7.tiff
आप उत्कृष्ट के साथ एक अजगर स्क्रिप्ट के अंदर इस आदेश लपेट सकता है उपप्रक्रिया मॉड्यूल।
एक चीज जो मेरे लिए वास्तव में समस्याग्रस्त थी, वह यह है कि मुझे उस समस्या के न्यूनतम समाधान की आवश्यकता थी, जिसका अर्थ है जितना संभव हो उतना सरल और कई बाहरी आश्रितों को इसकी आवश्यकता नहीं है। जोएल लॉहेड द्वारा ट्यूटोरियल के रूप में पायथन इमेजिंग लाइब्रेरी का उपयोग साफ है, लेकिन मैं निम्नलिखित समाधान के साथ आया हूं: नम्पी नकाबपोश सरणियों का उपयोग करना।
मुझे नहीं पता कि यह बेहतर है, लेकिन यही वह था जो मैं (3 साल पहले की तुलना में ...) जानता था।
मूल रूप से मैंने मूल रेखापुंज के अंदर एक वैध डेटा क्षेत्र बनाया (उदाहरण के लिए उत्पादन रेखापुंज की सीमा वही है), लेकिन मुझे रास्टर को छोटा बनाने का विचार पसंद आया (उदाहरण -crop_to_cutline), इसलिए मैंने world2Pixel
जोस लॉहेड से अपनाया । यहाँ मेरा अपना समाधान है:
def RasterClipper():
craster = MaskRaster()
contraster2 = 'PCE_in_gw.aux'
craster.reader("DATA/"+contraster2.replace('aux','asc'))
xres, yres = craster.extent[1], craster.extent[1]
craster.fillrasterpoints(xres, yres)
craster.getareaofinterest("DATA/area_of_interest.shp")
minX, maxX=craster.new_extent [0]-5,craster.new_extent[1]+5
minY, maxY= craster.new_extent [2]-5,craster.new_extent[3]+5
ulX, ulY=world2Pixel(craster.extent, minX, maxY)
lrX, lrY=world2Pixel(craster.extent, maxX, minY)
craster.getmask(craster.corners)
craster.mask=np.logical_not(craster.mask)
craster.mask.resize(craster.Yrange.size,craster.Xrange.size)
# choose all data points inside the square boundaries of the AOI,
# replace all other points with NULL
craster.cdata= np.choose(np.flipud(craster.mask), (craster.data, -9999))
# resise the data set to be the size of the squared polygon
craster.ccdata=craster.cdata[ulY:lrY, ulX:lrX]
craster.writer("ccdata2m.asc",craster.ccdata, (minX+xres*.5, maxY+yres*.5), 10,10,Flip=False)
# in second step we rechoose all the data points which are inside the
# bounding vertices of AOI
# need to re-define our raster points
craster.xllcorner, craster.yllcorner = minX, minY
craster.xurcorner, craster.yurcorner = maxX, maxY
craster.fillrasterpoints(10,10)
craster.getmask(craster.boundingvertices) # just a wrapper around matplotlib.nxutils.points_in_poly
craster.data=craster.ccdata
craster.clip2(new_extent_polygon=craster.boundingvertices)
craster.data = np.ma.MaskedArray(craster.data, mask=craster.mask)
craster.data = np.ma.filled(craster.data, fill_value=-9999)
# write the raster to disk
craster.writer("ccdata2m_clipped.asc",craster.data, (minX+xres*.5, maxY+yres*.5), 10,10,Flip=False)
के पूर्ण विवरण के लिए class MaskRaster
और यह विधियां हैं, मेरे प्रोजेक्ट का गीथब देखें ।
इस कोड का उपयोग करके आपको अभी भी GDAL का उपयोग करना होगा। हालांकि, योजना भविष्य के शुद्ध पायथन में उपयोग करने के लिए है जहां मैं कर सकता हूं, क्योंकि मेरे सॉफ़्टवेयर के इच्छित दर्शकों को बहुत अधिक निर्भरता के साथ कठिनाइयाँ हैं (मैं सॉफ्टवेयर को विकसित करने के लिए डेबियन का उपयोग करता हूं, और क्लाइंट विंडोज 7 का उपयोग करते हैं ...)।