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.
Berechnet Polygone oder Multipolygone, die alle Punkte innerhalb des angegebenen Radius des Eingabepolygons oder Multipolygons auf der Erde enthalten.
Syntax
geo_polygon_buffer(
Polygonradiustoleranz,,)
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
| Name | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| Polygon | dynamic |
✔️ | Polygon oder Multipolygon im GeoJSON-Format. |
| Radius | real |
✔️ | Pufferradius in Metern. Der gültige Wert muss positiv sein. |
| Toleranz | real |
Definiert die Toleranz in Metern, die bestimmt, wie viel ein Polygon vom idealen Radius abweichen kann. Wenn nichts angegeben wird, wird der Standardwert 10 verwendet. Die Toleranz sollte nicht unter 0,0001 % des Radius liegen. Die Angabe der Toleranz, die größer als der Radius ist, verringert die Toleranz auf den größten möglichen Wert unter dem Radius. |
Gibt zurück
Polygon oder MultiPolygon um das Eingabepolygon oder Multipolygon. Wenn die Koordinaten oder der Radius oder die Toleranz 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 als
counterclockwisegeordnetes 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
clockwisegeordnetes 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.
Beispiele
Im folgenden Beispiel werden Polygone um das Eingabe polygon mit dem Radius von 10 km berechnet.
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 Puffer um die einzelnen Polygone und vereint 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)
| Ergebnis |
|---|
| {"type": "Polygon","coordinates": [ ... ]} |
Das folgende Beispiel gibt "true" aufgrund eines ungültigen Polygons zurück.
print buffer = isnull(geo_polygon_buffer(dynamic({"type":"p"}), 1))
| Puffer |
|---|
| Richtig |
Das folgende Beispiel gibt "true" aufgrund eines ungültigen Radius zurück.
print buffer = isnull(geo_polygon_buffer(dynamic({"type":"Polygon","coordinates":[[[10,10],[0,10],[0,0],[10,10]]]}), 0))
| Puffer |
|---|
| Richtig |