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


geo_line_buffer()

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

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

Синтаксис

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

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

Параметры

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

Возвраты

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

Примечание.

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

Определение и ограничения LineString

dynamic({"type": "LineString","координаты": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})

dynamic({"type": "MultiLineString","координаты": [[line_1, line_2, ..., line_N]})

  • Массив координат LineString должен содержать не менее двух записей.
  • Координаты [долгота, широта] должны быть допустимыми, где долгота является реальным числом в диапазоне [-180, +180] и широта является реальным числом в диапазоне [-90, +90].
  • Длина края должна быть меньше 180 градусов. Будет выбран самый короткий край между двумя вершинами.

Примеры

Следующий запрос вычисляет многоугольник вокруг линии с радиусом 4 метра и 0,1 допустимости измерения

let line = dynamic({"type":"LineString","coordinates":[[-80.66634997047466,24.894526340592122],[-80.67373241820246,24.890808090321286]]});
print buffer = geo_line_buffer(line, 4, 0.1)
buffer
{"type": "Polygon", "координаты": [ ... ]}

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

datatable(line:dynamic)
[
    dynamic({"type":"LineString","coordinates":[[14.429214068940496,50.10043066548272],[14.431184174126173,50.10046525983731]]}),
    dynamic({"type":"LineString","coordinates":[[14.43030222687753,50.100780677801936],[14.4303847111523,50.10020274910934]]})
]
| project buffer = geo_line_buffer(line, 2, 0.1)
| summarize polygons = make_list(buffer)
| project result = geo_union_polygons_array(polygons)
result
{"type": "Polygon", "координаты": [ ... ]}

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

print buffer = isnull(geo_line_buffer(dynamic({"type":"LineString"}), 5))
buffer
Истина

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

print buffer = isnull(geo_line_buffer(dynamic({"type":"LineString","coordinates":[[0,0],[1,1]]}), 0))
buffer
Истина