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 |
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für