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