ST_MAKELINE отбрасывает дублирующиеся баллы, даже если не подряд - PullRequest
0 голосов
/ 04 октября 2019

Рассмотрим этот упрощенный пример:

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 голосов
/ 04 октября 2019

Что происходит, если 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 представляет набор точек, и, когда наборы идут, когда вы объединяете два идентичных набора, вы получаете только одну копию этого набора.

...