Partager via


geo_intersection_line_with_polygon()

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

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