geo_polygon_buffer()
S’applique à : ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Calcule le polygone ou le multipolygon qui contient tous les points dans le rayon donné du polygone d’entrée ou multipolygon sur Terre.
Syntaxe
geo_polygon_buffer(
Tolérance de rayon de,
polygone,
)
En savoir plus sur les conventions de syntaxe.
Paramètres
Nom | Type | Requise | Description |
---|---|---|---|
polygone | dynamic |
✔️ | Polygone ou multipolygon au format GeoJSON. |
rayon | real |
✔️ | Rayon de mémoire tampon en mètres. La valeur valide doit être positive. |
tolerance | real |
Définit la tolérance en mètres qui détermine la quantité d’un polygone qui peut s’écarter du rayon idéal. Si la valeur n’est pas spécifiée, la valeur par défaut 10 est utilisée. La tolérance ne doit pas être inférieure à 0,0001 % du rayon. La spécification de la tolérance supérieure au rayon réduit la tolérance à la plus grande valeur possible en dessous du rayon. |
Retours
Polygone ou MultiPolygon autour du polygone d’entrée ou multipolygon. Si les coordonnées ou le rayon ou la tolérance ne sont pas valides, la requête produit un résultat null.
Remarque
- 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.
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.
- Polygone contient ses sommets.
Exemples
La requête suivante calcule le polygone autour du polygone d’entrée, avec un rayon de 10 km.
let polygon = dynamic({"type":"Polygon","coordinates":[[[139.813757,35.719666],[139.72558,35.71813],[139.727471,35.653231],[139.818721,35.657264],[139.813757,35.719666]]]});
print buffer = geo_polygon_buffer(polygon, 10000)
buffer |
---|
{"type » : « Polygon »,"coordinates » : [ ... ]} |
La requête suivante calcule la mémoire tampon autour de chaque polygone et unifie le résultat
datatable(polygon:dynamic, radius:real )
[
dynamic({"type":"Polygon","coordinates":[[[12.451218693639277,41.906457003556625],[12.445753852969375,41.90160968881543],[12.453514425793855,41.90361551885886],[12.451218693639277,41.906457003556625]]]}), 100,
dynamic({"type":"Polygon","coordinates":[[[12.4566086734784,41.905119850039995],[12.453913683559591,41.903652663265234],[12.455485761012113,41.90146110630562],[12.4566086734784,41.905119850039995]]]}), 20
]
| project buffer = geo_polygon_buffer(polygon, radius)
| summarize polygons = make_list(buffer)
| project result = geo_union_polygons_array(polygons)
result |
---|
{"type » : « Polygon »,"coordinates » : [ ... ]} |
L’exemple suivant retourne true, en raison d’un polygone non valide.
print buffer = isnull(geo_polygon_buffer(dynamic({"type":"p"}), 1))
buffer |
---|
True |
L’exemple suivant retourne true, en raison d’un rayon non valide.
print buffer = isnull(geo_polygon_buffer(dynamic({"type":"Polygon","coordinates":[[[10,10],[0,10],[0,0],[10,10]]]}), 0))
buffer |
---|
True |