Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Berechnet die Schnittmenge zweier Polygone oder Multipolygons.
Syntax
geo_intersection_2polygons(polygon1 polygon1,)
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
| Name | Type | Erforderlich | Beschreibung |
|---|---|---|---|
| Polygon1 | dynamic |
✔️ | Polygon oder Multipolygon im GeoJSON-Format. |
| Polygon2 | dynamic |
✔️ | Polygon oder Multipolygon im GeoJSON-Format. |
Gibt zurück
Schnittmenge im GeoJSON-Format und eines dynamischen Datentyps. Wenn Polygon oder MultiPolygon ungültig sind, erzeugt die Abfrage ein NULL-Ergebnis.
Hinweis
- Die Geospatialkoordinaten werden durch das WGS-84-Koordinatenverweissystem interpretiert.
- Das geodetische Datum , das für Messungen auf der Erde verwendet wird, ist eine Kugel. Polygonränder sind geodätische Ränder auf der Kugel.
- Wenn eingabe polygonale Kanten gerade kartesische Linien sind, sollten Sie geo_polygon_densify() verwenden, um planare Kanten in Geodästik zu konvertieren.
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 ein
counterclockwisesortiertes 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 definiert als ein
clockwisesortiertes 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 seine Scheitelpunkte.
Tipp
- Die Verwendung von Literal polygon oder multiPolygon kann zu einer besseren Leistung führen.
Beispiele
Im folgenden Beispiel wird die Schnittmenge zwischen zwei Polygonen berechnet. In diesem Fall ist das Ergebnis ein Polygon.
let polygon1 = dynamic({"type":"Polygon","coordinates":[[[-73.9630937576294,40.77498840732385],[-73.963565826416,40.774383111780914],[-73.96205306053162,40.773745311181585],[-73.96160781383514,40.7743912365898],[-73.9630937576294,40.77498840732385]]]});
let polygon2 = dynamic({"type":"Polygon","coordinates":[[[-73.96213352680206,40.775045280447145],[-73.9631313085556,40.774578106920345],[-73.96207988262177,40.77416780398293],[-73.96213352680206,40.775045280447145]]]});
print intersection = geo_intersection_2polygons(polygon1, polygon2)
Output
| intersection |
|---|
| {"type": "Polygon", "coordinates": [[[-73.962105776437156,40.774591360999679],[-73.962642403166868,40.774807020251778],[-73.9631313085556,40.774578106920352],[-73.962079882621765,40.774167803982927],[-73.962105776437156,40.774591360999679]]]} |
Im folgenden Beispiel wird die Schnittmenge zwischen zwei Polygonen berechnet. In diesem Fall ist das Ergebnis ein Punkt.
let polygon1 = dynamic({"type":"Polygon","coordinates":[[[2,45],[0,45],[1,44],[2,45]]]});
let polygon2 = dynamic({"type":"Polygon","coordinates":[[[3,44],[2,45],[2,43],[3,44]]]});
print intersection = geo_intersection_2polygons(polygon1, polygon2)
Output
| intersection |
|---|
| {"type": "Point","coordinates": [2,45]} |
Die folgenden beiden Polygone schnittmenge ist eine Sammlung.
let polygon1 = dynamic({"type":"Polygon","coordinates":[[[2,45],[0,45],[1,44],[2,45]]]});
let polygon2 = dynamic({"type":"MultiPolygon","coordinates":[[[[3,44],[2,45],[2,43],[3,44]]],[[[1.192,45.265],[1.005,44.943],[1.356,44.937],[1.192,45.265]]]]});
print intersection = geo_intersection_2polygons(polygon1, polygon2)
Output
| intersection |
|---|
| {"type": "GeometryCollection","geometries": [ { "type": "Point", "coordinates": [2, 45]}, { "type": "Polygon", "Koordinaten": [[[1.3227075526410679,45.003909145068739],[1.0404565374899824,45.0043564030666552],[1.005,44.943],[1.356,44.937],[1.3227075526410679,45.003909145068739]]]}}} |
Die folgenden beiden Polygone schneiden sich nicht.
let polygon1 = dynamic({"type":"Polygon","coordinates":[[[2,45],[0,45],[1,44],[2,45]]]});
let polygon2 = dynamic({"type":"Polygon","coordinates":[[[3,44],[3,45],[2,43],[3,44]]]});
print intersection = geo_intersection_2polygons(polygon1, polygon2)
Output
| intersection |
|---|
| {"type": "GeometryCollection", "geometries": []} |
Im folgenden Beispiel werden alle Counties in DEN USA gefunden, die sich mit einem interessanten Polygon schneiden.
let area_of_interest = dynamic({"type":"Polygon","coordinates":[[[-73.96213352680206,40.775045280447145],[-73.9631313085556,40.774578106920345],[-73.96207988262177,40.77416780398293],[-73.96213352680206,40.775045280447145]]]});
US_Counties
| project name = features.properties.NAME, county = features.geometry
| project name, intersection = geo_intersection_2polygons(county, area_of_interest)
| where array_length(intersection.geometries) != 0
Output
| name | intersection |
|---|---|
| New York | {"type": "Polygon","coordinates": [[-73.96213352680206, 40.775045280447145], [-73.9631313085556, 40.774578106920345], [-73.96207988262177,40.77416780398293],[-73.96213352680206, 40.77504528047145]]]} |
Im folgenden Beispiel wird ein NULL-Ergebnis zurückgegeben, da eines der Polygone ungültig ist.
let central_park_polygon = dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807266235352,40.80068603561921],[-73.98201942443848,40.76825672305777],[-73.97317886352539,40.76455136505513],[-73.9495,40.7969]]]});
let invalid_polygon = dynamic({"type":"Polygon"});
print isnull(geo_intersection_2polygons(invalid_polygon, central_park_polygon))
Output
| print_0 |
|---|
| 1 |