Функция BigQuery Geography для вычисления декартового произведения расстояний - PullRequest
0 голосов
/ 12 марта 2020

Мне нужно рассчитать декартово произведение расстояний для массива точек GEO. Более конкретно, чтобы вычислить расстояние от первой точки до всех остальных 5 точек, затем расстояние от второй точки до всех остальных точек и т. Д. c ..

Интересно, есть ли функция BigQuery Geography, которая может выполнять этот тип вычислений эффективно.

Альтернатива состоит в том, чтобы сделать это явно пара за парой, что является своего рода методом грубой силы.

POINT(-95.665885 29.907145)
POINT(-95.636533 29.757219)
POINT(-95.652796 29.89204)
POINT(-84.27087 33.991642)
POINT(-84.466853 33.987008)

1 Ответ

1 голос
/ 12 марта 2020

Я пытался создать пример, используя данные вашего примера:

//Creating a temporary table with your data
with t as 
(Select * from UNNEST(
['POINT(-95.665885 29.907145)',
'POINT(-95.636533 29.757219)',
'POINT(-95.652796 29.89204)',
'POINT(-84.27087 33.991642)',
'POINT(-84.466853 33.987008)']) f
)

//Doing a cross join of the created table with itself, filtering some cases to avoid calculating the distance of a point to itself and calculating the distance between the points

select
  t.f point_1, 
  t2.f point_2, 
  ST_DISTANCE(ST_GeogFromText(t.f), ST_GeogFromText(t2.f))
from t cross join t t2
where t.f <> t2.f
group by point_1, point_2

Это то, что вы ищете? Конечно, его можно оптимизировать, если учесть, что расстояние между двумя точками одинаково, независимо от их порядка.

...