geo_polygon_densify()
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Convierte los bordes planos de polígono o multipolígono en líneas geodésicas agregando puntos intermedios.
Sintaxis
geo_polygon_densify(
tolerancia a polígonos,
[ preserve_crossing ],
)
Obtenga más información sobre las convenciones de sintaxis.
Parámetros
Nombre | Type | Obligatorio | Descripción |
---|---|---|---|
polígono | dynamic |
✔️ | Polígono o multipolygon en formato GeoJSON. |
tolerance | int, long o real | Define la distancia máxima en metros entre el borde plano original y la cadena de borde geodesic convertida. Los valores admitidos están en el intervalo [0.1, 10000]. Si no se especifica, se usa el valor predeterminado 10 . |
|
preserve_crossing | bool |
Si true es , conserva el cruce de bordes sobre untimeridiano. Si no se especifica, se usa el valor predeterminado false . |
Definición de polígono
dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})
dynamic({"type": "MultiPolygon","coordinates": [[ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})
LinearRingShell
se requiere y se define como unacounterclockwise
matriz ordenada de coordenadas [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Solo puede haber un shell.LinearRingHole
es opcional y se define como unaclockwise
matriz ordenada de coordenadas [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Puede haber cualquier número de anillos interiores y agujeros.LinearRing
Los vértices deben ser distintos con al menos tres coordenadas. La primera coordenada debe ser igual a la última. Se requieren al menos cuatro entradas.- Las coordenadas [longitud, latitud] deben ser válidas. La longitud debe ser un número real en el intervalo [-180, +180] y la latitud debe ser un número real en el intervalo [-90, +90].
LinearRingShell
encierra como máximo la mitad de la esfera. LinearRing divide la esfera en dos regiones. Se elegirá el menor de las dos regiones.LinearRing
La longitud del borde debe ser inferior a 180 grados. Se elegirá el borde más corto entre los dos vértices.
Restricciones
- El número máximo de puntos del polígono densificado se limita a 10485760.
- El almacenamiento de polígonos en formato dinámico tiene límites de tamaño.
- Densificar un polígono válido puede invalidar el polígono. El algoritmo agrega puntos de forma no uniforme y, como tal, puede hacer que los bordes se entrelazan entre sí.
Motivación
- El formato GeoJSON define un borde entre dos puntos como una línea cartesiana recta mientras
geo_polygon_densify()
usa geodesic. - La decisión de usar bordes geodesic o planar puede depender del conjunto de datos y es especialmente relevante en bordes largos.
Devoluciones
Polígono densificado en formato GeoJSON y de un tipo de datos dinámico . Si el polígono o la tolerancia no son válidos, la consulta genera un resultado NULO.
Nota:
Las coordenadas geoespaciales se interpretan como representadas por el sistema de referencia de coordenadas WGS-84 .
Ejemplos
En el ejemplo siguiente se densifica el polígono de Manhattan Central Park. Los bordes son cortos y la distancia entre los bordes planares y sus homólogos geodesicos es menor que la distancia especificada por tolerancia. Por lo tanto, el resultado permanece sin cambios.
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]]]})))
Salida
densified_polygon |
---|
{"type":"Polygon","coordinates":[[[-73.958244,40.800719],[-73.949146,40.79695],[-73.973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]} |
En el ejemplo siguiente se densifican dos bordes del polígono. La longitud de bordes densificados es de aproximadamente 110 km
print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]})))
Salida
densified_polygon |
---|
{"type":"Polygon","coordinates":[[[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]]]} |
En el ejemplo siguiente se devuelve un resultado NULO debido a la entrada de coordenadas no válida.
print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,900],[11,10],[11,11],[10,11],[10,10]]]}))
Salida
densified_polygon |
---|
En el ejemplo siguiente se devuelve un resultado NULO debido a la entrada de tolerancia no válida.
print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]}), 0)
Salida
densified_polygon |
---|