PostGIS Raster从DEM计算最小,最大高度值和坡度

时间:2019-07-17 13:36:37

标签: postgis postgis-raster

我有一个DEM数据集和一些表示宗地的多边形。对于每个宗地,我想计算最大/最小高度和平均坡度。根据PostGIS文档和Internet上的一些示例,可以使用两个函数来计算此数据。第一个是ST_SummaryStatsAgg,第二个是ST_DumpAsPolygons

因此,我创建了一个触发器,该触发器在插入新宗地之前计算一些统计信息,但是我对结果感到困惑。这是我的代码:

--First cut the raster based on the parcel shape
SELECT INTO __rasterClip 
        ST_Union(ST_Clip(foncier.reunion_mnt.rast, NEW.geom, -9999, TRUE))
        FROM foncier.reunion_mnt 
        WHERE NEW.geom && foncier.reunion_mnt.rast;

--Compute slope with ST_DumpAsPolygons OR ST_SummaryStatsAgg
SELECT INTO __slope1 (ST_DumpAsPolygons(ST_Slope(__rasterClip, 1, '32BF', 'DEGREES', 1.0))).val;
SELECT INTO __slope2 (ST_SummaryStatsAgg(ST_Slope(__rasterClip, 1, '32BF', 'DEGREES', 1.0), 1, TRUE, 1)).max;
RAISE NOTICE 'Slope1 %', MAX(__slope1 );
RAISE NOTICE 'Slope2 %', __slope2;

--Compute min/max altitude
SELECT INTO __rasterStats (ST_SummaryStatsAgg(__rasterClip, 1, TRUE, 1)).*;
SELECT INTO __polyDump (ST_DumpAsPolygons(__rasterClip, 1, TRUE)).*;
RAISE NOTICE 'Stat % - %', __rasterStats.min,  __rasterStats.max;
RAISE NOTICE 'Poly % - %', Min( __polyDump.val ), Max( __polyDump.val );

RAISE NOTICE的结果:

NOTICE:  Slope1 5.14276456832886
NOTICE:  Slope2 51.9147148132324
NOTICE:  Stat 222.76 - 251.22
NOTICE:  Poly 225.929992675781 - 225.929992675781

显然有问题。这两个函数之间的斜率不同,并且ST_DumpAsPolygons的最小和最大高度相同。

所以您能帮我告诉我吗?

  1. 基于栅格DEM计算包裹的最小/最大高度和平均坡度的最有效方法是什么
  2. 就我的一般知识而言,最好使用ST_SummaryStatsAgg或ST_DumpAsPolygons。在这种情况下,最好在或其他上使用?
  3. 在触发器中如何声明这两个函数的变量类型(ST_SummaryStatsAgg,ST_DumpAsPolygons)。我的第一次尝试是使用它们的返回类型(summarystats和geomval)来声明它们。但是我遇到了错误,因此我切换到“记录”。正确吗?

感谢您的帮助!

0 个答案:

没有答案