用途
PostGIS 3.6.1 空间数据库技能,用于在涉及地理数据、空间查询、几何运算或基于位置功能时,确保正确使用 PostGIS 3.6.1 的最佳实践。该技能为强制适用:当文件路径匹配 /geo、/spatial、/location、/coordinate、/polygon、/geometry、/postgis、/gis 等模式,或文件内容包含 ST_*、geography、geometry、SRID 时触发。
核心原则:空间数据是特殊的,通用数据库模式在地理数据上往往失效。
主要能力
PostGIS 3.6.1 新特性
-
ST_CoverageClean(3.6.1 新增):修复多边形集合中的拓扑错误,需要 GEOS 3.14。可修复重叠、间隙、边缘不一致等问题,适用于行政边界、地块、区域等无缝覆盖场景。
-
SFCGAL 3D 函数:增强的 3D 运算支持,包括 ST_3DIntersection(真 3D 相交)、ST_3DUnion、ST_3DArea、ST_MinkowskiSum、ST_StraightSkeleton、ST_Extrude 等。适用于建筑建模、地下基础设施、空域管理、3D 地形分析。
-
Bigint 拓扑支持:支持 bigint 拓扑 ID,可处理超过 20 亿要素的拓扑,适用于国家级/大陆级数据集、高分辨率地块数据、OpenStreetMap 导入。
-
PostgreSQL 18 中断处理:正确处理 PostgreSQL 18 改进的查询取消,长时间空间运算可干净取消,不再产生孤立锁或损坏状态。
数据类型选择
- GEOMETRY:平面坐标,任意 SRID,计算更快,大距离精度较低。适用于本地/城市级应用、复杂运算、性能关键场景、非地球数据。
- GEOGRAPHY:球面坐标,始终 WGS84,距离/面积准确但计算较慢。适用于全球应用、距离/面积精度重要、简单运算、面向用户的距离计算。
SRID 选择:4326(WGS84,GPS 坐标、Web 地图)、3857(Web Mercator,瓦片地图显示)、本地投影用于精确测量。建议始终以 4326 作为存储的真实来源,计算时按需转换。
索引策略
- GiST 索引:大多数空间查询的默认选择
- BRIN 索引:适用于非常大且自然有序的数据集(如按时间排序的 GPS 轨迹)
- SP-GiST:适用于非重叠数据(点、IP 范围)
- 支持部分空间索引、复合索引、索引聚类(CLUSTER)
查询模式
- 距离查询:ST_DWithin、KNN(<-> 运算符)
- 包含查询:ST_Within、ST_Contains、ST_Intersects
- 聚合:ST_Union、ST_Collect、ST_Extent、ST_Centroid
- GeoJSON 集成:ST_AsGeoJSON、ST_GeomFromGeoJSON,支持 Feature 和 FeatureCollection 构建
验证与修复
- ST_IsValid、ST_IsValidReason 检查有效性
- ST_MakeValid 修复几何(支持 method=structure 策略)
- ST_CoverageClean 修复多边形集合
- ST_SnapToGrid 处理精度问题
性能优化
- 使用 && 进行边界框预过滤
- ST_Simplify 简化显示
- 视口感知简化
- 大表分离几何与属性
- 物化视图预计算空间连接
迁移模式
- 添加空间列、创建索引、回填数据、添加约束的分步流程
- Geometry 转 Geography 的迁移方法
使用方式
该技能在触发时会在开始时声明:「I'm applying postgis to ensure PostGIS 3.6.1 spatial best practices.」实现空间功能时需发布 PostGIS 实现摘要工件,包含空间列信息、使用的 3.6.1 特性、空间查询性能、验证清单等。
完成前检查清单:选择正确数据类型、SRID 一致(推荐 4326 存储)、所有几何列创建空间索引、验证输入几何、测试 GeoJSON 导入导出、用 EXPLAIN ANALYZE 验证查询性能、适当利用 3.6.1 特性、发布工件。
适用场景
涉及地理数据、空间查询、几何运算、基于位置功能的开发场景,包括地图应用、位置服务、GIS 数据处理、地块管理、3D 建模、大规模空间数据集等。
限制
该技能要求 PostGIS 3.6.1 与 GEOS 3.14 环境;ST_CoverageClean 需要 GEOS 3.14;SFCGAL 3D 函数需要启用 postgis_sfcgal 扩展;bigint 拓扑为 3.6.1 新增特性。具体平台、收费、价格等信息暂未提供。