Partager via


geo_intersects_2polygons()

Calcule si deux polygones ou multipolygons se croisent.

Syntax

geo_intersects_2polygons(polygon1,polygon1)

Découvrez les conventions de syntaxe.

Paramètres

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

Retours

Indique si deux polygones ou multipolygons se croisent. Si le polygone ou le multipolygon ne sont pas valides, la requête produit un résultat null.

Notes

  • 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 des géodésiques sur la sphère.
  • Si les bords de polygones d’entrée sont des lignes cartésiennes droites, envisagez d’utiliser geo_polygon_densify() pour convertir des arêtes planaires en géodésiques.

Définition de polygone et contraintes

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 requis 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 à la dernière. 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 plus 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 se croiser et ne doit pas partager d’arêtes. LinearRings peut partager des sommets.
  • Polygon contient ses sommets.

Conseil

Utilisez linestring littéral ou MultiLineString pour de meilleures performances.

Exemples

L’exemple suivant vérifie si deux polygones littérals se croisent.

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 geo_intersects_2polygons(polygon1, polygon2)

Sortie

print_0
True

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

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
| where geo_intersects_2polygons(county, area_of_interest)
| project name

Sortie

name
New York

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_intersects_2polygons(invalid_polygon, central_park_polygon))

Sortie

print_0
True