ST_MAKELINE 即使不连续也丢弃重复点
ST_MAKELINE discarding duplicate points even if not consecutive
考虑这个简化的例子:
SELECT ST_MAKELINE([
ST_GEOGPOINT(5, 51),
ST_GEOGPOINT(5, 52),
ST_GEOGPOINT(5, 51)
])
我希望这会构建一条包含三个点的线,该线本身会加倍。相反,我得到的是:
LINESTRING(5 51, 5 52)
似乎 BigQuery 正在丢弃重复的点,即使它们不是连续的。这搞乱了我的距离计算,其中涉及获取结果线串的 ST_LENGTH
。
作为解决方法,我构建了一系列线串,每个都是两个连续的点,然后将它们的距离相加。但它很笨拙和冗长。
有没有办法在不删除重复点的情况下创建线串?
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 Geography 代表一个点集,随着集合的发展,当您合并两个相同的集合时,您只会得到这个集合的一个副本。
考虑这个简化的例子:
SELECT ST_MAKELINE([
ST_GEOGPOINT(5, 51),
ST_GEOGPOINT(5, 52),
ST_GEOGPOINT(5, 51)
])
我希望这会构建一条包含三个点的线,该线本身会加倍。相反,我得到的是:
LINESTRING(5 51, 5 52)
似乎 BigQuery 正在丢弃重复的点,即使它们不是连续的。这搞乱了我的距离计算,其中涉及获取结果线串的 ST_LENGTH
。
作为解决方法,我构建了一系列线串,每个都是两个连续的点,然后将它们的距离相加。但它很笨拙和冗长。
有没有办法在不删除重复点的情况下创建线串?
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 Geography 代表一个点集,随着集合的发展,当您合并两个相同的集合时,您只会得到这个集合的一个副本。