postgis_raster

PostGIS 光栅类型和函数

概览

扩展包名版本分类许可证语言
postgis3.6.2GISGPL-2.0C
ID扩展名BinLibLoadCreateTrustReloc模式
1500postgis-
1501postgis_topologytopology
1502postgis_raster-
1503postgis_sfcgal-
1504postgis_tiger_geocodertiger
1505address_standardizer-
1506address_standardizer_data_us-
相关扩展postgis pointcloud_postgis pointcloud pgrouting h3 q3c ogr_fdw geoip pg_polyline
下游依赖h3_postgis

版本

类型仓库版本PG 大版本包名依赖
EXTPGDG3.6.21817161514postgispostgis
RPMPGDG3.6.21817161514postgis36_$v-
DEBPGDG3.6.21817161514postgresql-$v-postgis-3-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64PGDG 3.6.1PGDG 3.6.1PGDG 3.6.1PGDG 3.6.1PGDG 3.6.1
el8.aarch64PGDG 3.6.1PGDG 3.6.1PGDG 3.6.1PGDG 3.6.1PGDG 3.6.1
el9.x86_64PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2
el9.aarch64PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2
el10.x86_64PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2
el10.aarch64PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2
d12.x86_64PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2
d12.aarch64PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2
d13.x86_64PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2
d13.aarch64PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2
u22.x86_64PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2
u22.aarch64PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2
u24.x86_64PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2
u24.aarch64PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2PGDG 3.6.2

安装

您可以直接安装 postgis 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:

pig repo add pgdg -u          # 添加 PGDG 仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install postgis;          # 当前活跃 PG 版本安装
pig ext install -y postgis -v 18  # PG 18
pig ext install -y postgis -v 17  # PG 17
pig ext install -y postgis -v 16  # PG 16
pig ext install -y postgis -v 15  # PG 15
pig ext install -y postgis -v 14  # PG 14
dnf install -y postgis36_18       # PG 18
dnf install -y postgis36_17       # PG 17
dnf install -y postgis36_16       # PG 16
dnf install -y postgis36_15       # PG 15
dnf install -y postgis36_14       # PG 14
apt install -y postgresql-18-postgis-3   # PG 18
apt install -y postgresql-17-postgis-3   # PG 17
apt install -y postgresql-16-postgis-3   # PG 16
apt install -y postgresql-15-postgis-3   # PG 15
apt install -y postgresql-14-postgis-3   # PG 14

创建扩展

CREATE EXTENSION postgis_raster CASCADE;  -- 依赖: postgis

用法

PostGIS Raster:PostGIS 的栅格数据支持

PostGIS Raster 为 PostGIS 扩展了栅格(网格)数据支持,可直接在 PostgreSQL 中存储栅格数据。它支持在 SQL 中进行栅格分析、栅格/矢量交互和地图代数运算。

安装

CREATE EXTENSION postgis_raster;

加载栅格数据

raster2pgsql 命令行工具可将栅格文件(GeoTIFF 等)导入 PostgreSQL:

# 将 GeoTIFF 以 100x100 瓦片导入,创建空间索引,使用 COPY
raster2pgsql -s 4326 -t 100x100 -I -C -M elevation.tif public.dem | psql mydb

# 追加到已有表
raster2pgsql -s 4326 -t 100x100 -a more_data.tif public.dem | psql mydb

关键参数:

  • -s <srid> – 设置 SRID
  • -t <width>x<height> – 将栅格切分为瓦片
  • -I – 创建 GiST 空间索引
  • -C – 应用栅格约束
  • -M – 加载后执行 vacuum analyze

查询栅格数据

栅格元数据

-- 获取栅格尺寸和像素大小
SELECT rid,
    ST_Width(rast) AS width,
    ST_Height(rast) AS height,
    ST_ScaleX(rast) AS pixel_size_x,
    ST_ScaleY(rast) AS pixel_size_y,
    ST_NumBands(rast) AS bands,
    ST_SRID(rast) AS srid
FROM dem LIMIT 5;

像素值

-- 获取指定点的值
SELECT ST_Value(rast, ST_SetSRID(ST_MakePoint(-73.985, 40.748), 4326)) AS elevation
FROM dem
WHERE ST_Intersects(rast, ST_SetSRID(ST_MakePoint(-73.985, 40.748), 4326));

-- 获取列/行位置的值(波段 1)
SELECT ST_Value(rast, 1, 10, 20) FROM dem WHERE rid = 1;

波段统计

SELECT (ST_SummaryStats(rast)).*
FROM dem WHERE rid = 1;
-- 返回:count、sum、mean、stddev、min、max

栅格处理

按矢量几何裁剪栅格

-- 将栅格裁剪到多边形边界
SELECT ST_Clip(rast, geom) AS clipped_rast
FROM dem, boundaries
WHERE ST_Intersects(rast, geom);

地图代数

逐像素运算:

-- 单栅格地图代数:高程分类
SELECT ST_MapAlgebra(rast, 1, NULL,
    'CASE WHEN [rast] > 100 THEN 1 WHEN [rast] > 50 THEN 2 ELSE 3 END') AS classified
FROM dem;

-- 双栅格地图代数:两个 DEM 的差值
SELECT ST_MapAlgebra(a.rast, 1, b.rast, 1, '[rast1] - [rast2]') AS diff
FROM dem_old a, dem_new b
WHERE ST_Intersects(a.rast, b.rast);

栅格/矢量交互

-- 将栅格像素转换为矢量点
SELECT (ST_PixelAsPoints(rast)).*
FROM dem WHERE rid = 1;

-- 将栅格转换为多边形(每个唯一值一个)
SELECT (ST_DumpAsPolygons(rast)).*
FROM dem WHERE rid = 1;

-- 栅格与矢量相交并获取值
SELECT p.name, ST_Value(d.rast, p.geom) AS elevation
FROM dem d, points p
WHERE ST_Intersects(d.rast, p.geom);

重采样与重投影

-- 重采样为不同的像素大小
SELECT ST_Rescale(rast, 0.001, -0.001) FROM dem;

-- 重投影到不同的 SRID
SELECT ST_Transform(rast, 3857) FROM dem;

导出栅格

-- 导出为 GeoTIFF(二进制)
SELECT ST_AsTIFF(rast) FROM dem WHERE rid = 1;

-- 导出为 PNG
SELECT ST_AsPNG(rast) FROM dem WHERE rid = 1;

-- 导出为 JPEG
SELECT ST_AsJPEG(rast) FROM dem WHERE rid = 1;

最后修改 2026-03-12: update extension pages (f579993)