mcpField
P
postgis

postgis

github.com/postgis数据与数据库2.3k249 次安装4 天前更新
代码仓库

关于 postgis

面向 PostGIS 开发者的空间 SQL 技能,涵盖几何处理、坐标系选择和查询优化,提供处理地理空间数据的实践建议。

主要功能

  1. 01PostGIS 函数命名规范
  2. 02几何与地理列命名建议
  3. 03投影和 SRID 选择建议
  4. 04空间查询与索引建议
  5. 05栅格数据处理指导

适用场景

  1. 01编写空间 SQL 查询
  2. 02为地图输出选择投影
  3. 03排查 PostGIS 扩展行为

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/postgis/postgis --skill postgis

安装后在 Claude Code 中输入/postgis确认已加载。

详细介绍

命名

  • PostGIS 函数的拼写应与手册中的写法一致(st_segmentize → ST_Segmentize)。
  • 几何列称为 geom;地理列称为 geog。

检查

  • 调试扩展行为时,检查 select postgis_full_version();,确认已安装的 PostGIS、GEOS、PROJ、GDAL 和 SFCGAL 版本。

栅格

  • 不要在文件系统上使用 GDAL。将数据导入数据库后,在数据库中处理。

注意事项

  • 除非另有要求,否则不要使用 geometry typmod(例如 geometry(multilinestring, 4326)),改用普通的 geometry 或 geography。这样可以避免 ST_Multi 带来的冗余,以及 ST_SetSRID 引发的错误。
  • ST_UnaryUnion(ST_Collect(geom)) 就是 ST_Union(geom)。
  • 必须修复无效几何时,应使用 ST_MakeValid(geom) 而非 ST_Buffer(geom, 0),但应优先从上游修复无效几何的来源。
  • 应将 select min(ST_Distance(..)) 改为 select 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 设为所需距离。
  • 二进制表示应使用 ST_AsEWKB 而非 ST_AsWKB,以保留 SRID。
  • 选择投影: 输入或输出为经纬度,且坐标值将展示给用户时,使用 SRID=4326(2D 经纬度)。 输出将在 Web 地图上展示、用于 ST_AsMVT,或将执行短距离的 2D KNN 请求时,使用 SRID=3857(2D 球面墨卡托)。 执行内部计算、视线分析、聚类以及跨越反子午线的平均值计算时,使用 SRID=4978(3D XYZ)。注意:仅使用支持 3D 的操作;将 2D CRS 数据传入 ST_Transform 前,先对其调用 ST_Force3DZ。
  • 使用 h3 扩展,而非 ST_Hexagon / ST_HexagonGrid。
  • 如果确定数据将以二进制形式转储、压缩并传输,且精度已知,可以考虑使用 ST_QuantizeCoordinates。

评论

支持 Markdown