geo_polygon_simplify()
Semplifica un poligono o un multipolygon sostituendo catene quasi dritte di bordi brevi con un singolo bordo lungo sulla Terra.
Sintassi
geo_polygon_simplify(
Poligono,
Tolleranza)
Altre informazioni sulle convenzioni di sintassi.
Parametri
Nome | Tipo | Obbligatoria | Descrizione |
---|---|---|---|
Poligono | dynamic |
✔️ | Poligono o multipolygon nel formato GeoJSON. |
tolerance | int, long o reale | Definisce la distanza massima in metri tra il bordo planare originale e la catena perimetrale geodesica convertita. I valori supportati si trovano nell'intervallo [0.1, 10000]. Se non specificato, il valore predefinito è 10 . |
Restituisce
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 è valido, la query genererà un risultato Null.
Nota
- Se l'input ha più poligoni, con bordi comuni, vedere geo_simplify_polygons_array().
- 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.
- Se l'input è un multipolygon e contiene più poligoni, il risultato sarà l'area dell'unione poligono.
- La tolleranza elevata può causare la scomparsa di un poligono piccolo.
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.
Esempio
L'esempio seguente semplifica i poligoni rimuovendo i vertici che si trovano all'interno di una distanza di 10 metri tra loro.
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
Semplificato |
---|
{"type": "Polygon", "coordinate": [[-73.94885127760315, 40.796734763556572],[-73.9490631222272477, 40.797107362717881],[-73.949236124753952, 40.7968708081794],[-73.94851227760315, 40.796734763556572]} |
L'esempio seguente semplifica i poligoni e combina i risultati nell'insieme 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", "geometrie": [ ... ]}, "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", "coordinate": [ ... ]} |
L'esempio seguente restituisce 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 |
L'esempio seguente restituisce 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 |
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per