ओपन सोर्स जीआईएस का उपयोग करके बिंदुओं पर रेखापुंज मान निकालना?


21

मैं एक रेखापुंज से मूल्यों को बिंदुओं से कैसे निकाल सकता हूं?

मैं आर्कगिस में नहीं पसंद करता हूं।

मैं क्यूजीस या मैपविंडो या अन्य ओपन सोर्स जीआईएस में पसंद करता हूं।


1
तो आपके पास अंक हैं और आपको उन बिंदुओं के तहत रेखापुंज से मान निकालने की आवश्यकता है, या क्या आपको रेखापुंज कोशिकाओं को बिंदुओं में बदलने की आवश्यकता है। इससे पहले कि मैं जवाब देने की कोशिश करूं और जांच करूं।
नाथन डब्ल्यू

पहला, मेरे पास अंक हैं और मुझे उन बिंदुओं के तहत, रेखापुंज से अंतराल निकालने की आवश्यकता है। Thnx !!
वासिलिस

जवाबों:


37

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/


5
लोग इस Q & A के माध्यम से अभी भी उपर्युक्त पोस्ट ढूंढ रहे हैं। हालाँकि, प्लगइन एकमात्र समाधान नहीं है, और हमेशा सबसे आसान समाधान नहीं है। एक वैकल्पिक समाधान प्रसंस्करण टूलबॉक्स में सागा फ़ंक्शन 'प्वाइंट टू ग्रिड वैल्यूज़ टू पॉइंट' है। इस पोस्ट के विवरण के लिए देखें ।
इकोडीव

सावधान। मैंने सिर्फ पॉइंट सैंपलिंग टूल चलाया। 60,000 अंक और 13 आपदाएं। परिणाम प्रत्येक वर्ष के लिए मेरे 30 यादृच्छिक नमूना परीक्षण में विफल रहे। इस टूल में बड़े डेटासेट के साथ समस्याएँ हैं। मैं इसका उपयोग नहीं करता।
यदि आप नहीं जानते हैं-

बड़े डेटासेट के साथ उल्लिखित मुद्दों के बावजूद, यह एक ही बार में सभी मल्टीबैंड के मूल्यों को निकालने के लिए बहुत उपयोगी है । अन्य सभी QGIS से संबंधित समाधान केवल एक बैंड (जैसे GRASS r.what) के निष्कर्षण का समर्थन करते हैं या मल्टीबैंड रस्टर (जैसे सागा - रेखापुंज मानों से बिंदुओं) के उपयोग पर रोक लगाते हैं।
ईकेमाइक

7

PostGIS 2.0 में आप कर सकते हैं:

SELECT ST_Value(rast, geom) val
FROM yourrastertabe, yourpointtable
WHERE ST_Intersects(rast, geom)

सुनिश्चित करें कि जब आप इसे लोड करते हैं तो आपका रैस्टर बहुत छोटा है (-10x10 लोडर के साथ)।


7

मुझे इस थ्रेड में उल्लिखित QGIS और SAGA GUI टूल के साथ समस्या हो रही थी ( Raster values to pointsजो किसी कारण से विफल हो रहा था और बेकार की त्रुटियों को फेंक रहा था और GRASS v.sampleने एक पूरी नई परत बनाई जो सहायक नहीं थी)। कुछ समय के लिए जीयूआई उपकरणों के साथ असफल होने के बाद, मैंने फील्ड कैलकुलेटर में ऐसा करने की कोशिश की। इसने काफी अच्छा काम किया और मैं GUIs की अनुमति की तुलना में इस प्रक्रिया को थोड़ा बेहतर नियंत्रित करने में सक्षम था, और रास्ते में कुछ अन्य गणनाएं करता था।

कहते हैं कि आपके पास एक परत है ptsऔर एक और नाम है rast, दोनों एक ही समन्वय प्रणाली में हैं। आप rastप्रत्येक X पर नमूना करना चाहेंगे , Y जोड़ी में प्रतिनिधित्व किया pts

यदि आपने पहले फ़ील्ड कैलकुलेटर का उपयोग नहीं किया है, तो यह बहुत आसान है। आप "एक्सप्रेशन" बॉक्स में अपनी गणना दर्ज करेंगे, और क्यू आपको मध्य कॉलम में कई वेरिएबल्स और ऑपरेशंस देता है, जिसमें राइट कॉलम पर टेक्स्ट मदद करता है। मैं इस प्रक्रिया को चार चरणों में तोड़ूंगा:

  1. उस ptsपरत की विशेषता तालिका खोलें जिसके साथ आप नमूना लेना चाहते हैं।

  2. एक बार जब आप फ़ील्ड कैलक्यूलेटर संवाद में होते हैं, तो चुनें कि क्या आप एक नया फ़ील्ड बनाना चाहते हैं या अपनी परत में किसी मौजूदा फ़ील्ड को संशोधित करना चाहते हैं pts

  3. अगला, नए या मौजूदा ptsविशेषता कॉलम को भरने के लिए एक अभिव्यक्ति बनाएँ । आप मेरे लिए काम करने वाले अभिव्यक्ति कोड को संशोधित करके शुरू कर सकते हैं:

