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


geo_polygon_densify()

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

Преобразует плоские ребра многоугольника или многополигона в геодезические путем добавления промежуточных точек.

Синтаксис

geo_polygon_densify(допустимости многоугольников, [ preserve_crossing ],)

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

Параметры

Имя (название) Type Обязательно Описание
многоугольник dynamic ✔️ Многоугольник или многополигон в формате GeoJSON.
tolerance int, long или real Определяет максимальное расстояние в метрах между исходным планарным краем и преобразованной геодесической граничной цепочкой. Поддерживаемые значения находятся в диапазоне [0.1, 10000]. Если не задано иное, по умолчанию используется значение 10.
preserve_crossing bool Если true, сохраняет пересечение границ по сравнению с таймериданом. Если не задано, по умолчанию используется значение false.

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

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 делит сферу на два региона. Будет выбрано меньшее из двух регионов.
  • LinearRing Длина края должна быть меньше 180 градусов. Будет выбран самый короткий край между двумя вершинами.

Ограничения

  • Максимальное количество точек в очерченном многоугольнике ограничено 10485760.
  • Хранение многоугольников в динамическом формате имеет ограничения размера.
  • Денсифицирование допустимого многоугольника может привести к недопустимости многоугольника. Алгоритм добавляет точки в неоднородном режиме, и, как это может привести к переплетке ребер друг с другом.

Мотивация

  • Формат GeoJSON определяет край между двумя точками как прямую декартовую линию при geo_polygon_densify() использовании геодесикации.
  • Решение об использовании геодесесных или планарных ребер может зависеть от набора данных и особенно актуально в длинных краях.

Возвраты

Очерченный многоугольник в формате GeoJSON и динамический тип данных. Если многоугольник или допустимость недопустимы, запрос создает результат NULL.

Примечание.

Геопространственные координаты интерпретируются как представленные эталонной системой координат WGS-84 .

Примеры

В следующем примере многоугольник манхэттенского центрального парка. Края являются короткими и расстояние между планарными краями и их геодесесными аналогами меньше расстояния, указанного в допустимости. Таким образом, результат остается неизменным.

print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[-73.958244,40.800719],[-73.949146,40.79695],[-73.973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]})))

Выходные данные

densified_polygon
{"type":"Polygon","координаты":[[-73.9582444,40.800719],[-73.949146,40.79695],[-773.00973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]] }

В следующем примере описаны два края многоугольника. Длина граничных краев составляет ~110 км

print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]})))

Выходные данные

densified_polygon
{"type":"Polygon","координаты":[[[10,10],[10.25,10],[10.5,10],[10.75,10],[11,10],[11,11],[10.75,11],[10.5,11],[10.25,11],[10,11],[10,10]]]

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

print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,900],[11,10],[11,11],[10,11],[10,10]]]}))

Выходные данные

densified_polygon

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

print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]}), 0)

Выходные данные

densified_polygon