Condividi tramite


geo_polygon_simplify()

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

Semplifica un poligono o un multipolygon sostituendo catene quasi dritte di archi corti con un singolo bordo lungo sulla Terra.

Sintassi

geo_polygon_simplify(Tolleranza poligono, )

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Digita Obbligatorio Descrizione
poligono dynamic ✔️ Poligono o multipolygon 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, il valore predefinito è 10.

Valori restituiti

Poligono semplificato o multipolygon nel formato GeoJSON e di un tipo di dati dinamico , senza due vertici con distanza inferiore alla tolleranza. Se il poligono o la tolleranza non sono validi, la query genererà un risultato Null.

Nota

  • Se l'input ha più di un poligono, con bordi reciproci, vedere geo_simplify_polygons_array().
  • Le coordinate geospaziali vengono interpretate come rappresentate dal sistema di riferimento di coordinate WGS-84 .
  • Il datum geodetico usato per le misurazioni sulla Terra è una sfera. I bordi poligoni sono geodesici sulla sfera.
  • Se i bordi del poligono di input sono linee cartesiane dritte, è consigliabile usare geo_polygon_densify() per convertire i bordi planari in geodesici.
  • Se l'input è un multipolygon e contiene più poligoni, il risultato sarà l'area dell'unione poligoni.
  • La tolleranza elevata può causare la scomparsa di un piccolo poligono.

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.

Esempi

Nell'esempio seguente vengono semplificati i poligoni rimuovendo i vertici che si trovano all'interno di una distanza di 10 metri l'una dall'altra.

let polygon = dynamic({"type":"Polygon","coordinates":[[[-73.94885122776031,40.79673476355657],[-73.94885927438736,40.79692258628347],[-73.94887939095497,40.79692055577034],[-73.9488673210144,40.79693476936093],[-73.94888743758202,40.79693476936093],[-73.9488834142685,40.796959135509105],[-73.94890084862709,40.79695304397289],[-73.94906312227248,40.79710736271788],[-73.94923612475395,40.7968708081794],[-73.94885122776031,40.79673476355657]]]});
print simplified = geo_polygon_simplify(polygon)

Output

simplified
{"type": "Polygon", "coordinate": [[-73.948851227760315, 40.796734763556572],[-73.949063122272477, 40.797107362717881],[-73.949236124753952, 40.7968708081794],[-73.948851227760315, 40.796734763556572]]]]}

L'esempio seguente semplifica i poligoni e combina i risultati nella raccolta geometry GeoJSON.

Polygons
| project polygon = features.geometry
| project simplified = geo_polygon_simplify(polygon, 1000)
| summarize lst = make_list(simplified)
| project geojson = bag_pack("type", "Feature","geometry", bag_pack("type", "GeometryCollection", "geometries", lst), "properties", bag_pack("name", "polygons"))

Output

geojson
{"type": "Feature", "geometry": {"type": "GeometryCollection", "geometries": [ ... ]}, "properties": {"name": "polygons"}}

L'esempio seguente semplifica i poligoni e unifica il risultato

US_States
| project polygon = features.geometry
| project simplified = geo_polygon_simplify(polygon, 1000)
| summarize lst = make_list(simplified)
| project polygons = geo_union_polygons_array(lst)

Output

Poligoni
{"type": "MultiPolygon", "coordinates": [ ... ]}

Nell'esempio seguente viene restituito True a causa del poligono non valido.

let polygon = dynamic({"type":"Polygon","coordinates":[[[5,48],[5,48]]]});
print is_invalid_polygon = isnull(geo_polygon_simplify(polygon))

Output

is_invalid_polygon
1

Nell'esempio seguente viene restituito True a causa della tolleranza non valida.

let polygon = dynamic({"type":"Polygon","coordinates":[[[5,48],[0,50],[0,47],[4,47],[5,48]]]});
print is_invalid_polygon = isnull(geo_polygon_simplify(polygon, -0.1))

Output

is_invalid_polygon
1

L'esempio seguente restituisce True perché la tolleranza elevata causa la scomparsa del poligono.

let polygon = dynamic({"type":"Polygon","coordinates":[[[5,48],[0,50],[0,47],[4,47],[5,48]]]});
print is_invalid_polygon = isnull(geo_polygon_simplify(polygon, 1000000))

Output

is_invalid_polygon
1