geo_intersection_line_with_polygon()
Berechnet die Schnittmenge einer Linie oder einer mehrzeiligen Linie mit einem Polygon oder einem Multipolygon.
Syntax
geo_intersection_line_with_polygon(
Linestring,
Polygon)
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Typ | Erforderlich | BESCHREIBUNG |
---|---|---|---|
Linestring | dynamic |
✔️ | Ein LineString- oder MultiLineString-Objekt im GeoJSON-Format. |
Polygon | dynamic |
✔️ | Ein Polygon oder MultiPolygon im GeoJSON-Format. |
Gibt zurück
Schnittmenge im GeoJSON-Format und eines dynamischen Datentyps. Wenn lineString oder ein multiLineString, ein Polygon oder ein Multipolygon ungültig sind, erzeugt die Abfrage ein NULL-Ergebnis.
Hinweis
- Die georäumlichen Koordinaten werden so interpretiert, wie sie durch das Koordinatenreferenzsystem WGS-84 dargestellt werden.
- Das geodätische Datum, das zum Messen der Entfernung auf der Erde verwendet wird, ist eine Kugel. Linienränder sind Geodätik auf der Kugel.
- Wenn Eingabezeilen oder Polygonkanten gerade kartesische Linien sind, sollten Sie geo_line_densify() oder einen geo_polygon_densify() verwenden, um planare Kanten in Geodätik zu konvertieren.
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, wenn der 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. Die kürzeste Kante 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 definiert 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]]definiert. 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 gleich der letzten 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 unterteilt die Kugel in zwei Regionen. Die kleinere der beiden Regionen wird ausgewählt.
- Die LinearRing-Kantenlänge muss kleiner als 180 Grad sein. Die kürzeste Kante zwischen den beiden Scheitelpunkten wird ausgewählt.
- LinearRinge dürfen sich nicht kreuzen und dürfen keine Kanten gemeinsam nutzen. LinearRings kann Scheitelpunkte gemeinsam haben.
- Polygon enthält seine Scheitelpunkte.
Tipp
Verwenden Sie literale LineString oder MultiLineString für eine bessere Leistung.
Beispiele
Im folgenden Beispiel wird die Schnittmenge zwischen Linie und Polygon berechnet. In diesem Fall ist das Ergebnis eine Zeile.
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)
Ausgabe
Schnittmenge |
---|
{"type": "LineString","coordinates": [[-73.9756111956578192,40.78060906714618],[-73.974552,40.779761]]} |
Im folgenden Beispiel wird die Schnittmenge zwischen Linie und Polygon berechnet. In diesem Fall ist das Ergebnis ein mehrlinieniges Ergebnis.
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)
Ausgabe
Schnittmenge |
---|
{"type": "MultiLineString","coordinates": [[[ -106.8935365581905, 39.769226209776306],[ -101.74448553679453, 40.373506008712525]],[[[-99.136499431328858, 40.589336512699994],[-95.284527737311791, 40.799060242246348]]]} |
Die folgende Zeile und das Polygon überschneiden sich nicht.
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)
Ausgabe
Schnittmenge |
---|
{"type": "GeometryCollection","geometries": []} |
Im folgenden Beispiel werden alle Straßen in der NYC GeoJSON-Straßentabelle ermittelt, die sich mit dem Literalpolygon "Area of Interest" überschneiden.
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
Ausgabe
name | Schnittmenge |
---|---|
CentralParkW | {"type":"MultiLineString","coordinates":[[[-73.958295846833,40.800316027289647],[-73.958272724,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.800476476316327],[-173.9578627,40.80048670000000008]],[[-73.9585282,40.8006155],[[-73.9585282,40,8006155 -73.958565492035873,40.800631133466972]],[[-73.958416200000016,40.8007325],[-73.958446850928084,40.8007457466617]}} |
WestDr | {"type":"LineString","coordinates":[[-73.9580543,40.8003616],[-73.958009693938735,40.800250494588468]]} |
Im folgenden Beispiel werden alle Counties in den USA gefunden, die sich mit dem Bereich des Interessenliterals 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
| project name, intersection = geo_intersection_line_with_polygon(area_of_interest, county)
| where array_length(intersection.geometries) != 0
Ausgabe
name | Schnittmenge |
---|---|
New York | {"type": "LineString","coordinates": [[-73.97159099578854, 40.79451338780895], [-73.9673852920532053223, 40.792758888618756],[-73.969788551330566, 40.789769718601512]]} |
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 is_invalid = isnull(geo_intersection_2lines(lineString, polygon))
Ausgabe
is_invalid |
---|
1 |
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 is_invalid = isnull(geo_intersection_2lines(lineString, polygon))
Ausgabe
is_invalid |
---|
1 |
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für