Partager via


geo_intersection_2polygons()

S’applique à : ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Calcule l’intersection de deux polygones ou multipolygons.

Syntaxe

geo_intersection_2polygons(polygon1 polygon1,)

En savoir plus sur les conventions de syntaxe.

Paramètres

Nom Type Requise Description
polygon1 dynamic ✔️ Polygone ou multipolygon au format GeoJSON.
polygon2 dynamic ✔️ Polygone ou multipolygon au format GeoJSON.

Retours

Intersection au format GeoJSON et d’un type de données dynamique . Si polygone ou multipolygon n’est pas valide, 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.

Conseil

  • L’utilisation d’un polygone littéral ou d’un multipolygon peut entraîner de meilleures performances.

Exemples

L’exemple suivant calcule l’intersection entre deux polygones. Dans ce cas, le résultat est un polygone.

let polygon1 = dynamic({"type":"Polygon","coordinates":[[[-73.9630937576294,40.77498840732385],[-73.963565826416,40.774383111780914],[-73.96205306053162,40.773745311181585],[-73.96160781383514,40.7743912365898],[-73.9630937576294,40.77498840732385]]]});
let polygon2 = dynamic({"type":"Polygon","coordinates":[[[-73.96213352680206,40.775045280447145],[-73.9631313085556,40.774578106920345],[-73.96207988262177,40.77416780398293],[-73.96213352680206,40.775045280447145]]]});
print intersection = geo_intersection_2polygons(polygon1, polygon2)

Sortie

intersection
{"type": "Polygon", "coordinates": [[[-73.962105776437156,40.774591360999679],[-73.962642403166868,40.774807020251778],[-73.9631313085556,40.774578106920352],[-73.962079882621765,40.774167803982927],[-73.962105776437156,40.774591360999679]]]}

L’exemple suivant calcule l’intersection entre deux polygones. Dans ce cas, le résultat est un point.

let polygon1 = dynamic({"type":"Polygon","coordinates":[[[2,45],[0,45],[1,44],[2,45]]]});
let polygon2 = dynamic({"type":"Polygon","coordinates":[[[3,44],[2,45],[2,43],[3,44]]]});
print intersection = geo_intersection_2polygons(polygon1, polygon2)

Sortie

intersection
{"type » : « Point »,"coordonnées » : [2,45]}

L’intersection de deux polygones suivante est une collection.

let polygon1 = dynamic({"type":"Polygon","coordinates":[[[2,45],[0,45],[1,44],[2,45]]]});
let polygon2 = dynamic({"type":"MultiPolygon","coordinates":[[[[3,44],[2,45],[2,43],[3,44]]],[[[1.192,45.265],[1.005,44.943],[1.356,44.937],[1.192,45.265]]]]});
print intersection = geo_intersection_2polygons(polygon1, polygon2)

Sortie

intersection
{"type » : « GeometryCollection »,"geometries » : [
{ « type » : « Point », « coordonnées » : [2, 45]},
{ « type » : « Polygon », « coordonnées » : [[[1.3227075526410679,45.003909145068739],[1.0404565374899824,45.004356403066552],[1.005,44.943],[1.356,44.937],[1.322707526410679,45.003909145068739]]}]}

Les deux polygones suivants ne se croisent pas.

let polygon1 = dynamic({"type":"Polygon","coordinates":[[[2,45],[0,45],[1,44],[2,45]]]});
let polygon2 = dynamic({"type":"Polygon","coordinates":[[[3,44],[3,45],[2,43],[3,44]]]});
print intersection = geo_intersection_2polygons(polygon1, polygon2)

Sortie

intersection
{"type » : « GeometryCollection », « geometries » : []}

L’exemple suivant recherche tous les comtés des États-Unis qui se croisent avec une zone d’intérêt polygone.

let area_of_interest = dynamic({"type":"Polygon","coordinates":[[[-73.96213352680206,40.775045280447145],[-73.9631313085556,40.774578106920345],[-73.96207988262177,40.77416780398293],[-73.96213352680206,40.775045280447145]]]});
US_Counties
| project name = features.properties.NAME, county = features.geometry
| project name, intersection = geo_intersection_2polygons(county, area_of_interest)
| where array_length(intersection.geometries) != 0

Sortie

name intersection
New York {"type » : « Polygon »,"coordinates » : [[-73.96213352680206, 40.775045280447145], [-73.9631313085556, 40.774578106920345], [-73.9620798262177,40.77416780398293],[-73.96213352680206, 40.775045280447145]]]}

L’exemple suivant retourne un résultat Null, car l’un des polygones n’est pas valide.

let central_park_polygon = dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807266235352,40.80068603561921],[-73.98201942443848,40.76825672305777],[-73.97317886352539,40.76455136505513],[-73.9495,40.7969]]]});
let invalid_polygon = dynamic({"type":"Polygon"});
print isnull(geo_intersection_2polygons(invalid_polygon, central_park_polygon))

Sortie

print_0
1