如何在 deck.gl 中将超集数据显示为多边形

How to display Superset data as polygons in deck.gl

Superset 具有 deck.gl Polygon 可视化类型。

我正在尝试使用这种类型的图表来显示从 PostGIS 启用的 postgres 数据库中获取的多边形;但是,除了图例之外,没有显示任何视觉信息。

我的数据库查询如下:

SELECT *, ST_AsGeoJSON(ST_Transform((ST_DUMP(geom)).geom::geometry(Polygon, 27700), 4326)) as geom
  FROM <my-schema>.<my-table>;

这 returns geojson Polygon 记录如下:

{
  "type": "Polygon",
  "coordinates": [[
    [-0.029742716, 51.492925448],
    [-0.028980512, 51.491626654],
    [-0.027819506, 51.490055839],
    ...

我已在 QGIS 中验证查询有效并且 geoJSON 信息显示正确。

但是,这在 superset 中似乎不起作用:我创建了一个 deck.gl Polygon 图表,我为其选择了 JSON 行编码(相对于 Polyline 或 Geohash)。在选择一个指标并将视口坐标居中到正确的地理范围后,我 运行 进行了查询,但在图表中看不到任何空间信息,只有一个图例显示了所选指标的中断。

虽然地图是空的,但相邻的按钮用于将数据下载为 CSV 或 JSON return 完整数据,所以我倾向于认为我误解了其中一个设置或者我提供的数据格式不正确。

关于如何让这个插件工作以及它可能期望数据采用什么格式的任何指示?

总的来说,我很难找到有关如何使用 superset deck.gl 插件的任何文档:是否有可能有用的示例或文档?

对于其他人 运行 遇到同样的问题,这就是我的方案最终有效的方法:

使用 ST_AsGeoJSON 函数从 postGIS 返回的 JSON 字符串仅包含 geoJSON 规范的几何组件。这意味着在 deck.gl 可以识别之前,有必要将这些几何图形包装在一个成熟的 geoJSON 对象中。

例如:

SELECT *, json_build_object(
  'type',       'Polygon',
  'geometry',   ST_AsGeoJSON(ST_Transform(geom, 4326))::json)::text as geoJSON
FROM <my-schema>.<my-table>;

如果您使用的是多边形,那么您需要先提取一个多边形:

SELECT *, json_build_object(
  'type',       'Polygon',
  'geometry',   ST_AsGeoJSON(ST_Transform((ST_DUMP(geom)).geom::geometry(Polygon, 27700), 4326))::json)::text as geoJSON
FROM <my-schema>.<my-table>;

请注意,在这两种情况下,geoJSON 结果都必须转换为文本类型,否则超集在运行内部查询时会出现问题,否则无法对结果进行排序(重复检查? ) 如果使用 JSON.