You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中从指定JSON数组生成LineString几何类型?

PostgreSQL 拼接JSON坐标生成LineString文本方案

实现逻辑

直接利用PostgreSQL内置JSON处理函数拆分坐标数组,再拼接为要求的WKT格式,无需额外扩展:

  • 用->运算符提取JSON中的coordinates坐标数组
  • 用json_array_elements展开数组为单行的坐标点元素
  • 每个坐标点提取经度(第一个元素)和纬度(第二个元素),拼接为lon lat格式
  • 用string_agg将所有坐标点用逗号拼接,外层包裹LINESTRING()即可

完整SQL示例

WITH input_data AS (
    -- 此处替换为你的实际JSON数据
    SELECT '{"type": ["LineString","LineString"],"coordinates": [[11.617730473115067,48.19782098770711],[11.617959999927661,48.19828004114453],[11.617999999927662,48.1983600411445],[11.618139999927674,48.19867004114437],[11.61840999992768,48.19925004114419],[11.618709999927699,48.19985004114398]]}'::json AS raw_json
)
SELECT 
    'LINESTRING(' || string_agg(point_elem->>0 || ' ' || point_elem->>1, ',') || ')' AS linestring_text
FROM input_data,
     json_array_elements(raw_json->'coordinates') AS point_elem;

执行结果

输出完全符合要求的格式:

LINESTRING(11.617730473115067 48.19782098770711,11.617959999927661 48.19828004114453,11.617999999927662 48.1983600411445,11.618139999927674 48.19867004114437,11.61840999992768 48.19925004114419,11.618709999927699 48.19985004114398)

可选方案(需PostGIS扩展)

如果需要直接生成PostGIS原生LineString几何类型,可直接修正原JSON不符合标准GeoJSON的type字段后,调用内置函数转换:

WITH input_data AS (
    SELECT '{"type": ["LineString","LineString"],"coordinates": [[11.617730473115067,48.19782098770711],[11.617959999927661,48.19828004114453],[11.617999999927662,48.1983600411445],[11.618139999927674,48.19867004114437],[11.61840999992768,48.19925004114419],[11.618709999927699,48.19985004114398]]}'::json AS raw_json
)
SELECT 
    ST_GeomFromGeoJSON(
        json_build_object(
            'type', 'LineString',
            'coordinates', raw_json->'coordinates'
        )
    ) AS linestring_geom
FROM input_data;

内容的提问来源于stack exchange,提问作者Tibor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:57:06