geo_intersects_line_with_polygon()
S’applique à : ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Calcule si une ligne ou un multiligne croise avec un polygone ou un multipolygon.
Syntaxe
geo_intersects_line_with_polygon(
polygone lineString,
)
En savoir plus sur les conventions de syntaxe.
Paramètres
Nom | Type | Requise | Description |
---|---|---|---|
lineString | dynamic |
✔️ | LineString ou MultiLineString au format GeoJSON. |
polygone | dynamic |
✔️ | Polygone ou MultiPolygon au format GeoJSON. |
Retours
Indique si la ligne ou le multiligne se croise avec un polygone ou un multipolygon. Si lineString ou multiLineString ou un polygone ou un multipolygon 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 mesurer la distance sur terre est une sphère. Les bords de ligne sont géodésiques sur la sphère.
- Si les bords d’entrée ou de polygone sont des lignes cartestérisiennes droites, envisagez d’utiliser geo_line_densify() ou un geo_polygon_densify() afin de convertir les bords planaires en géodésiques.
Définition et contraintes LineString
dynamic({"type » : « LineString »,"coordinates » : [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]})
dynamic({"type » : « MultiLineString »,"coordinates » : [[line_1, line_2, ..., line_N]})
- Le tableau de coordonnées LineString doit contenir au moins deux entrées.
- Les coordonnées [longitude, latitude] doivent être valides, où la longitude est un nombre réel dans la plage [-180, +180] et la latitude est un nombre réel dans la plage [-90, +90].
- La longueur du bord doit être inférieure à 180 degrés. Le bord le plus court entre les deux sommets sera choisi.
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.
- Polygon ne contient pas nécessairement ses sommets.
Conseil
Utilisez LineString littéral ou MultiLineString pour améliorer les performances.
Exemples
L’exemple suivant vérifie si un LineString littéral se croise avec un polygone.
let lineString = dynamic({"type":"LineString","coordinates":[[-73.985195,40.788275],[-73.974552,40.779761]]});
let polygon = dynamic({"type":"Polygon","coordinates":[[[-73.9712905883789,40.78580561168767],[-73.98004531860352,40.775276834803655],[-73.97000312805176,40.77852663535664],[-73.9712905883789,40.78580561168767]]]});
print intersects = geo_intersects_line_with_polygon(lineString, polygon)
Sortie
Croise |
---|
True |
L’exemple suivant recherche toutes les routes de la table de routes NyC GeoJSON qui se croisent avec un polygone littéral d’intérêt.
let area_of_interest = dynamic({"type":"Polygon","coordinates":[[[-73.95768642425537,40.80065354924362],[-73.9582872390747,40.80089719667298],[-73.95869493484497,40.80050736035672],[-73.9580512046814,40.80019873831593],[-73.95768642425537,40.80065354924362]]]});
NY_Manhattan_Roads
| project name = features.properties.Label, road = features.geometry
| where geo_intersects_line_with_polygon(road, area_of_interest)
| project name
Sortie
name |
---|
Central Park W |
Frederick Douglass Cir |
W 110th St |
Dr Ouest |
L’exemple suivant recherche tous les comtés des États-Unis qui se croisent avec la zone d’intérêt littéral LineString.
let area_of_interest = dynamic({"type":"LineString","coordinates":[[-73.97159099578857,40.794513338780895],[-73.96738529205322,40.792758888618756],[-73.96978855133057,40.789769718601505]]});
US_Counties
| project name = features.properties.NAME, county = features.geometry
| where geo_intersects_line_with_polygon(area_of_interest, county)
| project name
Sortie
name |
---|
New York |
L’exemple suivant retourne un résultat Null, car LineString n’est pas valide.
let lineString = dynamic({"type":"LineString","coordinates":[[-73.985195,40.788275]]});
let polygon = dynamic({"type":"Polygon","coordinates":[[[-73.95768642425537,40.80065354924362],[-73.9582872390747,40.80089719667298],[-73.95869493484497,40.80050736035672],[-73.9580512046814,40.80019873831593],[-73.95768642425537,40.80065354924362]]]});
print isnull(geo_intersects_2lines(lineString, polygon))
Sortie
print_0 |
---|
True |
L’exemple suivant retourne un résultat Null, car le polygone n’est pas valide.
let lineString = dynamic({"type":"LineString","coordinates":[[-73.97159099578857,40.794513338780895],[-73.96738529205322,40.792758888618756],[-73.96978855133057,40.789769718601505]]});
let polygon = dynamic({"type":"Polygon","coordinates":[]});
print isnull(geo_intersects_2lines(lineString, polygon))
Sortie
print_0 |
---|
True |