geo_line_simplify()
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Vereinfacht eine Linie oder eine mehrzeilige Linie, indem nahezu gerade Ketten von kurzen Kanten durch einen einzelnen langen Rand auf der Erde ersetzt werden.
Syntax
geo_line_simplify(
lineString-Toleranz,
)
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 Mindestabstand in Metern zwischen zwei Scheitelpunkten. Unterstützte Werte befinden sich 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 Abstand kleiner als Toleranz. Wenn die Zeile oder Toleranz ungültig ist, erzeugt die Abfrage ein NULL-Ergebnis.
Hinweis
- Die Geospatialkoordinaten werden durch das WGS-84-Koordinatenverweissystem interpretiert.
- Das geodetische Datum , das zum Messen der Entfernung auf der Erde verwendet wird, ist eine Kugel. Linienränder sind geodätische Ränder auf der Kugel.
- Wenn Eingabelinien gerade kartesische Linien sind, sollten Sie geo_line_densify() verwenden, um planare Kanten in geodätische Ränder zu konvertieren.
- Wenn es sich bei der Eingabe um eine mehrzeilige Eingabe handelt und mehr als eine Zeile enthält, wird die Zeilenvereinigung vereinfacht.
- 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, wobei 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. Der kürzeste Rand zwischen den beiden Scheitelpunkten wird ausgewählt.
Beispiele
Im folgenden Beispiel wird die Linie vereinfacht, indem Scheitelpunkte entfernt werden, die sich innerhalb eines Abstands von 10 Meter 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)
Output
simplified |
---|
{"type": "LineString", "coordinates": [[-73.97033169865608, 40.789063020152824], [-73.97079303860664, 40.7884349897836]]} |
Im folgenden Beispiel werden Linien vereinfacht und Ergebnisse in der GeoJSON-Geometrieauflistung kombiniert.
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"))
Output
geojson |
---|
{"type": "Feature", "geometry": {"type": "GeometryCollection", "geometries": [ ... ]}, "properties": {"name": "roads"}} |
Im folgenden Beispiel werden Zeilen vereinfacht und Das Ergebnis wird vereinfacht.
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)
Output
Straßen |
---|
{"type": "MultiLineString", "coordinates": [ ... ]} |
Im folgenden Beispiel wird "True" aufgrund der ungültigen Zeile zurückgegeben.
print is_invalid_line = isnull(geo_line_simplify(dynamic({"type":"LineString","coordinates":[[1, 1]]})))
Output
is_invalid_line |
---|
True |
Im folgenden Beispiel wird "True" aufgrund der ungültigen Toleranz zurückgegeben.
print is_invalid_line = isnull(geo_line_simplify(dynamic({"type":"LineString","coordinates":[[1, 1],[2,2]]}), -1))
Output
is_invalid_line |
---|
True |
Im folgenden Beispiel wird True zurückgegeben, da eine kleine Linie ausgeblendet wird.
print is_invalid_line = isnull(geo_line_simplify(dynamic({"type":"LineString","coordinates":[[1.1, 1.1],[1.2,1.2]]}), 100000))
Output
is_invalid_line |
---|
True |