ওপেন সোর্স জিআইএস ব্যবহার করে পয়েন্টগুলিতে রাস্টার মানগুলি আহরণ করা হচ্ছে?


21

আমি কীভাবে পয়েন্ট দ্বারা একটি রাস্টার থেকে মানগুলি বের করতে পারি?

আমি আর্কগিসে পছন্দ করি না।

আমি কিউগিস বা ম্যাপউইন্ডো বা অন্যান্য ওপেন সোর্স গিসে পছন্দ করি।


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

প্রথমটি, আমার কাছে পয়েন্ট রয়েছে এবং আমাকে এই পয়েন্টগুলির অধীনে রাস্টার থেকে মূল্যায়নগুলি বের করতে হবে। Thnx !!
ভ্যাসিলিস

উত্তর:


37

কিউজিআইএস "পয়েন্ট স্যাম্পলিং সরঞ্জাম" আপনার যে প্লাগইনটি সন্ধান করছেন তা হওয়া উচিত।

এটি কীভাবে ব্যবহার করবেন সে সম্পর্কে এখানে বিশদ বিবরণ দেওয়া আছে: 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
এই প্রশ্নোত্তর মাধ্যমে লোকেরা এখনও উপরে বর্ণিত পোস্টটি সন্ধান করছে। তবে, প্লাগইনটি একমাত্র সমাধান নয় এবং সর্বদা সহজ সমাধানও নয়। বিকল্প সমাধান হ'ল প্রসেসিং টুলবক্সে সাগা ফাংশন 'পয়েন্টে গ্রিডের মান যুক্ত করুন'। বিশদ জন্য এই পোস্ট দেখুন
ইকোদিভ

সতর্ক করা. আমি সবেমাত্র পয়েন্ট স্যাম্পলিং সরঞ্জামটি চালিয়েছি। 60,000 পয়েন্ট এবং 13 রাস্টার। ফলাফলগুলি প্রতি বছরের জন্য আমার 30 টি এলোমেলো নমুনা পরীক্ষায় ব্যর্থ হয়েছিল। এই সরঞ্জামটিতে বড় ডেটাসেটগুলি রয়েছে। আমি এটি ব্যবহার করব না।
যদি আপনি না জানেন- কেবলমাত্র জিআইএস

বড় ডেটাসেটের সাথে উল্লিখিত সমস্যা থাকা সত্ত্বেও, একসাথে সমস্ত মাল্টব্যান্ড মান বের করার জন্য এটি খুব কার্যকর । অন্যান্য কিউজিআইএস-সম্পর্কিত সমাধানগুলি কেবলমাত্র একটি ব্যান্ডের নিষ্কাশনকে সমর্থন করে (যেমন গ্রাএসআরএস আর। কি) বা মাল্টিব্যান্ড রাস্টার ব্যবহার নিষিদ্ধ করে (সাগা - রাস্তার মানগুলিতে পয়েন্ট)।
EikeMike

7

PostGIS 2.0 এ আপনি করতে পারেন:

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

আপনি এটি লোড করার সময় আপনার রাস্টারটি খুব ছোট টাইলযুক্ত রয়েছে তা নিশ্চিত করুন (লোডার সহ -t 10x10)।


7

এই থ্রেডে উল্লিখিত কিউজিআইএস এবং সাগা জিইউআই সরঞ্জামগুলির সাথে আমার সমস্যা Raster values to pointsছিল ( কোনও কারণে ব্যর্থ হয়ে এবং অসহযোগী ত্রুটি ছুঁড়ে মারছিল এবং গ্রাস v.sampleএকটি সম্পূর্ণ নতুন স্তর তৈরি করেছিল যা সহায়ক ছিল না)। কিছু সময়ের জন্য জিইউআই সরঞ্জামগুলির সাথে ব্যর্থ হওয়ার পরে, আমি ফিল্ড ক্যালকুলেটরে এটি করার চেষ্টা করেছি। এটি বেশ ভালভাবে কাজ করেছে এবং জিইউআইগুলির অনুমতি দেওয়ার চেয়ে আমি প্রক্রিয়াটি কিছুটা ভালভাবে নিয়ন্ত্রণ করতে সক্ষম হয়েছি এবং সেই সাথে কিছু অন্যান্য গণনাও করতে পেরেছি।

বলুন যে আপনার একই স্তরের নামযুক্ত একটি স্তর রয়েছে ptsএবং অন্য নামকরণ rastকরেছেন একই রকম সমন্বয় ব্যবস্থাতে। আপনি rastপ্রতিটি এক্সে নমুনা দিতে চান , ওয়াই জোড়া প্রতিনিধিত্ব করেছেন pts

