geo_line_densify()

Converte linee planari o bordi multilinea in geodesici aggiungendo punti intermedi.

Sintassi

geo_line_densify(Linestring,Tolleranza, [ preserve_crossing ])

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Tipo Obbligatoria Descrizione
Linestring dynamic ✔️ Valore LineString o MultiLineString nel formato GeoJSON.
tolerance int, long o real Definisce la distanza massima in metri tra il bordo planare originale e la catena perimetrale geodesica convertita. I valori supportati sono compresi nell'intervallo [0,1, 10000]. Se non specificato, viene usato il valore predefinito 10.
preserve_crossing bool Se true, mantiene l'attraversamento dei bordi sull'antimeridiano. Se non specificato, viene usato il valore predefinito false.

Restituisce

Linea densificata nel formato GeoJSON e di un tipo di dati dinamico . Se la riga o la tolleranza non è valida, la query genererà un risultato Null.

Nota

Le coordinate geospaziali vengono interpretate come rappresentate dal sistema di riferimento delle coordinate WGS-84 .

Definizione 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 matrice di coordinate LineString deve contenere almeno due voci.
  • Le coordinate [longitudine, latitudine] devono essere valide. La longitudine deve essere un numero reale nell'intervallo [-180, +180] e la latitudine deve essere un numero reale nell'intervallo [-90, +90].
  • La lunghezza del bordo deve essere inferiore a 180 gradi. Verrà scelto il bordo più corto tra i due vertici.

Vincoli

  • Il numero massimo di punti nella linea densificata è limitato a 10485760.
  • L'archiviazione delle righe in formato dinamico presenta limiti di dimensione.

Motivazione

  • Il formato GeoJSON definisce un bordo tra due punti come linea cartesiana dritta mentre geo_line_densify() usa la geodesica.
  • La decisione di usare bordi geodesici o planari può dipendere dal set di dati ed è particolarmente rilevante nei bordi lunghi.

Esempio

Nell'esempio seguente viene densificata una strada nell'isola di Manhattan. Il bordo è corto e la distanza tra il bordo planare e la controparte geodesica è minore della distanza specificata dalla tolleranza. Di conseguenza, il risultato rimane invariato.

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

Output

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

Nell'esempio seguente viene densificato un bordo di circa 130 km di lunghezza

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

Output

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

Nell'esempio seguente viene restituito un risultato Null a causa dell'input di coordinate non valido.

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

Output

densified_line

Nell'esempio seguente viene restituito un risultato Null a causa dell'input di tolleranza non valido.

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

Output

densified_line