geo_polygon_simplify()
S’applique à : ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
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 |