geo_polygon_densify()
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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 eincounterclockwise
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 sortiertesclockwise
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 |
---|