Partager via


geo_polygon_simplify()

Simplifie un polygone ou un multipolygon en remplaçant des chaînes presque droites de bords courts par un seul bord long sur Terre.

Syntaxe

geo_polygon_simplify(Tolérance de polygone, )

En savoir plus sur les conventions de syntaxe.

Paramètres

Nom Type Requise Description
polygone dynamic ✔️ Polygone ou multipolygon au format GeoJSON.
tolerance int, long ou réel Définit la distance maximale en mètres entre le bord planaire d’origine et la chaîne de bord géodesique convertie. Les valeurs prises en charge se trouvent dans la plage [0.1, 10000]. Si la valeur n’est pas spécifiée, la valeur par défaut est 10.

Retours

Polygone simplifié ou multipolygon au format GeoJSON et d’un type de données dynamique , sans deux sommets avec une distance inférieure à la tolérance. Si le polygone ou la tolérance n’est pas valide, la requête produit un résultat null.

Remarque

  • Si l’entrée comporte plusieurs polygones, avec des bordures mutuelles, consultez geo_simplify_polygons_array().
  • Les coordonnées géospatiales sont interprétées comme représentées par le système de référence de coordonnées WGS-84 .
  • La référence géodésique utilisée pour les mesures sur Terre est une sphère. Les bords de polygones sont géodésiques sur la sphère.
  • Si les bords des polygones d’entrée sont des lignes cartestériennes droites, envisagez d’utiliser geo_polygon_densify() pour convertir des bords planaires en géodésiques.
  • Si l’entrée est un multipolygon et contient plusieurs polygones, le résultat est la zone d’union des polygones.
  • Une tolérance élevée peut entraîner la disparition de petits polygones.

Définition et contraintes de polygones

dynamic({"type » : « Polygon »,"coordinates » : [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})

dynamic({"type » : « MultiPolygon »,"coordinates » : [[ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]})

  • LinearRingShell est obligatoire et défini comme un counterclockwise tableau ordonné de coordonnées [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Il ne peut y avoir qu’un seul interpréteur de commandes.
  • LinearRingHole est facultatif et défini comme un clockwise tableau ordonné de coordonnées [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Il peut y avoir n’importe quel nombre d’anneaux intérieurs et de trous.
  • Les sommets LinearRing doivent être distincts avec au moins trois coordonnées. La première coordonnée doit être égale au dernier. Au moins quatre entrées sont requises.
  • Les coordonnées [longitude, latitude] doivent être valides. La longitude doit être un nombre réel dans la plage [-180, +180] et la latitude doit être un nombre réel dans la plage [-90, +90].
  • LinearRingShell entoure au maximum la moitié de la sphère. LinearRing divise la sphère en deux régions. La plus petite des deux régions sera choisie.
  • La longueur du bord LinearRing doit être inférieure à 180 degrés. Le bord le plus court entre les deux sommets sera choisi.
  • LinearRings ne doit pas traverser et ne doit pas partager de bords. LinearRings peut partager des sommets.

Exemples

L’exemple suivant simplifie les polygones en supprimant les sommets situés à une distance de 10 mètres les uns des autres.

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)

Sortie

simplified
{"type » : « Polygon », « coordinates » : [[-73.948851227760315, 40.79673476356572],[-73.949063122272477, 40.797107362717881],[-73.949236124753952, 40.7968708081794],[-73.948851227760315, 40.79673476356572]]]}

L’exemple suivant simplifie les polygones et combine les résultats dans la collection 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"))

Sortie

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

L’exemple suivant simplifie les polygones et unifie le résultat

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)

Sortie

Polygones
{"type » : « MultiPolygon », « coordinates » : [ ... ]}

L’exemple suivant retourne True en raison du polygone non valide.

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

Sortie

is_invalid_polygon
1

L’exemple suivant retourne True en raison de la tolérance non valide.

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))

Sortie

is_invalid_polygon
1

L’exemple suivant retourne True, car la tolérance élevée entraîne la disparition du polygone.

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))

Sortie

is_invalid_polygon
1