Freigeben über


geo_polygon_densify()

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Konvertiert planare Ränder von Polygonen oder Multipolygonen durch Hinzufügen von Zwischenpunkten in Geodäten.

Syntax

geo_polygon_densify(Polygontoleranz,, [ preserve_crossing ])

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Type Erforderlich Beschreibung
Polygon dynamic ✔️ Polygon oder Multipolygon im GeoJSON-Format.
tolerance int, long oder real Definiert den maximalen Abstand in Metern zwischen dem ursprünglichen planaren Rand und der konvertierten geodätischen Kantenkette. Unterstützte Werte befinden sich im Bereich [0,1, 10000]. Wenn nichts angegeben wird, beträgt der Standardwert 10.
preserve_crossing bool Wenn true, behält den Rand, der über einTimeridian überschreitet. Wenn nichts angegeben wird, wird der Standardwert false verwendet.

Polygondefinition

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 counterclockwise sortiertes 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 sortiertes clockwise 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 voneinander 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.
  • LinearRing Die Randlänge muss kleiner als 180 Grad sein. Der kürzeste Rand zwischen den beiden Scheitelpunkten wird ausgewählt.

Einschränkungen

  • Die maximale Anzahl von Punkten im verdichteten Polygon ist auf 10485760 beschränkt.
  • Das Speichern von Polygonen im dynamischen Format hat Größenbeschränkungen.
  • Die Verweigerung eines gültigen Polygons kann das Polygon ungültig werden. Der Algorithmus fügt Punkte auf nicht einheitliche Weise hinzu und kann dazu führen, dass Ränder miteinander verzahnt werden.

Motivation

  • Das GeoJSON-Format definiert einen Rand zwischen zwei Punkten als gerade kartesische Linie, während geo_polygon_densify() geodätisch verwendet wird.
  • Die Entscheidung, geodätische oder planare Kanten zu verwenden, hängt möglicherweise vom Dataset ab und ist besonders für lange Kanten relevant.

Gibt zurück

Verdichtetes Polygon im GeoJSON-Format und eines dynamischen Datentyps. Wenn das Polygon oder die Toleranz ungültig ist, erzeugt die Abfrage ein NULL-Ergebnis.

Hinweis

Die Geospatialkoordinaten werden durch das WGS-84-Koordinatenverweissystem interpretiert.

Beispiele

Im folgenden Beispiel wird das Manhattan Central Park-Polygon verdichtet. Die Kanten sind kurz und der Abstand zwischen planaren Kanten und ihren geodätischen Gegenstücken ist kleiner als der durch Toleranz angegebene Abstand. Daher bleibt das Ergebnis unverändert.

print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[-73.958244,40.800719],[-73.949146,40.79695],[-73.973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]})))

Output

densified_polygon
{"type":"Polygon","coordinates":[[-73.958244,40.800719],[-73.949146,40.79695],[-73.73.0973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]}

Im folgenden Beispiel werden zwei Ränder des Polygons angegeben. Verdichtete Kantenlänge beträgt ca. 110 km

print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]})))

Output

densified_polygon
{"type":"Polygon","coordinates":[[10,10],[10.25,10],[10.5;10],[10.75;10],[11,10],[11,11],[10.75,11],[10.5,11],[10.25;11],[10,11],[10,10]]]}

Im folgenden Beispiel wird ein NULL-Ergebnis aufgrund der ungültigen Koordinateneingabe zurückgegeben.

print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,900],[11,10],[11,11],[10,11],[10,10]]]}))

Output

densified_polygon

Im folgenden Beispiel wird ein NULL-Ergebnis aufgrund der ungültigen Toleranzeingabe zurückgegeben.

print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]}), 0)

Output

densified_polygon