geo_polygon_buffer()

Berechnet ein Polygon oder Multipolygon, das alle Punkte innerhalb des angegebenen Radius des Eingabepolygons oder Multipolygons auf der Erde enthält.

Syntax

geo_polygon_buffer(Polygon,Radius,Toleranz)

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Typ Erforderlich BESCHREIBUNG
Polygon dynamic ✔️ Polygon oder Multipolygon im GeoJSON-Format.
Radius real ✔️ Pufferradius in Metern. Gültiger Wert muss positiv sein.
tolerance real Definiert die Toleranz in Metern, die bestimmt, wie stark ein Polygon vom idealen Radius abweichen kann. Wenn nichts angegeben wird, wird der Standardwert 10 verwendet. Die Toleranz sollte nicht kleiner als 0,0001 % des Radius sein. Wenn Sie eine Toleranz angeben, die größer als radius ist, wird die Toleranz auf den größtmöglichen Wert unterhalb des Radius reduziert.

Gibt zurück

Polygon oder MultiPolygon um das Eingabepolygon oder Multipolygon. Wenn die Koordinaten, der Radius oder die Toleranz ungültig sind, erzeugt die Abfrage ein NULL-Ergebnis.

Hinweis

  • Die Geokoordinaten werden durch das Koordinatenreferenzsystem WGS-84 dargestellt interpretiert.
  • Das geodätische Datum, das für Messungen auf der Erde verwendet wird, ist eine Kugel. Polygonränder sind geodätische Ränder auf der Kugel.
  • Wenn Eingabepolygonränder gerade kartesische Linien sind, 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]]. Es kann eine beliebige Anzahl von Innenringen und Löchern geben.
  • LinearRing-Scheitelpunkte müssen mit mindestens drei Koordinaten getrennt sein. 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] und Breitengrad eine reelle Zahl im Bereich [-90, +90] sein.
  • LinearRingShell umfasst höchstens die Hälfte der Kugel. LinearRing unterteilt die Kugel in zwei Bereiche. Die kleinere der beiden Regionen wird ausgewählt.
  • Die LinearRing-Kantenlänge muss kleiner als 180 Grad sein. Der kürzeste Rand zwischen den beiden Scheitelpunkten wird ausgewählt.
  • LinearRings darf sich nicht kreuzen und keine Kanten gemeinsam nutzen. LinearRings kann Scheitelpunkte gemeinsam haben.
  • Polygon enthält seine Scheitelpunkte.

Beispiele

Die folgende Abfrage berechnet das Polygon um das Eingabepolygon mit einem Radius von 10 km.

let polygon = dynamic({"type":"Polygon","coordinates":[[[139.813757,35.719666],[139.72558,35.71813],[139.727471,35.653231],[139.818721,35.657264],[139.813757,35.719666]]]});
print buffer = geo_polygon_buffer(polygon, 10000)
Puffer
{"type": "Polygon","coordinates": [ ... ]}

Die folgende Abfrage berechnet den Puffer um jedes Polygon und vereinheitlicht das Ergebnis.

datatable(polygon:dynamic, radius:real )
[
    dynamic({"type":"Polygon","coordinates":[[[12.451218693639277,41.906457003556625],[12.445753852969375,41.90160968881543],[12.453514425793855,41.90361551885886],[12.451218693639277,41.906457003556625]]]}), 100,
    dynamic({"type":"Polygon","coordinates":[[[12.4566086734784,41.905119850039995],[12.453913683559591,41.903652663265234],[12.455485761012113,41.90146110630562],[12.4566086734784,41.905119850039995]]]}), 20
]
| project buffer = geo_polygon_buffer(polygon, radius)
| summarize polygons = make_list(buffer)
| project result = geo_union_polygons_array(polygons)
result
{"type": "Polygon","coordinates": [ ... ]}

Im folgenden Beispiel wird aufgrund eines ungültigen Polygons true zurückgegeben.

print buffer = isnull(geo_polygon_buffer(dynamic({"type":"p"}), 1))
Puffer
True

Im folgenden Beispiel wird aufgrund eines ungültigen Radius true zurückgegeben.

print buffer = isnull(geo_polygon_buffer(dynamic({"type":"Polygon","coordinates":[[[10,10],[0,10],[0,0],[10,10]]]}), 0))
Puffer
True