内容提要
最近,我一直在探索地理空间方面的问题。但是,如果你看不见,很难调试。有一些可视化方法,比如pgAdmin可以识别和绘制几何类型的列,也可以使用Leaflet等工具搭建一个Web服务器来渲染栅格和/或矢量瓦片。然而,我不喜欢这两种解决方案。我喜欢psql、vim和shell,并且不想在这里进行查询测试,然后一遍又一遍地将其他查询复制到pgAdmin中。所以,我需要新的工具。你需要zsh、psql和一个可以渲染图像的终端仿真器。我使用的是wezterm,但你只需要更改每个wezterm imgcat调用的位置。这两个工具也可以输出到文件。第一个工具是pgisd,它运行给定的SQL脚本并在输出中渲染几何或地理列。我有一些从栅格中转储出来的小多边形,经过过滤、相交、切片等处理。我的脚本如下:select geom, st_asewkt(st_centroid(geom)) as ewkt_centroid, format('%1$s %2$s, radius %3$s', round(st_x((st_maximuminscribedcircle(geom)).center)::numeric, 2), round(st_y((st_maximuminscribedcircle(geom)).center)::numeric, 2), round((st_maximuminscribedcircle(geom)).radius::numeric, 2)) as text_largest_circle from lots_of_ctes。在没有指定边界框的情况下,你几乎看不到在WGS 84投影下蒙古附近的几个点,因为整个图像被压缩到大约800像素宽。通过调整where子句,可以排除一个异常值并关注其他部分。pgisd还
延伸解读
为何选择终端工具进行地理空间调试
作者偏好psql、vim和shell的工作流,认为pgAdmin或Leaflet等可视化方案会打断反馈循环。pgisd直接在终端渲染几何列,避免了在多个工具间复制查询的麻烦。对于习惯命令行、追求快速迭代的开发者,这种轻量级方案能显著提升调试效率,尤其适合处理复杂SQL脚本中的空间数据。
pgisd的渲染机制与使用限制
pgisd会运行查询两次以检测并构建每个几何列的渲染代码,支持同时渲染多个geom、ewkt或text列。但输出到文件时仅保存第一个几何列,这可能影响批量导出需求。使用时需注意终端仿真器需支持图像渲染,如wezterm,否则需调整imgcat调用。
边界框对可视化效果的关键影响
在WGS 84投影下,若不指定边界框,全球范围会被压缩到约800像素宽,导致蒙古附近的点难以辨认。通过调整where子句排除异常值并聚焦局部区域,可以清晰显示细节。但作者提到,当范围缩小到约1度宽高时,十字准线会变得不稳定,需留意精度问题。
从矢量到栅格:数据需求的自然扩展
作者最初处理从栅格转出的多边形,后因高程和土地覆盖分析需要,开始直接使用栅格数据。借助国际马铃薯中心Diva GIS项目提供的免费数据,栅格处理更简单:定位列并定义感兴趣区域的边界框即可。这反映了地理空间工作中矢量与栅格数据常需结合使用的特点。
Q&A
pgisd是什么工具,它的主要功能是什么?
pgisd是一个工具,可以运行SQL脚本并渲染几何或地理列。
为什么作者不喜欢使用pgAdmin和Leaflet?
作者更喜欢使用psql、vim和shell,不想频繁在pgAdmin中测试查询。
如何使用pgisd处理小多边形?
可以通过SQL脚本处理小多边形,计算其质心和最大内切圆的半径。
在WGS 84投影下,为什么图像可能会被压缩?
在没有指定边界框的情况下,图像会被压缩到约800像素宽,导致细节难以识别。
作者使用的SQL脚本有什么特点?
脚本可以过滤、相交、切片小多边形,并计算其质心和最大内切圆的半径。
作者提到的Diva GIS项目提供了什么数据?
Diva GIS项目提供了免费的高程和土地覆盖栅格数据。