如何从 SQL 查询可视化 GIS 数据?

查询里的几何会画在表格旁的地图上,不必把文本复制到别的程序。可以画一个范围,再把多边形贴回 SQL。

结果里的 POLYGON 或 POINT 几乎总是一段文本。WKT、EWKT 和 GeoJSON 都能塞进单元格,于是常见做法是复制,贴进 QGIS,或在浏览器里打开查看器。

查询留在 SQL 客户端,地图在另一个程序里。你画的范围也回不到编辑器。

Kerry Studio 把这段几何画在表格旁边。地图 按钮在 OpenStreetMap 上打开分栏。文本列里有 WKT、EWKT 或 GeoJSON 就够了。原生列(geometry、SDO_GEOMETRY、POINT 等)需要引擎的空间支持。

你可以看见范围、画出多边形,再把这段 SQL 贴回编辑器,不必换到另一个程序。

如何打开地图

需要一个打开的 workspace、已连接的 SQL 标签页,以及带几何的结果。没有空间列、单元格里也没有几何时,地图 按钮不会出现。

  1. 执行会返回空间列、WKT、EWKT 或 GeoJSON 的 SELECT。
  2. 在结果面板点击 地图。
  3. 表格和地图并排。拖分隔条可以给地图更多空间。放大图标把地图开成叠层窗口。关闭地图 把整块空间还给表格。

命令面板(⌘K / CtrlK)→ 切换结果地图 效果相同。分栏不会自己打开。你若一直开着,标签页会记住。

在几何单元格里,在地图中查看 只为这个值打开一张地图,和 JSON 按钮类似。

地图上有什么

结果里的每一列几何都有一种颜色。点和面用不同的色板。图例用列名;SELECT 里有别名时用别名。如果 SELECT 写了 i.location AS home 和 z.geom AS flood,图例就是 home 和 flood。JOIN 仍在 SQL 里。地图只画已经出现在结果里的东西。

点击图钉会打开一张卡片,标题是该列的名字,内容是这一行的其他值。几何不会进卡片。

适应视图 把结果里的全部几何框进来。地图第一次打开时,这个框已经套好。对调经纬度 只改绘制。表格里的值仍是数据库返回的那个。

画完把多边形贴回 SQL

套索、矩形 和 椭圆 在地图上画。选择 是默认工具。把多边形粘贴到 SQL 会在编辑器光标处插入选中的多边形;都没选中时,插入全部绘制。一个多边形变成 POLYGON。多个会变成该标签页方言的空间并集。

在 PostgreSQL 和 MySQL 上,Kerry 粘贴 ST_GeomFromText。在 Oracle 上粘贴 SDO_GEOMETRY。在 SQLite 上粘贴 GeomFromText。这段 SQL 需要引擎的空间函数。ST_Intersects 仍然是标签页引擎自己的 SQL。

测量 显示每个多边形的面积,单位可选 m²、ha 或 km²。合并 把选中项合成一组并画出并集。可以把查询里的几何和手绘合并。

导出地图 菜单可保存 PNG、SVG、WebP 和 GeoJSON。打印 用同一组开关。

每个数据库需要什么

Kerry 不会替你安装空间扩展。单元格里已经返回的 WKT、EWKT 和 GeoJSON,没有扩展也能画。

PostgreSQL。 需要 PostGIS 扩展。没有它时,创建表和修改表里仍会出现 GEOMETRY 和 GEOGRAPHY,Kerry 会提醒该类型需要 PostGIS。在 PostgreSQL 里,CREATE EXTENSION postgis 会把 PostGIS 装到这个库。

MySQL 和 MariaDB。 空间类型是原生的(GEOMETRY、POINT、POLYGON 等)。没有额外扩展。

Oracle。 需要 Locator 或 Spatial。库里没有 SDO_GEOMETRY 类型时,Kerry 会在创建表和修改表时提醒。

SQLite。 需要 SpatiaLite。在 SQLite 连接的 扩展 里加入扩展文件,并打开 连接时加载。

四个引擎都可以:PostgreSQL、MySQL/MariaDB、Oracle、SQLite。带另一个项目 @项目.表 的查询会把行落到标签页的连接上。目标有 GIS 时,临时表用原生空间类型。没有的话,几何会写成 EWKT 文本。

各控件的说明见 结果中的地图。