SuperAPI AI 工具集

postgis

数据与分析

查看项目

更新于 10-16 03:44

技能介绍

用途:整理 PostGIS 在 PostgreSQL 中处理 geometry、geography、raster、投影与空间索引时的 SQL 写法与常见陷阱。

命名约定:函数按手册大小写拼写,例如 ST_Segmentize;geometry 列命名为 geom,geography 列命名为 geog。

排查:调试扩展行为时先执行 select postgis_full_version(); 确认已安装的 PostGIS、GEOS、PROJ、GDAL 与 SFCGAL 版本。

Raster:不要在文件系统上用 GDAL 处理,应先导入数据库再处理数据。

注意事项:非必要不要使用 geometry typmod(如 geometry(multilinestring, 4326)),改用普通 geometry 或 geography。ST_UnaryUnion(ST_Collect(geom)) 等同 ST_Union(geom)。修复无效几何时 ST_Buffer(geom, 0) 应换成 ST_MakeValid(geom),但优先从上游修正数据源。select min(ST_Distance(..)) 应改为 ST_Distance() ... order by a <-> b limit 1 以启用 KNN GiST;order by ST_Distance(c.geog, t.geog) 应写成 order by c.geog <-> t.geog。出现 ST_UnaryUnion 或需要 ST_MakeValid 通常说明前一步做法有问题。调用 ST_SetSRID 前先确认输入数据真实投影,优先在输入时设置 SRID,例如 ST_GeomFromGeoJSON、EWKT 的 SRID=4326;POINT(1 2) 或 EWKB;需要重投影时用 ST_Transform。点与多边形关系优先用 ST_Intersects。沿栅格或网格生成复杂几何时,可考虑 ST_Simplify(geom, 0)。生成尺寸可预期的邻域可用 ST_ClusterKMeans,k = 2 且 max_radius 设为所需距离。需要保留 SRID 的二进制表示用 ST_AsEWKB 而非 ST_AsWKB。投影选择:输入输出为经纬度且坐标展示给用户时用 SRID=4326;输出用于 Web 地图、ST_AsMVT 或短距离 2D KNN 时用 SRID=3857;跨反子午线做内部计算、视线、聚类与平均时用 SRID=4978,且只用支持 3D 的运算,对 2D CRS 数据先 ST_Force3DZ 再 ST_Transform。不要用 ST_Hexagon / ST_HexagonGrid,改用 h3 扩展。数据将以二进制导出、gzip 压缩并迁移且精度已知时,可考虑 ST_QuantizeCoordinates。

限制:资料未提供具体安装命令、收费、平台或性能数字,这些暂未提供。