geo_line_simplify()

Vereinfacht eine Linie oder eine mehrzeilige Linie, indem nahezu gerade Ketten kurzer Kanten durch eine einzelne lange Kante auf der Erde ersetzt werden.

Syntax

geo_line_simplify(Linestring,Toleranz)

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Typ Erforderlich BESCHREIBUNG
Linestring dynamic ✔️ Ein LineString- oder MultiLineString-Objekt im GeoJSON-Format.
tolerance int, long oder real Definiert den Mindestabstand in Metern zwischen zwei beliebigen Scheitelpunkten. Unterstützte Werte liegen im Bereich [0, ~7.800.000 Meter]. Wenn nichts angegeben wird, wird der Standardwert 10 verwendet.

Gibt zurück

Vereinfachte Linie oder eine mehrzeilige Linie im GeoJSON-Format und eines dynamischen Datentyps ohne zwei Scheitelpunkte mit einer Entfernung unter der Toleranz. Wenn entweder die Zeile oder die Toleranz ungültig ist, erzeugt die Abfrage ein NULL-Ergebnis.

Hinweis

  • Die georäumlichen Koordinaten werden so interpretiert, wie sie durch das Koordinatenreferenzsystem WGS-84 dargestellt werden.
  • Das geodätische Datum, das zum Messen der Entfernung auf der Erde verwendet wird, ist eine Kugel. Linienränder sind Geodätik auf der Kugel.
  • Wenn Eingabelinienränder gerade kartesische Linien sind, sollten Sie geo_line_densify() verwenden, um planare Kanten in Geodätik zu konvertieren.
  • Wenn die Eingabe ein mehrzeiliger Wert ist und mehr als eine Zeile enthält, ist das Ergebnis eine Vereinfachung der Linienunion.
  • Eine hohe Toleranz kann dazu führen, dass kleine Linien verschwinden.

LineString-Definition und -Einschränkungen

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.
  • Koordinaten [Längengrad, Breitengrad] müssen gültig sein, wenn der Längengrad eine reelle Zahl im Bereich [-180, +180] und breitengrad eine reelle Zahl im Bereich [-90, +90] ist.
  • Die Kantenlänge muss kleiner als 180 Grad sein. Die kürzeste Kante zwischen den beiden Scheitelpunkten wird ausgewählt.

Beispiele

Im folgenden Beispiel wird die Linie vereinfacht, indem Scheitelpunkte entfernt werden, die sich innerhalb einer Entfernung von 10 Metern voneinander befinden.

let line = dynamic({"type":"LineString","coordinates":[[-73.97033169865608,40.789063020152824],[-73.97039607167244,40.78897975920816],[-73.9704617857933,40.78888837512432],[-73.97052884101868,40.7887949601531],[-73.9706052839756,40.788698498903564],[-73.97065222263336,40.78862640672032],[-73.97072866559029,40.78852791445617],[-73.97079303860664,40.788434498977836]]});
print simplified = geo_line_simplify(line, 10)

Ausgabe

Vereinfachte
{"type": "LineString", "coordinates": [[-73.97033169865608, 40.789063020152824], [-73.9707930303860664, 40.7884349897836]]}

Das folgende Beispiel vereinfacht Linien und kombiniert Ergebnisse in der GeoJSON-Geometriesammlung.

NY_Manhattan_Roads
| project road = features.geometry
| project road_simplified = geo_line_simplify(road, 100)
| summarize roads_lst = make_list(road_simplified)
| project geojson = bag_pack("type", "Feature","geometry", bag_pack("type", "GeometryCollection", "geometries", roads_lst), "properties", bag_pack("name", "roads"))

Ausgabe

geojson
{"type": "Feature", "geometry": {"type": "GeometryCollection", "geometries": [ ... ]}, "properties": {"name": "roads"}}

Das folgende Beispiel vereinfacht Zeilen und vereinheitlicht das Ergebnis.

NY_Manhattan_Roads
| project road = features.geometry
| project road_simplified = geo_line_simplify(road, 100)
| summarize roads_lst = make_list(road_simplified)
| project roads = geo_union_lines_array(roads_lst)

Ausgabe

Straßen
{"type": "MultiLineString", "coordinates": [ ... ]}

Im folgenden Beispiel wird aufgrund der ungültigen Zeile True zurückgegeben.

print is_invalid_line = isnull(geo_line_simplify(dynamic({"type":"LineString","coordinates":[[1, 1]]})))

Ausgabe

is_invalid_line
True

Im folgenden Beispiel wird aufgrund der ungültigen Toleranz True zurückgegeben.

print is_invalid_line = isnull(geo_line_simplify(dynamic({"type":"LineString","coordinates":[[1, 1],[2,2]]}), -1))

Ausgabe

is_invalid_line
True

Im folgenden Beispiel wird True zurückgegeben, da eine hohe Toleranz dazu führt, dass kleine Linien verschwinden.

print is_invalid_line = isnull(geo_line_simplify(dynamic({"type":"LineString","coordinates":[[1.1, 1.1],[1.2,1.2]]}), 100000))

Ausgabe

is_invalid_line
True