Condividi tramite


geo_polygon_buffer()

Si applica a: ✅Microsoft Fabric✅Azure Esplora dati Azure MonitorMicrosoft Sentinel

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

Sintassi

geo_polygon_buffer(Tolleranza del raggio, poligono, )

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Digita Obbligatorio 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 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 verrà ridotta al di sotto del raggio.

Valori restituiti

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

Nota

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]]. Ci può essere un numero qualsiasi di anelli interni e fori.
  • 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 al massimo la metà della sfera. LinearRing divide la sfera in due aree. Verranno scelte le dimensioni più piccole delle due aree.
  • La lunghezza del bordo LinearRing deve essere inferiore a 180 gradi. Verrà scelto il bordo più corto tra i due vertici.
  • LinearRings non deve attraversare e non deve condividere i bordi. LinearRings può condividere vertici.
  • Il poligono contiene i vertici.

Esempi

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 un poligono non valido.

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
Vero