আপনি যদি আগে ফিল্ড ক্যালকুলেটর ব্যবহার না করে থাকেন তবে এটি বেশ সহজ। আপনি "এক্সপ্রেশন" বাক্সে আপনার গণনা প্রবেশ করবেন এবং Q আপনাকে ডান কলামে সহায়তার পাঠ্য সহ মাঝারি কলামে প্রচুর ভেরিয়েবল এবং ক্রিয়াকলাপ দেয়। আমি এই প্রক্রিয়াটি চারটি ধাপে বিভক্ত করব:

  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
এটি এই প্রশ্নের সেরা উত্তর
বিসি বি

6

কিউজিআইএস ৩.২.২ এবং সাগা (কিউজিআইএস-এ ডিফল্টরূপে ইনস্টল করা) ব্যবহার করার চেষ্টা করুন: "রাস্টার ভ্যালুতে পয়েন্টস" ফাংশনটি আপনার জন্য সবকিছু করবে: এটি একটি চিত্র ফাইল নেয় এবং রাস্টার চিত্র থেকে তথ্য গ্রহণ করে একে পয়েন্ট-ভেক্টর আকারে রূপান্তর করে।


4

হাথর্ন বিয়ারের জিএমই সরঞ্জামগুলি কমান্ড লাইনের মাধ্যমে খুব সুন্দরভাবে এটি করে এবং 'ফর' লুপের সাথে সহজে ব্যাচিংয়ের অনুমতি দেয়।

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

GME isectpntrst কমান্ড রেফারেন্স


3

গ্রাস জিআইএস-এ আপনি জিইআইআই-তে মানচিত্রটি জিজ্ঞাসা করতে পারেন বা http://grass.osgeo.org/gdp/html_grass64/r.hat.html ব্যবহার করতে পারেন


2
গ্রাসের জন্য আমি এটি পেয়েছি: pvanb.wordpress.com/2010/05/05/…
ভ্যাসিলিস

আর একটি গ্রাস মডিউল যা রাস্টার নমুনা তৈরি করতে সক্ষম তা হ'ল v.sample, যা কিউজিআইএস প্রসেসিং টুলবক্সের মাধ্যমে উপলব্ধ।
ব্যবহারকারী55937



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

আপনার যদি এফএমই অ্যাক্সেস থাকে তবে আপনি এফএমই ওয়ার্কবেঞ্চে দুটি ট্রান্সফর্মার ব্যবহার করতে পারেন।

RasterCellCoercer ( "পৃথক পয়েন্ট বা বহুভুজ মধ্যে সমস্ত ইনপুট সাংখ্যিক রাস্টার বৈশিষ্ট্য বিশ্লিষ্ট হয়েছে। এক ভেক্টর হিসেবে ফিচার রাস্টার প্রতিটি কক্ষের জন্য আউটপুট।")

PointOnRasterValueExtractor ( "বিন্দু বৈশিষ্ট্য এবং একটি একক রেফারেন্স রাস্টার লাগে। আউটপুট প্রতিটি বিন্দু অবস্থানে ব্যান্ড এবং প্যালেট মান (গুলি) নিয়ে গঠিত।")


না আমার কাছে এফএমই নেই বা ব্যবহার নেই, এটি কি একটি স্ট্যান্ডেলোন অ্যাপ্লিকেশন বা প্লাগইন?
ভ্যাসিলিস

0

দ্রুত চিন্তা:

  1. gdal_polygonize.py - আপনার রাস্টার বৈশিষ্ট্য বহুভুজ করুন
  2. PostGIS ডাটাবেসে আপনার পয়েন্ট বৈশিষ্ট্য এবং বহুভুজ sertোকান
  3. বৈশিষ্ট্যগুলি ছেদ করে এমন সমস্ত উচ্চতার মান টানতে st_intersects ফাংশনটি ব্যবহার করুন

আকর্ষণীয় পদ্ধতির, কারণ গতকাল পোস্টগিস কীভাবে ব্যবহার করতে হয় তার স্টাডিং শুরু করুন।
ভ্যাসিলিস

ধন্যবাদ, এটি মোটামুটি সরল কিন্তু এটি কাজ করে। এই পদ্ধতির সাহায্যে আমি যা তৈরি করতে সক্ষম হয়েছিল তা এখানেই রয়েছে: i.imgur.com/h8CGJ.png
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.