Freigeben über


geo_line_densify()

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

Wandelt planare Linien oder mehrteilige Kanten in Geodätik um, indem Zwischenpunkte hinzugefügt werden.

Syntax

geo_line_densify(lineString-Toleranz,, [ preserve_crossing ])

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Type Erforderlich Beschreibung
lineString dynamic ✔️ Eine LineString- oder MultiLineString-Eigenschaft 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, wird der Standardwert 10 verwendet.
preserve_crossing bool Wenn true, behält den Rand, der über einTimeridian überschreitet. Wenn nichts angegeben wird, wird der Standardwert false verwendet.

Gibt zurück

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

Hinweis

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

LineString-Definition

dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})

dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})

  • LineString-Koordinatenarray muss mindestens zwei Einträge enthalten.
  • Die Koordinaten [Längengrad, Breitengrad] müssen gültig sein. Der Längengrad muss eine reelle Zahl im Bereich [-180, +180] sein, und der Breitengrad muss eine reelle Zahl im Bereich [-90, +90] sein.
  • Die Kantenlä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 in der verdichteten Linie ist auf 10485760 beschränkt.
  • Das Speichern von Zeilen im dynamischen Format weist Größenbeschränkungen auf.

Motivation

  • Das GeoJSON-Format definiert einen Rand zwischen zwei Punkten als gerade kartesische Linie, während geo_line_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.

Beispiele

Im folgenden Beispiel wird eine Straße auf der Manhattan-Insel verdichtet. Der Rand ist kurz und der Abstand zwischen dem planaren Rand und seinem geodätischen Gegenstück ist kleiner als der durch Toleranz angegebene Abstand. Daher bleibt das Ergebnis unverändert.

print densified_line = tostring(geo_line_densify(dynamic({"type":"LineString","coordinates":[[-73.949247, 40.796860],[-73.973017, 40.764323]]})))

Output

densified_line
{"type":"LineString","coordinates":[-73.949247, 40.796860], [-73.973017, 40.764323]]}

Im folgenden Beispiel wird eine Kante von ~130 km Länge angegeben.

print densified_line = tostring(geo_line_densify(dynamic({"type":"LineString","coordinates":[[50, 50], [51, 51]]})))

Output

densified_line
{"type":"LineString","coordinates":[50,50],[50.125,50.125],[50.25,50.25],[50.375,50.375],[50.5,50.5],[50.625,50.625],[50.75,50.75],[50.875,50.875],[51,51]]}

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

print densified_line = geo_line_densify(dynamic({"type":"LineString","coordinates":[[300,1],[1,1]]}))

Output

densified_line

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

print densified_line = geo_line_densify(dynamic({"type":"LineString","coordinates":[[1,1],[2,2]]}), 0)

Output

densified_line