geo_intersection_line_with_polygon()
S’applique à : ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Calcule l’intersection d’une ligne ou d’un multiligne avec un polygone ou un multipolygon.
Syntaxe
geo_intersection_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
Intersection au format GeoJSON et d’un type de données dynamique . 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.
- Polygone contient ses sommets.
Conseil
Utilisez LineString littéral ou MultiLineString pour améliorer les performances.
Exemples
L’exemple suivant calcule l’intersection entre la ligne et le polygone. Dans ce cas, le résultat est une ligne.
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 intersection = geo_intersection_line_with_polygon(lineString, polygon)
Sortie
intersection |
---|
{"type » : « LineString »,"coordinates » : [[-73.975611956578192,40.78060906714618],[-73.97452,40.779761]]]} |
L’exemple suivant calcule l’intersection entre la ligne et le polygone. Dans ce cas, le résultat est un multiligne.
let lineString = dynamic({"type":"LineString","coordinates":[[-110.522, 39.198],[-91.428, 40.880]]});
let polygon = dynamic({"type":"Polygon","coordinates":[[[-90.263,36.738],[-102.041,45.274],[-109.335,36.527],[-90.263,36.738]],[[-100.393,41.705],[-103.139,38.925],[-97.558,39.113],[-100.393,41.705]]]});
print intersection = geo_intersection_line_with_polygon(lineString, polygon)
Sortie
intersection |
---|
{"type » : « MultiLineString »,"coordinates » : [[[ -106.893536555881905, 39.769226209776306],[ -101.74448553679453, 40.3735060008712525]],[-99.136499431328858, 40.589336512699994],[-95.284527737311791, 40.799060242246348]]} |
La ligne et le polygone suivants ne se croisent pas.
let lineString = dynamic({"type":"LineString","coordinates":[[1, 1],[2, 2]]});
let polygon = dynamic({"type":"Polygon","coordinates":[[[-73.9712905883789,40.78580561168767],[-73.98004531860352,40.775276834803655],[-73.97000312805176,40.77852663535664],[-73.9712905883789,40.78580561168767]]]});
print intersection = geo_intersection_line_with_polygon(lineString, polygon)
Sortie
intersection |
---|
{"type » : « GeometryCollection »,"geometries » : []} |
L’exemple suivant recherche toutes les routes de la table de routes NyC GeoJSON qui croise la zone de 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
| project name, intersection = geo_intersection_line_with_polygon(road, area_of_interest)
| where array_length(intersection.geometries) != 0
Sortie
name | intersection |
---|---|
CentralParkW | {"type » :"MultiLineString »,"coordinates » :[[-73.958295846836933,40.800316027289647],[-73.9582724,40.8003415]],[-73.958413422194482,40.80037239620097],[-73.9584093,40.8003797]]]} |
FrederickDouglassCir | {"type":"LineString","coordinates":[[-73.9579272943862,40.800751229494182],[-73.9579019,40.8007238],[-73.9578688,40.8006749],[-73.9578508,40.8006203],[-73.9578459,40.800570199999996],[-73.9578484,40.80053310000001],[-73.9578627,40.800486700000008],[-73.957913,40.800421100000008],[-73.9579668,40.8003923],[-73.9580189,40.80037260000001],[-73.9580543,40.8003616],[-73.9581237,40.8003395],[-73.9581778,40.8003365],[-73.9582724,40.8003415],[- 73.958308,40.8003466],[-73.9583328,40.8003517],[-73.9583757,40.8003645],[-73.9584093,40.8003797],[-73.9584535,40.80041099999999],[-73.9584818,40.8004536],[-73.958507000000012,40.8004955],[-73.9585217,40.800562400000004],[-73.9585282,40.8006155],[-73.958416200000016,40.8007325],[-73.9583541,40.8007785],[-73.9582772,40.800811499999995],[-73.9582151,40.8008285],[-73.958145918999392,40.800839887820239]]} |
W110thSt | {"type » :"MultiLineString »,"coordinates » :[[-73.957828446036331,40.800476476476316327],[-273.9578627,40.80048670000008]],[-73.9585282,40.8006155],[[-73.958565492035873,40.800631133466972]],[-73.95841620000000 16,40.8007325],[-73.958446850928084,40.800744577466617]]]} |
WestDr | {"type » :"LineString »,"coordinates » :[-73.9580543,40.8003616],[-73.958009693938735,40.800250494558468]]} |
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
| project name, intersection = geo_intersection_line_with_polygon(area_of_interest, county)
| where array_length(intersection.geometries) != 0
Sortie
name | intersection |
---|---|
New York | {"type » : « LineString »,"coordinates » : [[-73.97159099578578574, 40.79451338780895], [-73.96738529205323, 40.792758888618756],[-73.9697855130566, 40.789769769718601512]]]} |
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 is_invalid = isnull(geo_intersection_2lines(lineString, polygon))
Sortie
is_invalid |
---|
1 |
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 is_invalid = isnull(geo_intersection_2lines(lineString, polygon))
Sortie
is_invalid |
---|
1 |