欢迎光临
我们一直在努力

PostGIS实现栅格数据矢量化-逐像素转换【ST_PixelAsPolygons】

全部文章内容请转公众号【时空智能计算】及交流群867520770,原创不易,求关注支持,更多开源GIS相关知识技能分享,免费提供学习问答交流。

一、函数概述

ST_PixelAsPolygons主要实现栅格转转矢量数据,核心特点是能将栅格的每个像素转换为对应的地理多边形(像素的空间边界),并返回该像素的列坐标(x)、行坐标(y)和像素值(val),是栅格数据矢量化、像素级空间分析的基础工具,可对比【ST_DumpAsPolygons】函数。

二、参数解析

1. 函数语法

setof record ST_PixelAsPolygons(
raster rast, — 输入栅格对象
integer band = 1, — 待转换的波段号,默认1(从1开始索引)
boolean exclude_nodata_value = TRUE — 是否排除NODATA值的像素,默认TRUE
);

2. 返回值结构

函数返回记录集合(setof record),每条记录对应栅格的一个像素,包含 4 个字段:

字段名类型说明
geom geometry 该像素的地理边界多边形(与栅格的空间参考、像素大小完全匹配)
val double precision 该像素的数值(NODATA 值会返回 NULL,若exclude_nodata_value=TRUE则不返回该像素)
x integer 像素的列坐标(1 基索引,从左到右计数)
y integer 像素的行坐标(1 基索引,从上到下计数)

三、核心特性

1. 逐像素返回,无合并
  • 这是该函数最核心的特点:栅格有多少个有效像素,就返回多少个多边形,每个多边形严格对应一个像素的空间范围。

  • 区别于ST_DumpAsPolygons:后者会将连续且值相同的像素合并为一个多边形,而ST_PixelAsPolygons始终逐像素返回,适合需要像素级精细分析的场景。

2. NODATA 值的灵活处理
  • exclude_nodata_value = TRUE(默认):仅返回非 NODATA 值的像素,NODATA 像素直接过滤,不生成记录;
  • exclude_nodata_value = FALSE:返回所有像素(包括 NODATA),此时 NODATA 像素的val字段为 NULL,geom字段仍为像素多边形。
3. 像素多边形的地理坐标规则

像素多边形的边界由栅格的元数据(原点、像素大小、旋转参数)决定:

  • 栅格原点(通常为左上角)是第一个像素(x=1,y=1)的角点;
  • 像素大小(ST_PixelWidth/ST_PixelHeight)决定多边形的宽和高;
  • 若栅格有旋转参数,多边形也会同步旋转,始终匹配像素的实际地理范围。

四、与 ST_DumpAsPolygons 区别

特性ST_PixelAsPolygonsST_DumpAsPolygons
返回粒度 逐像素,1 像素 = 1 多边形 合并同值连续像素,多像素 = 1 多边形
适用场景 像素级精细分析(如单像素值查询、像素边界提取) 区域级分析(如相同值的连片区域识别、栅格分区)
返回字段 geom, val, x, y geom, val
效率 数据量大(像素数 = 记录数),效率较低 数据量小(合并后记录数少),效率较高

五、典型应用

1. 像素级空间查询

查询指定地理坐标对应的栅格像素值、列行坐标:

— 查找点(0.002, 0)所在的像素信息
SELECT (gv).x, (gv).y, (gv).val
FROM (SELECT ST_PixelAsPolygons(rast) gv FROM raster_table) foo
WHERE ST_Intersects((gv).geom, ST_SetSRID(ST_MakePoint(0.002, 0), 4269));

2. 栅格像素的矢量导出

将栅格转换为矢量多边形要素,导出为 Shapefile/GeoJSON 等格式,用于 GIS 软件分析:

— 将栅格转换为矢量表
CREATE TABLE raster_as_polygons AS
SELECT
(gv).geom,
(gv).val AS pixel_value,
(gv).x AS pixel_col,
(gv).y AS pixel_row
FROM (SELECT ST_PixelAsPolygons(rast, 1, FALSE) gv FROM raster_table) foo;

— 添加空间索引,提升查询效率
CREATE INDEX idx_raster_polygons_geom ON raster_as_polygons USING GIST (geom);

3. 像素值的空间统计

统计指定区域内的像素值分布(如高程栅格的海拔统计、遥感影像的 NDVI 值统计):

— 统计研究区内像素值的最大值、最小值、平均值
WITH study_area AS (
SELECT ST_SetSRID(ST_MakePolygon(ST_MakeLine(ARRAY[
ST_MakePoint(0, 0), ST_MakePoint(0.004, 0), ST_MakePoint(0.004, 0.002), ST_MakePoint(0, 0.002), ST_MakePoint(0, 0)
])), 4269) AS geom
),
pixel_polygons AS (
SELECT (gv).val
FROM (SELECT ST_PixelAsPolygons(rast) gv FROM raster_table) foo
JOIN study_area sa ON ST_Intersects((gv).geom, sa.geom)
)
SELECT
MAX(val) AS max_val,
MIN(val) AS min_val,
AVG(val) AS avg_val
FROM pixel_polygons;

六、注意事项

  • 索引规则:像素的 x(列)、y(行)均为 1 基索引,栅格左上角第一个像素是 (x=1,y=1),避免与 0 基索引混淆;

  • 性能优化:

    • 对大栅格,先通过ST_Crop裁剪研究区,再调用该函数,减少返回的像素数量;
    • 为结果表创建空间索引(如上述示例),提升后续空间查询效率;
  • NODATA 值匹配:exclude_nodata_value过滤的是栅格波段的官方 NODATA 值(如波段设置的 NODATA=0),而非 NULL,若需过滤 NULL 值,需额外加WHERE val IS NOT NULL;

  • 多波段处理:默认处理波段 1,若需处理多波段,需为每个波段单独调用函数,或通过UNION ALL合并结果;

  • 空间参考一致性:返回的多边形与输入栅格的空间参考(SRID)完全一致,无需额外转换。

  • 七、总结

    ST_PixelAsPolygons是栅格像素级矢量化的核心工具,核心要点可归纳为 3 点:

  • 逐像素返回多边形,每个像素对应一条记录,包含几何、值、列行坐标,无合并;
  • 支持 NODATA 值过滤,默认仅返回非 NODATA 像素,适合精细分析;
  • 区别于ST_DumpAsPolygons(合并同值像素),前者适合像素级分析,后者适合区域级分析。
  • 该函数是栅格数据与矢量数据联动分析的桥梁,常用于像素值查询、栅格矢量化导出、像素级空间统计等场景,是 PostGIS 栅格处理的高频函数。

    赞(0)
    未经允许不得转载:171主机测评 » PostGIS实现栅格数据矢量化-逐像素转换【ST_PixelAsPolygons】
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址