geo_polygon_simplify()
Si applica a: ✅Microsoft Fabric✅Azure Esplora dati✅ Azure Monitor✅Microsoft 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 |