Share via


geo_polygon_densify()

Convierte los bordes planos de polígono o multipolígono en geodesics mediante la adición de puntos intermedios.

Syntax

geo_polygon_densify(Polígono,Tolerancia, [ preserve_crossing ])

Obtenga más información sobre las convenciones de sintaxis.

Parámetros

Nombre Tipo Requerido Descripción
Polígono dynamic ✔️ Polígono o multipolígono 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 truees , 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 una counterclockwise 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 una clockwise 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.
  • La densificación de 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 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 los bordes desificados es de ~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