Partager via


geo_polygon_buffer()

S’applique à : ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft 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

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