Share via


geo_line_densify()

Convierte líneas planas o bordes multilínea en geodesics agregando puntos intermedios.

Syntax

geo_line_densify(Linestring,Tolerancia, [ preserve_crossing ])

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

Parámetros

Nombre Tipo Requerido Descripción
Linestring dynamic ✔️ LineString o MultiLineString en el 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.

Devoluciones

Línea densificada en el formato GeoJSON y de un tipo de datos dinámico . Si la línea o la tolerancia no son válidas, la consulta generará un resultado nulo.

Nota

Las coordenadas geoespaciales se interpretan como representadas por el sistema de referencia de coordenadas WGS-84 .

Definición de LineString

dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})

dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})

  • La matriz de coordenadas LineString debe contener al menos dos 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].
  • 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 de la línea densificada está limitado a 10485760.
  • El almacenamiento de líneas en formato dinámico tiene límites de tamaño.

Motivación

  • El formato GeoJSON define un borde entre dos puntos como una línea cartesiana recta mientras geo_line_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.

Ejemplos

En el ejemplo siguiente se densifica una carretera en la isla de Manhattan. El borde es corto y la distancia entre el borde planar y su homólogo geodesico es menor que la distancia especificada por tolerancia. Por lo tanto, el resultado permanece sin cambios.

print densified_line = tostring(geo_line_densify(dynamic({"type":"LineString","coordinates":[[-73.949247, 40.796860],[-73.973017, 40.764323]]})))

Salida

densified_line
{"type":"LineString","coordinates":[[-73.949247, 40.796860], [-73.973017, 40.764323]]}

En el ejemplo siguiente se densifica un borde de aproximadamente 130 km de longitud

print densified_line = tostring(geo_line_densify(dynamic({"type":"LineString","coordinates":[[50, 50], [51, 51]]})))

Salida

densified_line
{"type":"LineString","coordinates":[[50,50],[50.125,50.125],[50.25,50.25],[50.375,50.375],[[50.375],[[50.5,50.5],[50.625,50.625],[50.75,50.75],[50.875,50.875],[51,51]]}

En el ejemplo siguiente se devuelve un resultado nulo debido a la entrada de coordenadas no válida.

print densified_line = geo_line_densify(dynamic({"type":"LineString","coordinates":[[300,1],[1,1]]}))

Salida

densified_line

En el ejemplo siguiente se devuelve un resultado nulo debido a la entrada de tolerancia no válida.

print densified_line = geo_line_densify(dynamic({"type":"LineString","coordinates":[[1,1],[2,2]]}), 0)

Salida

densified_line