Share via


geo_polygon_buffer()

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

Sintassi

geo_polygon_buffer(Poligono,Raggio,Tolleranza)

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Tipo Obbligatoria Descrizione
Poligono dynamic ✔️ Poligono o multipolygon nel formato GeoJSON.
Raggio real ✔️ Raggio del buffer in metri. Il valore valido deve essere positivo.
tolerance real Definisce la tolleranza nei 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 al 0,0001% del raggio. Se si specifica la tolleranza maggiore del raggio, la tolleranza sarà inferiore al valore più grande possibile al di sotto del raggio.

Restituisce

Poligono o MultiPolygon intorno all'input Polygon o multipolygon. Se le coordinate o il raggio o la tolleranza non sono valide, la query produrrà un risultato Null.

Nota

  • Le coordinate geospaziali vengono interpretate come rappresentate dal sistema di riferimento di coordinate WGS-84 .
  • La datum geodetica usata per le misurazioni sulla Terra è una sfera. I bordi poligono sono geodesici sulla sfera.
  • Se i bordi poligono di input sono linee cartesiane dritte, prendere in considerazione l'uso di geo_polygon_densify() per convertire i bordi planari in geodesici.

Definizione e vincoli poligono

dynamic({"type": "Polygon","coordinates": [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N]})

dynamic({"type": "MultiPolygon","coordinates": [[LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})

  • LinearRingShell è obbligatorio e definito come matrice counterclockwise ordinata di coordinate [[lng_1,lat_1], ..., [lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. Può essere presente una sola shell.
  • LinearRingHole è facoltativo e definito come matrice clockwise ordinata di coordinate [[lng_1,lat_1], ...,[lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. Può essere presente un numero qualsiasi di anelli e fori interni.
  • I vertici LinearRing devono essere distinti con almeno tre coordinate. La prima coordinata deve essere uguale all'ultima. Sono necessarie almeno quattro voci.
  • Le coordinate [longitudine, latitudine] devono essere valide. La longitudine deve essere un numero reale nell'intervallo [-180, +180] e latitudine deve essere un numero reale nell'intervallo [-90, +90].
  • LinearRingShell racchiude la metà della sfera. LinearRing divide la sfera in due aree. Verranno scelte le due regioni più piccole.
  • La lunghezza del bordo LinearRing deve essere inferiore a 180 gradi. Il bordo più corto tra i due vertici verrà scelto.
  • LinearRings non deve attraversare e non condividere i bordi. LinearRings può condividere vertici.
  • Poligono contiene i vertici.

Esempio

La query seguente calcola il poligono intorno al poligono di input, con raggio di 10 km.

let polygon = dynamic({"type":"Polygon","coordinates":[[[139.813757,35.719666],[139.72558,35.71813],[139.727471,35.653231],[139.818721,35.657264],[139.813757,35.719666]]]});
print buffer = geo_polygon_buffer(polygon, 10000)
buffer
{"type": "Polygon","coordinates": [ ... ]}

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

datatable(polygon:dynamic, radius:real )
[
    dynamic({"type":"Polygon","coordinates":[[[12.451218693639277,41.906457003556625],[12.445753852969375,41.90160968881543],[12.453514425793855,41.90361551885886],[12.451218693639277,41.906457003556625]]]}), 100,
    dynamic({"type":"Polygon","coordinates":[[[12.4566086734784,41.905119850039995],[12.453913683559591,41.903652663265234],[12.455485761012113,41.90146110630562],[12.4566086734784,41.905119850039995]]]}), 20
]
| project buffer = geo_polygon_buffer(polygon, radius)
| summarize polygons = make_list(buffer)
| project result = geo_union_polygons_array(polygons)
result
{"type": "Polygon","coordinates": [ ... ]}

L'esempio seguente restituirà true, a causa di poligoni non validi.

print buffer = isnull(geo_polygon_buffer(dynamic({"type":"p"}), 1))
buffer
Vero

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

print buffer = isnull(geo_polygon_buffer(dynamic({"type":"Polygon","coordinates":[[[10,10],[0,10],[0,0],[10,10]]]}), 0))
buffer
True