Функции BigQuery Geo - Как вычислить кратчайшее расстояние до периметра многоугольника - PullRequest
0 голосов
/ 04 августа 2020

Я хотел бы вычислить кратчайшее расстояние от желтой точки на изображении ниже до границы многоугольника, используя встроенные функции BigQuery Geo.

введите описание изображения здесь

Я ничего не нашел сам.

Вот запрос, который строит пример.

WITH objects AS(
  SELECT 'POLYGON((-84.3043408314983 33.78004925, -84.3058929975152 33.7780287948446, -84.3026549053438 33.77962155, -84.3018234603607 33.7798783, -84.3041030408163 33.7785105714286, -84.2983655895464 33.7814847396304, -84.2869801170094 33.7772419185107, -84.2842584693878 33.7827876938775, -84.2863881748169 33.7848439284835, -84.2963746470588 33.7897689411765, -84.2979002513655 33.790508814658, -84.2978883265306 33.7851126734694, -84.300035153059 33.78268675, -84.3043408314983 33.78004925))' wkt_string
  UNION ALL
  SELECT 'POINT(-84.2998716702097 33.7796025711153)' wkt_string

)

SELECT ST_GEOGFROMTEXT(wkt_string) geo
FROM objects    

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Используйте функцию ST_Distance для вычисления кратчайшего расстояния между фигурами:

WITH objects AS(
  SELECT 
  'POLYGON((-84.3043408314983 33.78004925, -84.3058929975152 33.7780287948446, -84.3026549053438 33.77962155, -84.3018234603607 33.7798783, -84.3041030408163 33.7785105714286, -84.2983655895464 33.7814847396304, -84.2869801170094 33.7772419185107, -84.2842584693878 33.7827876938775, -84.2863881748169 33.7848439284835, -84.2963746470588 33.7897689411765, -84.2979002513655 33.790508814658, -84.2978883265306 33.7851126734694, -84.300035153059 33.78268675, -84.3043408314983 33.78004925))' 
   AS poly,
  'POINT(-84.2998716702097 33.7796025711153)' AS point
)
SELECT ST_Distance(ST_GEOGFROMTEXT(poly), ST_GEOGFROMTEXT(point))
FROM objects    

Одно предостережение - он вычисляет расстояние между точкой и многоугольником, поэтому, если точка находится внутри многоугольника, расстояние равно 0. Если вы действительно хотите расстояние до многоугольника границы , добавьте ST_Boundary к смеси:

WITH objects AS(
   ...
)
SELECT ST_Distance(ST_Boundary(ST_GEOGFROMTEXT(poly)), ST_GEOGFROMTEXT(point))
FROM objects    
0 голосов
/ 04 августа 2020

это функция, которую я искал:

ST_CLOSESTPOINT (geography_1, geography_2 [, use_spheroid]).

...