我正在使用PostGIS2.0进行一些栅格/多边形相交。我很难理解应该使用哪种操作以及执行此操作最快的方法是什么。我的问题如下:
- 我有一个多边形和一个栅格
- 我想找到落在多边形内的所有像素,并获取像素值的总和
- 并且(已更新的问题):执行查询时,我正在获取原始栅格中不存在的一些像素的大量值
我难以理解应该使用ST_Intersects()
还是ST_Intersection()
。我也不知道对像素求和的最佳方法是什么。这是我尝试过的第一种方法(#1):
SELECT
r.rast
FROM
raster as r,
polygon as p
WHERE
ST_Intersects(r.rast, p.geom)
这将返回一个rast
值列表,我不确定该怎么做。我尝试使用计算汇总统计信息,ST_SummaryStats()
但不确定这是否是多边形内所有像素的加权和。
SELECT
(result).count,
(result).sum
FROM (
SELECT
ST_SummaryStats(r.rast) As result
FROM
raster As r,
polygon As p
WHERE
ST_Intersects(r.rast, p.geom)
) As tmp
我尝试过的另一种方法(#2)使用ST_Intersection()
:
SELECT
(gv).geom,
(gv).val
FROM
(
SELECT
ST_Intersection(r.rast, p.geom) AS gv
FROM
raster as r,
polygon as p
WHERE
ST_Intersects(r.rast, p.geom)
) as foo;
这将返回一个几何列表,我将对其进行进一步分析,但是我认为这样做的效率较低。
我不清楚哪个也是最快的操作顺序。我应该总是选择raster, polygon
或polygon, raster
,还是将多边形转换成栅格以使之成为栅格raster, raster
?
编辑:我使用R.K.
的链接中的一些详细信息更新了方法#2 。
使用方法2,我注意到结果中存在以下错误,这是为什么我不理解输出的部分原因。这是我原始栅格的图像,以及用于与其相交的多边形的轮廓,该轮廓覆盖在顶部:
这是使用PostGIS相交的结果:
结果的问题是返回了21474836的值,这些值不在原始栅格中。我不知道为什么会这样。我怀疑它与某个地方的小数有关(几乎除以0),但是它返回错误的结果。
ST_SummaryStats()
过#1,但不确定如何使用#2。