geo_intersection_2polygons()

Berechnet die Schnittmenge von zwei Polygonen oder Multipolygonen.

Syntax

geo_intersection_2polygons(polygon1,polygon1)

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Typ 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 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 für Messungen auf der Erde verwendet wird, ist eine Kugel. Polygonränder sind Geodätik auf der Kugel.
  • Wenn Es sich bei Eingabepolygonkanten um gerade kartesische Linien handelt, sollten Sie geo_polygon_densify() verwenden, um planare Kanten in Geodätik 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 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

  • Die Verwendung eines Literalpolygons oder eines MultiPolygons 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)

Ausgabe

Schnittmenge
{"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)

Ausgabe

Schnittmenge
{"type": "Point","coordinates": [2,45]}

Die folgende Überschneidung der beiden Polygone ist eine Auflistung.

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)

Ausgabe

Schnittmenge
{"type": "GeometryCollection","geometries": [
{ "type": "Point", "coordinates": [2, 45]},
{ "type": "Polygon", "koordinaten": [[[1.3227075526410679,45.003909145068739],[1.0404565374899824,45.004356403066552],[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)

Ausgabe

Schnittmenge
{"type": "GeometryCollection", "geometries": []}

Im folgenden Beispiel werden alle Countys in den USA gefunden, die sich mit einem Polygon mit dem Bereich von Interesse überschneiden.

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

Ausgabe

name Schnittmenge
New York {"type": "Polygon","coordinates": [[[-73.96213352680206, 40.775045280447145], [-73.9631313085556, 40.774578106920345], [-73.96207988262177,40.77416780398293],[-73.96213352680206, 40.775045280447145]}

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

Ausgabe

print_0
1