Гео_полигон_буфер()

Переключение служб с помощью раскрывающегося списка версий . Дополнительные сведения о навигации.
Область применения: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel

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

Синтаксис

geo_polygon_buffer( Допустимое значение радиуса,,

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

Параметры

Имя (название) Тип Обязательно Описание
многоугольник dynamic ✔️ Многоугольник или многополигон в формате GeoJSON.
радиус real ✔️ Радиус буфера в метрах. Допустимое значение должно быть положительным.
толерантность 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)
буфер
{"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)
результат
{"type": "Polygon", "координаты": [ ... ]}

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

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

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

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