我不想在Arcgis中使用。
我更喜欢Qgis或Mapwindow或其他开源gis。
#1 楼
QGIS“点采样工具”应该是您要寻找的插件。以下是如何使用它的详细说明: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/
评论
人们仍然可以通过此问答找到上述职位。但是,该插件不是唯一的解决方案,也不再总是最简单的解决方案。另一种解决方案是处理工具箱中的Saga函数“将栅格值添加到点”。详情请参阅这篇文章。
– Ecodiv
2014年7月4日在10:17
警告。我只是运行了点采样工具。 60,000点和13个栅格。结果每年都无法通过我的30个随机样本测试。该工具在大型数据集方面存在问题。我不会用它。
–如果您不知道-只是GIS
16年2月11日在15:29
尽管大型数据集存在上述问题,但一次提取所有多波段值非常有用。所有其他与QGIS相关的解决方案均仅支持提取一个波段(例如GRASS r.what)或禁止使用多波段栅格(例如Saga-栅格点值)。
–EikeMike
17年6月6日在12:53
#2 楼
我在此线程中提到的QGIS和SAGA GUI工具遇到了问题(Raster values to points
由于某种原因失败并抛出了无用的错误,而GRASS v.sample
创建了一个全新的无用层)。在使用GUI工具一段时间后,我尝试在Field Calculator中执行此操作。它工作得很好,并且我能够控制该过程比GUI允许的要好一些,并在此过程中进行了其他一些计算。在同一坐标系中。您想对pts
中表示的每个X,Y对采样rast
。如果您以前没有使用过字段计算器,这很简单。您将在“表达式”(Expression)框中输入计算,Q在中间列为您提供许多变量和运算,在右列中显示帮助文本。我将这个过程分为四个步骤:
打开要采样的
rast
图层的属性表。一旦进入“字段计算器”对话框,选择是要创建新字段还是修改
pts
图层中的现有字段。接下来,构建一个表达式以填充新的或现有的
pts
属性列。您可能会先修改对我有用的表达式代码:raster_value('rast', 1, make_point($x, $y))
您必须为
pts
提供一个栅格图层名称pts
,波段编号raster_value()
,点几何在'rast'
。 1
和make_point()
是几何变量,取决于点在属性表的每一行中的位置。我花了很多时间在GUI工具上。以下示例:raster_value('rast', 1, make_point($x, $y)) - raster_value('other_rast', 1, make_point($x, $y))
再次注意,三层
$x
,$y
和other_rast
必须在同一坐标系中才能起作用。评论
这是这个问题的最佳答案
– B-C B.
19年6月25日在15:38
我强烈建议遵循此答案,因为我在所有其他解决方案上都遇到了麻烦。
–FraNut
20-04-22在13:13
这是我一直在寻找的答案。我已经厌倦了由SAGA,GDAL或QGIS工具创建的数百个临时文件。非常感谢。
–花花公子
20/09/1在10:13
#3 楼
在PostGIS 2.0中,您可以执行以下操作:SELECT ST_Value(rast, geom) val
FROM yourrastertabe, yourpointtable
WHERE ST_Intersects(rast, geom)
确保在加载栅格时将栅格平铺(使用-t 10x10加载)。
#4 楼
尝试使用QGIS 3.2.2和SAGA(默认情况下已安装在QGIS中):“栅格值转换为点”功能将为您完成所有工作:它将图像文件转换为点矢量形状,从而从光栅图像中获取信息。#5 楼
Hawthorne Beyer的GME工具可以通过命令行很好地做到这一点,并允许使用“ for”循环轻松进行批处理。isectpntrst(in="path/to/shapefile", raster="path/to/raster", field="fieldname")
GME isectpntrst命令参考
#6 楼
在GRASS GIS中,您可以在GUI中查询地图,也可以使用http://grass.osgeo.org/gdp/html_grass64/r.what.html评论
对于草,我发现了这一点:pvanb.wordpress.com/2010/05/05/…
–Vassilis
10-11-19在8:58
v.sample是另一个能够对栅格进行采样的GRASS模块,该模块也可以通过QGIS处理工具箱获得。
–user55937
16年2月12日在20:45
#7 楼
http://gis-techniques.blogspot.com/2012/10/extract-raster-values-from-points.html具有逐步指南,可使用R Raster包从点提取栅格值。
#8 楼
您可以使用此工具:http://www.saga-gis.org/saga_module_doc/2.1.3/shapes_grid_3.html
它在Qgis的SAGA工具箱中!它一步就能完成所有事情:)
#9 楼
这是我使用python和gdal编写的函数。该函数获取栅格列表和包含点坐标的pandas数据框,并返回带有点坐标的pandas数据框,各个栅格像元的质心和各个像元值。该功能是“开发中”程序包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
#10 楼
如果可以访问FME,则可以在FME Workbench中使用两个转换器之一。RasterCellCoercer(“将所有输入的数字栅格要素分解为单个点或多边形。为每个像元输出一个矢量要素在栅格中。”)
PointOnRasterValueExtractor(“获取点要素和单个参考栅格。输出由每个点位置处的波段和调色板值组成。”)
评论
不,我没有或没有使用FME,是独立的应用程序还是插件?
–Vassilis
2010-11-26 9:14
#11 楼
快速思考:gdal_polygonize.py-将栅格要素多边形化
将点要素和面插入PostGIS数据库中
使用st_intersects函数将所有高程值提取到要素相交
评论
有趣的方法,因为昨天开始学习如何使用Postgis。
–Vassilis
2012年12月12日20:35
谢谢,这相当简单,但是可以用。这是我使用这种方法能够产生的结果:i.imgur.com/h8CGJ.png
–user5584
2012-03-14 13:58
评论
因此,您有一些点,您需要从这些点下的栅格中提取值,或者需要将栅格像元转换为点。在检查答案之前先检查一下。首先,我有要点,我需要从那些点下的复活节中提取值。谢谢!!