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

如何在Snowflake中将MultiPoint转换为LineString并计算长度?

问题描述

我有一个名为multipoint的geography列,其数据示例如下:

{
  "coordinates": [
    [
      -8.734592000000001e+01,
      4.146811000000000e+01
    ],
    [
      -8.734592000000001e+01,
      4.146811000000000e+01
    ],
    [
      -8.734592000000001e+01,
      4.146811000000000e+01
    ],
    [
      -8.734592000000001e+01,
      4.146811000000000e+01
    ],
    [
      -8.734592000000001e+01,
      4.146811000000000e+01
    ]
  ],
  "type": "MultiPoint"
}

我尝试用ST_MAKELINE将其转为LineString以用ST_LENGTH计算长度,但这个函数需要恰好两个geography参数,而我每行只有一个地理对象。请问该如何转换,或者有没有其他方法计算这些点组成的线条长度?

解决方案

方法一:拆分多点后聚合生成线串

通过ST_Dump把MultiPoint拆分成单个Point,再用聚合版的ST_MakeLine按原始顺序连接成LineString,最后计算长度:

SELECT ST_Length(
  ST_MakeLine(
    (ST_Dump(multipoint)).geom
  )::geography
) AS line_length
FROM your_table;

ST_Dump会返回一组几何对象,聚合版的ST_MakeLine可接收这组对象生成线串,转成geography类型后计算的是球面长度。

方法二:直接转换为线串

PostGIS提供ST_LineFromMultiPoint函数,可直接将MultiPoint转为LineString,操作更简洁:

SELECT ST_Length(
  ST_LineFromMultiPoint(multipoint)::geography
) AS line_length
FROM your_table;

该函数会严格遵循MultiPoint中点的顺序生成对应线串。

注意事项

  • 若MultiPoint内的点坐标重复(如示例中所有点坐标一致),计算出的长度会是0,符合实际情况。
  • 确保PostGIS版本支持上述函数,ST_LineFromMultiPoint在多数新版本中均可正常使用。

内容的提问来源于stack exchange,提问作者numbers are fun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:57:16