geo_line_buffer()

Calcola il poligono o il multipolygon che contiene tutti i punti all'interno del raggio specificato della linea di input o della multilinea sulla Terra.

Sintassi

geo_line_buffer(Linestring,Raggio,Tolleranza)

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Tipo Obbligatoria Descrizione
Linestring dynamic ✔️ Valore LineString o MultiLineString nel formato GeoJSON.
Raggio real ✔️ Raggio del buffer in metri. Il valore valido deve essere positivo.
tolerance real Definisce la tolleranza in metri che determina la quantità di poligono che può deviare dal raggio ideale. Se non specificato, viene usato il valore predefinito 10. La tolleranza non deve essere inferiore allo 0,0001% del raggio. Se si specifica la tolleranza maggiore del raggio, la tolleranza viene ridotta al valore più grande possibile al di sotto del raggio.

Restituisce

Poligono o MultiPolygon intorno all'input LineString o MultiLineString. Se le coordinate o il raggio o la tolleranza non sono validi, la query genera un risultato Null.

Nota

  • Le coordinate geospaziali vengono interpretate come rappresentate dal sistema di riferimento delle coordinate WGS-84 .
  • Il datum geodetico usato per misurare la distanza sulla Terra è una sfera.
  • Se i bordi della linea di input sono linee cartesiane dritte, è consigliabile usare geo_line_densify() per convertire i bordi planari in geodesici.
  • Le estremità delle linee sono arrotondate.
  • Entrambi i lati delle linee vengono memorizzati nel buffer.

Definizione e vincoli 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 quando la longitudine è un numero reale nell'intervallo [-180, +180] e la latitudine è un numero reale nell'intervallo [-90, +90].
  • La lunghezza dei bordi deve essere inferiore a 180 gradi. Verrà scelto il bordo più corto tra i due vertici.

Esempio

La query seguente calcola il poligono intorno alla linea, con raggio di 4 metri e tolleranza di 0,1 contatori

let line = dynamic({"type":"LineString","coordinates":[[-80.66634997047466,24.894526340592122],[-80.67373241820246,24.890808090321286]]});
print buffer = geo_line_buffer(line, 4, 0.1)
buffer
{"type": "Polygon", "coordinate": [ ... ]}

La query seguente calcola il buffer intorno a ogni riga e unifica il risultato

datatable(line:dynamic)
[
    dynamic({"type":"LineString","coordinates":[[14.429214068940496,50.10043066548272],[14.431184174126173,50.10046525983731]]}),
    dynamic({"type":"LineString","coordinates":[[14.43030222687753,50.100780677801936],[14.4303847111523,50.10020274910934]]})
]
| project buffer = geo_line_buffer(line, 2, 0.1)
| summarize polygons = make_list(buffer)
| project result = geo_union_polygons_array(polygons)
result
{"type": "Polygon","coordinates": [ ... ]}

Nell'esempio seguente viene restituito true, a causa di una riga non valida.

print buffer = isnull(geo_line_buffer(dynamic({"type":"LineString"}), 5))
buffer
Vero

L'esempio seguente restituirà true, a causa di un raggio non valido.

print buffer = isnull(geo_line_buffer(dynamic({"type":"LineString","coordinates":[[0,0],[1,1]]}), 0))
buffer
True