raster_value('rast', 1, make_point($x, $y))
  1. आपको 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काम करने के लिए इस विधि के लिए एक ही समन्वय प्रणाली में होना चाहिए।


1
इस प्रश्न के लिए यह सबसे अच्छा उत्तर है
BC B.

6

QGIS 3.2.2 और SAGA (QGIS में डिफ़ॉल्ट रूप से स्थापित) का उपयोग करने का प्रयास करें: "Raster Values ​​to Points" फ़ंक्शन आपके लिए सब कुछ करेगा: यह एक छवि फ़ाइल लेता है और इसे बिंदु-सदिश आकार में परिवर्तित करता है, जिससे यह जानकारी लटकी हुई छवि से लेता है।


4

नागफनी बेयर के GME उपकरण कमांड लाइन के माध्यम से इसे अच्छी तरह से करते हैं, और 'छोरों' के लिए आसान बैचिंग की अनुमति देते हैं।

isectpntrst(in="path/to/shapefile", raster="path/to/raster", field="fieldname")

GME isectpntrst कमांड संदर्भ है


3

GRASS GIS में, आप मानचित्र को GUI में क्वेरी कर सकते हैं या http://grass.osgeo.org/gdp/html_grass64/r.what.html का उपयोग कर सकते हैं


2
घास के लिए मुझे यह मिला: pvanb.wordpress.com/2010/05/05/…
वासिलिस

एक और GRASS मॉड्यूल जो एक रैस्टर को सैंपल करने में सक्षम है, v.sample है, जो QGIS प्रोसेसिंग टूलबॉक्स के माध्यम से भी उपलब्ध है।
user55937



2

यहाँ एक फ़ंक्शन है जिसे मैंने अजगर और गदल का उपयोग करके लिखा है। यह फ़ंक्शन रेखांकनों की एक सूची लेता है और बिंदु निर्देशांक युक्त एक पांडा डेटाफ़्रेम और बिंदु निर्देशांक के साथ एक पांडा डेटाफ़्रेम देता है, संबंधित रास्टर कोशिकाओं और संबंधित सेल मूल्यों के लिए केन्द्रक। फ़ंक्शन अंडर डेवलपमेंट पैकेज कोरोस्पी पैकेज ( यहां पाया गया ) का हिस्सा है।

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')

1

यदि आपके पास FME तक पहुंच है तो आप FME कार्यक्षेत्र में दो में से एक ट्रांसफार्मर का उपयोग कर सकते हैं।

RasterCellCoercer ("व्यक्तिगत इनपुट या बहुभुज में सभी इनपुट संख्यात्मक रेखापुंज सुविधाओं का वर्णन करता है। रेखापुंज में प्रत्येक कोशिका के लिए एक वेक्टर सुविधा आउटपुट है।"

PointOnRasterValueExtractor ( "बिंदु विशेषताएँ और एक संदर्भ रेखापुंज में ले जाता है। उत्पादन प्रत्येक बिंदु के स्थान पर बैंड और पैलेट मूल्य (रों) के होते हैं।")


नहीं, मेरे पास FME है या उसका उपयोग नहीं है, एक स्टैंडअलोन एप्लिकेशन या एक प्लगइन है?
वासिलिस

0

त्वरित विचार:

  1. gdal_polygonize.py - polyasterize your raster feature
  2. PostGIS डेटाबेस में अपनी बिंदु विशेषताएं और बहुभुज सम्मिलित करें
  3. उन सभी ऊंचाई मानों को खींचने के लिए st_intersects फ़ंक्शन का उपयोग करें, जहां प्रतिच्छेदन सुविधाएँ हैं

दिलचस्प दृष्टिकोण, क्योंकि कल स्टार्स शुरू करते हैं कि पोस्टगिस का उपयोग कैसे करें।
वासिलिस

धन्यवाद, यह काफी सरल है, लेकिन यह काम करता है। यहाँ मैं इस दृष्टिकोण के साथ उत्पादन करने में सक्षम था: i.imgur.com/h8CGJ.png
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.