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