Freigeben über


geo_intersects_line_with_polygon()

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Berechnet, ob sich eine Linie oder mehrere Linien mit einem Polygon oder einem Multipolygon überschneiden.

Syntax

geo_intersects_line_with_polygon(lineString-Polygon,)

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Type Erforderlich Beschreibung
lineString dynamic ✔️ Eine LineString- oder MultiLineString-Eigenschaft im GeoJSON-Format.
Polygon dynamic ✔️ Ein Polygon oder MultiPolygon im GeoJSON-Format.

Gibt zurück

Gibt an, ob sich die Linie oder mehrere Linien mit Polygon oder multipolygon überschneiden. Wenn lineString oder ein MultiLineString oder ein Polygon oder ein Multipolygon ungültig sind, erzeugt die Abfrage ein NULL-Ergebnis.

Hinweis

LineString-Definition und -Einschränkungen

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]]})

  • LineString-Koordinatenarray muss mindestens zwei Einträge enthalten.
  • Koordinaten [Längengrad, Breitengrad] müssen gültig sein, wobei Längengrad eine reelle Zahl im Bereich [-180, +180] und Breitengrad eine reelle Zahl im Bereich [-90, +90] ist.
  • Die Kantenlänge muss kleiner als 180 Grad sein. Der kürzeste Rand zwischen den beiden Scheitelpunkten wird ausgewählt.

Polygondefinition und Einschränkungen

dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N]})

dynamic({"type": "MultiPolygon","coordinates": [[LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})

  • LinearRingShell ist erforderlich und als counterclockwise geordnetes Array von Koordinaten [[lng_1,lat_1], ...,[lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. Es kann nur eine Shell vorhanden sein.
  • LinearRingHole ist optional und als clockwise geordnetes Array von Koordinaten [[lng_1,lat_1], ...,[lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. Es kann eine beliebige Anzahl von Innenringen und Löchern geben.
  • LinearRing-Scheitelpunkte müssen mit mindestens drei Koordinaten unterschieden werden. Die erste Koordinate muss mit der letzten koordinate gleich sein. Mindestens vier Einträge sind erforderlich.
  • Koordinaten [Längengrad, Breitengrad] müssen gültig sein. Längengrad muss eine reelle Zahl im Bereich [-180, +180] sein, und breitengrad muss eine reelle Zahl im Bereich [-90, +90] sein.
  • LinearRingShell schließt höchstens die Hälfte der Kugel ein. LinearRing teilt die Kugel in zwei Bereiche auf. Die kleineren der beiden Regionen werden ausgewählt.
  • Die Länge des LinearRing-Rands muss kleiner als 180 Grad sein. Der kürzeste Rand zwischen den beiden Scheitelpunkten wird ausgewählt.
  • LinearRinge dürfen nicht kreuzen und dürfen keine Kanten teilen. LinearRinge können Scheitelpunkte teilen.
  • Polygon enthält nicht unbedingt seine Scheitelpunkte.

Tipp

Verwenden Sie Literal LineString oder MultiLineString, um eine bessere Leistung zu erzielen.

Beispiele

Im folgenden Beispiel wird überprüft, ob sich ein Literal LineString mit einem Polygon überschneidet.

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)

Output

Schneidet
True

Im folgenden Beispiel werden alle Straßen im NyC GeoJSON Straßentabelle gefunden, die sich mit einem interessanten Literal-Polygon schneiden.

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

Output

name
Zentraler Park W
Friedrich Douglass Cir
W 110. St.
West Dr.

Im folgenden Beispiel werden alle Counties in den USA gefunden, die sich mit einem Interessanten-Literal LineString überschneiden.

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

Output

name
New York

Im folgenden Beispiel wird ein NULL-Ergebnis zurückgegeben, da die LineString ungültig ist.

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))

Output

print_0
True

Im folgenden Beispiel wird ein NULL-Ergebnis zurückgegeben, da das Polygon ungültig ist.

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))

Output

print_0
True