답변:
QGIS "Point Sampling Tool"은 원하는 플러그인이어야합니다.
사용 방법에 대한 자세한 설명은 다음과 같습니다. http://pvanb.wordpress.com/2010/02/15/sampling-raster-values-at-point-locations-in-qgis/
Paolo의 의견을 기반으로 업데이트 :
플러그인이 유일한 솔루션은 아니며 더 이상 항상 가장 쉬운 솔루션은 아닙니다. 대안적인 솔루션은 처리 툴박스에서 Saga 함수 '포스터에 래스터 값 추가'입니다. 자세한 내용은 http://pvanb.wordpress.com/2014/07/01/sampling-raster-values-at-point-locations-in-qgis-an-update/ 를 참조 하십시오
이 스레드에서 언급 한 QGIS 및 SAGA GUI 도구에 문제가 Raster values to points
있었습니다 ( 어떤 이유로 실패하고 도움이되지 않는 오류가 발생하여 GRASS가 도움이되지 않는 v.sample
완전히 새로운 계층을 만들었습니다). 잠시 동안 GUI 도구를 사용하지 못한 후에 필드 계산기에서이 작업을 시도했습니다. 그것은 잘 작동했고 GUI가 허용하는 것보다 프로세스를 조금 더 잘 제어하고 그 과정에서 다른 계산을 할 수있었습니다.
같은 좌표계에 pts
이름이 지정된 레이어 와 이름이 다른 레이어가 있다고 가정합니다 rast
. 로 rast
표시된 각 X, Y 쌍에서 샘플링하고 싶습니다 pts
.
이전에 필드 계산기를 사용해 본 적이 없다면 매우 간단합니다. "식"상자에 계산을 입력하면 Q가 중간 열에 여러 변수와 연산을 제공하고 오른쪽 열에 도움말 텍스트가 표시됩니다. 이 과정을 4 단계로 나눕니다.
pts
샘플링 하려는 레이어 의 속성 테이블을 엽니 다 .
필드 계산기 대화 상자 에 있으면 레이어 에서 새 필드를 만들지 또는 기존 필드 를 수정 할지 선택 하십시오 pts
.
다음으로, 새로운 또는 기존 pts
속성 열 을 채우는 표현식을 작성하십시오 . 나를 위해 일한 표현식 코드를 수정하여 시작할 수 있습니다.
raster_value('rast', 1, make_point($x, $y))
raster_value()
래스터 레이어 이름으로 'rast'
, 밴드 번호 1
및 지점 형상 make_point()
. $x
및 $y
속성 테이블의 각 행에있는 점의 위치에 따라 기하학적 변수이다.이 방법을 사용하면 other_rast
from 이라는 다른 래스터 레이어의 값을 빼는 등의 산술 연산을 수행 할 수 rast
있어 GUI 도구보다 시간이 많이 절약되었습니다. 아래 예 :
raster_value('rast', 1, make_point($x, $y)) - raster_value('other_rast', 1, make_point($x, $y))
다시 주 세 개의 층이 pts
, rast
그리고 other_rast
일에이 방법에 대해 동일한 좌표 시스템에 있어야합니다.
Hawthorne Beyer의 GME 도구는 명령 행을 통해이를 잘 수행하며 'for'루프를 사용하여 쉽게 일괄 처리 할 수 있습니다.
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-points.html 에는 R Raster 패키지를 사용하여 점에서 래스터 값을 추출하는 단계별 가이드가 있습니다.
이것을 사용할 수 있습니다 : http://www.saga-gis.org/saga_module_doc/2.1.3/shapes_grid_3.html
Qgis의 SAGA Toolbox에 있습니다! 그것은 한 단계에서 모든 것을 수행합니다 :)
다음은 파이썬과 gdal을 사용하여 작성한 함수입니다. 이 함수는 점 좌표를 포함하는 래스터 및 팬더 데이터 프레임 목록을 가져와 점 좌표, 각 래스터 셀의 중심 및 각 셀 값이 포함 된 팬더 데이터 프레임을 반환합니다. 이 기능은 개발중인 패키지 chorospy 패키지의 일부입니다 ( 여기 참조 ).
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 Workbench에서 두 개의 변압기 중 하나를 사용할 수 있습니다.
RasterCellCoercer는 ( "개인 점 또는 다각형으로 모든 숫자 입력 기능 래스터 분해. 일 특징 벡터 래스터에서 각 셀에 대해 출력된다.")
PointOnRasterValueExtractor는 ( "포인트 기능과 단일 참조 래스터 걸린다. 출력은 각 점의 위치에서의 주파수 대역과 팔레트 값 (들)로 구성된다.")
빠른 생각 :