ST_MAKELINE即使不是连续的也要丢弃重复的点

时间:2019-10-04 10:04:51

标签: google-bigquery gis

考虑以下简化示例:

SELECT ST_MAKELINE([
  ST_GEOGPOINT(5, 51),
  ST_GEOGPOINT(5, 52),
  ST_GEOGPOINT(5, 51)
])

我希望这会构成一条包含三个点的线,该线会自身加倍。相反,我得到的是:

LINESTRING(5 51, 5 52)

BigQuery似乎正在丢弃重复的点,即使它们不是连续的也是如此。这弄乱了我的距离计算,其中涉及到所得线串的ST_LENGTH

作为一种解决方法,我正在构造一系列的线串,每个连续的点都是两个,然后求和它们的距离。但这很尴尬和冗长。

有没有一种方法可以创建线串而不丢弃重复的点?

1 个答案:

答案 0 :(得分:0)

会发生什么情况,BigQuery GIS会丢弃重复的重叠边(而不是顶点)。

例如您可以使用行字符串A,B,C,A,并且如果A,B和C不在同一行上,则不会丢弃任何内容,A在该行中出现两次。但是,如果两个边缘完全重叠-重叠部分将被丢弃。

另一方面,这里没有重复的顶点,但是第二条边与第一条边完全重叠,因此将其忽略:

SELECT ST_MAKELINE([
  ST_GEOGPOINT(5, 51),
  ST_GEOGPOINT(5, 53),
  ST_GEOGPOINT(5, 52)
])

LINESTRING(5 51, 5 52, 5 53)

目前尚无办法避免这种行为-BigQuery地理表示一个点集,随着集合的发展,将两个相同的集进行并集时,您只会得到该集的一个副本。