geo_polygon_buffer()
Область применения: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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 |
---|
Истина |