用途:在 PostGIS 中处理三维实体、体积计算和栅格(网格)数据,例如高程模型、卫星影像与热力图;同时判断某个三维函数是否真正需要 postgis_sfcgal。
主要能力与要点:PostGIS 的 3D 与栅格功能各自独立扩展,CREATE EXTENSION postgis 不会自动启用。三维距离/相交族(ST_3DDistance、ST_3DIntersects、ST_3DDWithin、ST_3DClosestPoint)在 3.x 属于核心 GEOS 实现,无需 sfcgal;实体与曲面构建族(ST_Volume、ST_3DArea、ST_Extrude、ST_MakeSolid、ST_IsSolid、ST_Tesselate、ST_3DConvexHull)必须安装 postgis_sfcgal,否则报 SQLSTATE 42883。栅格核心决策是 in-db 与 out-db:in-db 像素存表内,适合小栅格与像素运算;out-db(raster2pgsql -R)只存文件路径与元数据,需开启 postgis.enable_outdb_rasters。连续场(高程、温度)用栅格,离散要素(地块、道路)用矢量;两者可用 ST_Clip、ST_Value 与栅格 ST_Intersection 组合。
使用方式:按需执行 CREATE EXTENSION IF NOT EXISTS postgis、postgis_sfcgal、postgis_raster、postgis_topology,并用 SELECT extname FROM pg_extension WHERE extname LIKE 'postgis%' 确认。加载栅格始终用 -t 分块,例如 raster2pgsql -s 4326 -t 256x256 -I -C -R /data/dem/*.tif public.dem | psql -d gisdb;out-db 需 SET postgis.enable_outdb_rasters = true; SET postgis.gdal_enabled_drivers TO 'ENABLE_ALL';。体量测量需 ST_Volume(ST_MakeSolid(ST_Extrude(footprint,0,0,height_m))) 链路。
适用场景:建筑足迹拉伸与体积、三维空间谓词、DEM/影像存储与查询、栅格矢量叠加分析、拓扑共享边界评估。
限制:三维距离/相交族不要再装 sfcgal;ST_Volume 对未转实体的曲面返回 0;大栅格不可整幅 in-db 未分块加载;out-db 未开启参数会导致像素读取失败;二维与三维几何混用需先强制维度。栅格相似度检索属 pgvector,与本技能无关。