Поделиться через


geo_polygon_buffer()

Область применения: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

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

Синтаксис

geo_polygon_buffer(Допустимое значение радиуса, многоугольника, )

Дополнительные сведения о соглашениях синтаксиса.

Параметры

Имя (название) Type Обязательно Описание
многоугольник dynamic ✔️ Многоугольник или многополигон в формате GeoJSON.
радиус real ✔️ Радиус буфера в метрах. Допустимое значение должно быть положительным.
tolerance real Определяет допустимое значение в метрах, определяющее, сколько многоугольник может отклоняться от идеального радиуса. Если не задано, по умолчанию используется значение 10. Допустимость не должна превышать 0,0001% радиуса. Указание допустимости больше радиуса снижает допустимое значение до наибольшего возможного значения ниже радиуса.

Возвраты

Многоугольник или MultiPolygon вокруг входного Многоугольника или многополигона. Если координаты или радиус или допустимость недопустимы, запрос создаст результат NULL.

Примечание.

  • Геопространственные координаты интерпретируются как представленные эталонной системой координат WGS-84 .
  • Геопоток, используемый для измерений на Земле, является сферой. Границы многоугольников — геодесик на сфере.
  • Если ребра входных многоугольников являются прямыми декартовыми линиями, рассмотрите возможность использования geo_polygon_densify() для преобразования плановых ребер в геодесик.

Определение и ограничения многоугольника

dynamic({"type": "Polygon","координаты": [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N]})

dynamic({"type": "MultiPolygon","координаты": [[LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]})

  • LinearRingShell является обязательным и определен как упорядоченный counterclockwise массив координат [[lng_1,lat_1], ..., [lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]. Может быть только одна оболочка.
  • LinearRingHole является необязательным и определяется как упорядоченный clockwise массив координат [[lng_1,lat_1], ...,[lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]. Может быть любое количество внутренних колец и отверстий.
  • Вершины LinearRing должны отличаться по крайней мере тремя координатами. Первая координата должна быть равна последней. Требуются по крайней мере четыре записи.
  • Координаты [долгота, широта] должны быть допустимыми. Долгота должна быть реальным числом в диапазоне [-180, +180], а широта должна быть реальным числом в диапазоне [-90, +90].
  • LinearRingShell заключает в себя не более половины сферы. LinearRing делит сферу на два региона. Будет выбрано меньшее из двух регионов.
  • Длина края линейного ринга должна быть меньше 180 градусов. Будет выбран самый короткий край между двумя вершинами.
  • Линейные ринги не должны пересекать границы и не должны совместно использовать края. LinearRings может совместно использовать вершины.
  • Многоугольник содержит вершины.

Примеры

Следующий запрос вычисляет многоугольник вокруг входного многоугольника с радиусом 10 км.

let polygon = dynamic({"type":"Polygon","coordinates":[[[139.813757,35.719666],[139.72558,35.71813],[139.727471,35.653231],[139.818721,35.657264],[139.813757,35.719666]]]});
print buffer = geo_polygon_buffer(polygon, 10000)
buffer
{"type": "Polygon", "координаты": [ ... ]}

Следующий запрос вычисляет буфер вокруг каждого многоугольника и унифицирует результат

datatable(polygon:dynamic, radius:real )
[
    dynamic({"type":"Polygon","coordinates":[[[12.451218693639277,41.906457003556625],[12.445753852969375,41.90160968881543],[12.453514425793855,41.90361551885886],[12.451218693639277,41.906457003556625]]]}), 100,
    dynamic({"type":"Polygon","coordinates":[[[12.4566086734784,41.905119850039995],[12.453913683559591,41.903652663265234],[12.455485761012113,41.90146110630562],[12.4566086734784,41.905119850039995]]]}), 20
]
| project buffer = geo_polygon_buffer(polygon, radius)
| summarize polygons = make_list(buffer)
| project result = geo_union_polygons_array(polygons)
result
{"type": "Polygon", "координаты": [ ... ]}

В следующем примере возвращается значение true из-за недопустимого многоугольника.

print buffer = isnull(geo_polygon_buffer(dynamic({"type":"p"}), 1))
buffer
Истина

В следующем примере возвращается значение true из-за недопустимого радиуса.

print buffer = isnull(geo_polygon_buffer(dynamic({"type":"Polygon","coordinates":[[[10,10],[0,10],[0,0],[10,10]]]}), 0))
buffer
Истина