मैं एक रेखापुंज से मूल्यों को बिंदुओं से कैसे निकाल सकता हूं?
मैं आर्कगिस में नहीं पसंद करता हूं।
मैं क्यूजीस या मैपविंडो या अन्य ओपन सोर्स जीआईएस में पसंद करता हूं।
मैं एक रेखापुंज से मूल्यों को बिंदुओं से कैसे निकाल सकता हूं?
मैं आर्कगिस में नहीं पसंद करता हूं।
मैं क्यूजीस या मैपविंडो या अन्य ओपन सोर्स जीआईएस में पसंद करता हूं।
जवाबों:
QGIS "प्वाइंट सैंपलिंग टूल" वह प्लगइन होना चाहिए जो आप खोज रहे हैं।
इसका उपयोग कैसे करें, इसका विस्तृत विवरण यहां दिया गया है: http://pvanb.wordpress.com/2010/02/15/sampling-raster-values-at-point-locations-in-qgis/
पाओलो की टिप्पणी पर आधारित अपडेट:
प्लगइन एकमात्र समाधान नहीं है, और हमेशा सबसे आसान समाधान नहीं है। एक वैकल्पिक समाधान प्रसंस्करण टूलबॉक्स में सागा फ़ंक्शन 'पॉइंट टू रिस्टर वैल्यू टू पॉइंट' है। विवरण के लिए देखें http://pvanb.wordpress.com/2014/07/01/sampling-raster-values-at-point-locations-in-qgis-an-update/
PostGIS 2.0 में आप कर सकते हैं:
SELECT ST_Value(rast, geom) val
FROM yourrastertabe, yourpointtable
WHERE ST_Intersects(rast, geom)
सुनिश्चित करें कि जब आप इसे लोड करते हैं तो आपका रैस्टर बहुत छोटा है (-10x10 लोडर के साथ)।
मुझे इस थ्रेड में उल्लिखित QGIS और SAGA GUI टूल के साथ समस्या हो रही थी ( Raster values to points
जो किसी कारण से विफल हो रहा था और बेकार की त्रुटियों को फेंक रहा था और GRASS v.sample
ने एक पूरी नई परत बनाई जो सहायक नहीं थी)। कुछ समय के लिए जीयूआई उपकरणों के साथ असफल होने के बाद, मैंने फील्ड कैलकुलेटर में ऐसा करने की कोशिश की। इसने काफी अच्छा काम किया और मैं GUIs की अनुमति की तुलना में इस प्रक्रिया को थोड़ा बेहतर नियंत्रित करने में सक्षम था, और रास्ते में कुछ अन्य गणनाएं करता था।
कहते हैं कि आपके पास एक परत है pts
और एक और नाम है rast
, दोनों एक ही समन्वय प्रणाली में हैं। आप rast
प्रत्येक X पर नमूना करना चाहेंगे , Y जोड़ी में प्रतिनिधित्व किया pts
।
यदि आपने पहले फ़ील्ड कैलकुलेटर का उपयोग नहीं किया है, तो यह बहुत आसान है। आप "एक्सप्रेशन" बॉक्स में अपनी गणना दर्ज करेंगे, और क्यू आपको मध्य कॉलम में कई वेरिएबल्स और ऑपरेशंस देता है, जिसमें राइट कॉलम पर टेक्स्ट मदद करता है। मैं इस प्रक्रिया को चार चरणों में तोड़ूंगा:
उस pts
परत की विशेषता तालिका खोलें जिसके साथ आप नमूना लेना चाहते हैं।
एक बार जब आप फ़ील्ड कैलक्यूलेटर संवाद में होते हैं, तो चुनें कि क्या आप एक नया फ़ील्ड बनाना चाहते हैं या अपनी परत में किसी मौजूदा फ़ील्ड को संशोधित करना चाहते हैं pts
।
अगला, नए या मौजूदा pts
विशेषता कॉलम को भरने के लिए एक अभिव्यक्ति बनाएँ । आप मेरे लिए काम करने वाले अभिव्यक्ति कोड को संशोधित करके शुरू कर सकते हैं:
raster_value('rast', 1, make_point($x, $y))
raster_value()
एक रेखापुंज परत नाम 'rast'
, एक बैंड संख्या 1
और बिंदु ज्यामिति के साथ आपूर्ति करनी चाहिए make_point()
। $x
और $y
विशेषता तालिका की प्रत्येक पंक्ति में बिंदु के स्थान पर ज्यामिति चर निर्भर हैं।इस विधि भी एक और रेखापुंज परत कहा जाता है के मूल्य को घटाकर तरह अंकगणितीय आपरेशनों की अनुमति देता है other_rast
से rast
, जो मुझे जीयूआई टूल की तुलना में समय की एक गुच्छा बचा लिया। नीचे उदाहरण:
raster_value('rast', 1, make_point($x, $y)) - raster_value('other_rast', 1, make_point($x, $y))
ध्यान दें कि तीन परतें pts
, rast
और other_rast
काम करने के लिए इस विधि के लिए एक ही समन्वय प्रणाली में होना चाहिए।
QGIS 3.2.2 और SAGA (QGIS में डिफ़ॉल्ट रूप से स्थापित) का उपयोग करने का प्रयास करें: "Raster Values to Points" फ़ंक्शन आपके लिए सब कुछ करेगा: यह एक छवि फ़ाइल लेता है और इसे बिंदु-सदिश आकार में परिवर्तित करता है, जिससे यह जानकारी लटकी हुई छवि से लेता है।
नागफनी बेयर के GME उपकरण कमांड लाइन के माध्यम से इसे अच्छी तरह से करते हैं, और 'छोरों' के लिए आसान बैचिंग की अनुमति देते हैं।
isectpntrst(in="path/to/shapefile", raster="path/to/raster", field="fieldname")
GRASS GIS में, आप मानचित्र को GUI में क्वेरी कर सकते हैं या http://grass.osgeo.org/gdp/html_grass64/r.what.html का उपयोग कर सकते हैं
http://gis-techniques.blogspot.com/2012/10/extract-raster-values-from-point.html पर आर गाइड से रैस्टर पैकेज अर्क रैस्टर मानों का उपयोग करने के लिए स्टेप गाइड द्वारा स्टेप दिया गया है।
आप इसका उपयोग कर सकते हैं: http://www.saga-gis.org/saga_module_doc/2.1.3/shapes_grid_3.html
Qgis के SAGA टूलबॉक्स में इसका! यह एक कदम में सब कुछ करता है :)
यहाँ एक फ़ंक्शन है जिसे मैंने अजगर और गदल का उपयोग करके लिखा है। यह फ़ंक्शन रेखांकनों की एक सूची लेता है और बिंदु निर्देशांक युक्त एक पांडा डेटाफ़्रेम और बिंदु निर्देशांक के साथ एक पांडा डेटाफ़्रेम देता है, संबंधित रास्टर कोशिकाओं और संबंधित सेल मूल्यों के लिए केन्द्रक। फ़ंक्शन अंडर डेवलपमेंट पैकेज कोरोस्पी पैकेज ( यहां पाया गया ) का हिस्सा है।
import pandas
import numpy
from osgeo import gdal
def getValuesAtPoint(indir, rasterfileList, pos, lon, lat):
#gt(2) and gt(4) coefficients are zero, and the gt(1) is pixel width, and gt(5) is pixel height.
#The (gt(0),gt(3)) position is the top left corner of the top left pixel of the raster.
for i, rs in enumerate(rasterfileList):
presValues = []
gdata = gdal.Open('{}/{}.tif'.format(indir,rs))
gt = gdata.GetGeoTransform()
band = gdata.GetRasterBand(1)
nodata = band.GetNoDataValue()
x0, y0 , w , h = gt[0], gt[3], gt[1], gt[5]
data = band.ReadAsArray().astype(numpy.float)
#free memory
del gdata
if i == 0:
#iterate through the points
for p in pos.iterrows():
x = int((p[1][lon] - x0)/w)
Xc = x0 + x*w + w/2 #the cell center x
y = int((p[1][lat] - y0)/h)
Yc = y0 + y*h + h/2 #the cell center y
try:
if data[y,x] != nodata:
presVAL = [p[1][lon],p[1][lat], '{:.6f}'.format(Xc), '{:.6f}'.format(Yc), data[y,x]]
presValues.append(presVAL)
except:
pass
df = pandas.DataFrame(presValues, columns=['x', 'y', 'Xc', 'Yc', rs])
else:
#iterate through the points
for p in pos.iterrows():
x = int((p[1][lon] - x0)/w)
y = int((p[1][lat] - y0)/h)
try:
if data[y,x] != nodata:
presValues.append(data[y,x])
except:
pass
df[rs] = pandas.Series(presValues)
del data, band
return df
इसे कैसे चलाया जाए, इसका उदाहरण यह दिया जाता है कि आपदाएँ आपकी वर्तमान कार्यशील निर्देशिका में हैं:
rasDf = getValuesAtPoint('.', ['raster1', 'raster2'], inPoints, 'x', 'y')
यदि आपके पास FME तक पहुंच है तो आप FME कार्यक्षेत्र में दो में से एक ट्रांसफार्मर का उपयोग कर सकते हैं।
RasterCellCoercer ("व्यक्तिगत इनपुट या बहुभुज में सभी इनपुट संख्यात्मक रेखापुंज सुविधाओं का वर्णन करता है। रेखापुंज में प्रत्येक कोशिका के लिए एक वेक्टर सुविधा आउटपुट है।"
PointOnRasterValueExtractor ( "बिंदु विशेषताएँ और एक संदर्भ रेखापुंज में ले जाता है। उत्पादन प्रत्येक बिंदु के स्थान पर बैंड और पैलेट मूल्य (रों) के होते हैं।")
त्वरित विचार: