geo_polygon_simplify()
Vereinfacht ein Polygon oder ein Multipolygon, indem nahezu gerade Ketten kurzer Kanten durch eine einzelne lange Kante auf der Erde ersetzt werden.
Syntax
geo_polygon_simplify(
Polygon,
Toleranz)
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Typ | 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 liegen im Bereich [0,1, 10000]. Wenn nichts angegeben wird, beträgt der Standardwert 10 . |
Gibt zurück
Vereinfachtes Polygon oder ein Multipolygon im GeoJSON-Format und eines dynamischen Datentyps ohne zwei Scheitelpunkte mit einem Abstand unter der Toleranz. Wenn das Polygon oder die Toleranz ungültig ist, erzeugt die Abfrage ein NULL-Ergebnis.
Hinweis
- Wenn die Eingabe mehrere Polygone mit gegenseitigen Rahmen aufweist, lesen Sie geo_simplify_polygons_array().
- Die georäumlichen Koordinaten werden so interpretiert, wie sie durch das Koordinatenreferenzsystem WGS-84 dargestellt werden.
- Das geodätische Datum, das für Messungen auf der Erde verwendet wird, ist eine Kugel. Polygonränder sind Geodätik auf der Kugel.
- Wenn Es sich bei Eingabepolygonkanten um gerade kartesische Linien handelt, sollten Sie geo_polygon_densify() verwenden, um planare Kanten in Geodätik zu konvertieren.
- Wenn die Eingabe ein Multipolygon ist und mehr als ein Polygon enthält, ist das Ergebnis der Bereich der Polygonunion.
- Eine hohe Toleranz kann dazu führen, dass kleine Polygone verschwinden.
Polygondefinition und -einschränkungen
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
counterclockwise
geordnetes 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
clockwise
geordnetes Array von Koordinaten [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]definiert. Es kann eine beliebige Anzahl von Innenringen und Löchern geben. - LinearRing-Scheitelpunkte müssen mit mindestens drei Koordinaten unterschieden werden. Die erste Koordinate muss gleich der letzten 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 unterteilt die Kugel in zwei Regionen. Die kleinere der beiden Regionen wird ausgewählt.
- Die LinearRing-Kantenlänge muss kleiner als 180 Grad sein. Die kürzeste Kante zwischen den beiden Scheitelpunkten wird ausgewählt.
- LinearRinge dürfen sich nicht kreuzen und dürfen keine Kanten gemeinsam nutzen. LinearRings kann Scheitelpunkte gemeinsam haben.
Beispiele
Im folgenden Beispiel werden Polygone vereinfacht, indem Scheitelpunkte entfernt werden, die sich innerhalb einer Entfernung von 10 Metern voneinander befinden.
let polygon = dynamic({"type":"Polygon","coordinates":[[[-73.94885122776031,40.79673476355657],[-73.94885927438736,40.79692258628347],[-73.94887939095497,40.79692055577034],[-73.9488673210144,40.79693476936093],[-73.94888743758202,40.79693476936093],[-73.9488834142685,40.796959135509105],[-73.94890084862709,40.79695304397289],[-73.94906312227248,40.79710736271788],[-73.94923612475395,40.7968708081794],[-73.94885122776031,40.79673476355657]]]});
print simplified = geo_polygon_simplify(polygon)
Ausgabe
Vereinfachte |
---|
{"type": "Polygon", "coordinates": [[[-73.948851227760315, 40.796734763556572],[-73.949063122272477, 40.797107362717881],[-73.949236124753952, 40.7968708081794],[-73.948851227760315, 40.796734763556572]}} |
Das folgende Beispiel vereinfacht Polygone und kombiniert Ergebnisse in der GeoJSON-Geometriesammlung.
Polygons
| project polygon = features.geometry
| project simplified = geo_polygon_simplify(polygon, 1000)
| summarize lst = make_list(simplified)
| project geojson = bag_pack("type", "Feature","geometry", bag_pack("type", "GeometryCollection", "geometries", lst), "properties", bag_pack("name", "polygons"))
Ausgabe
geojson |
---|
{"type": "Feature", "geometry": {"type": "GeometryCollection", "geometries": [ ... ]}, "properties": {"name": "polygons"}} |
Das folgende Beispiel vereinfacht Polygone und vereinheitlicht das Ergebnis.
US_States
| project polygon = features.geometry
| project simplified = geo_polygon_simplify(polygon, 1000)
| summarize lst = make_list(simplified)
| project polygons = geo_union_polygons_array(lst)
Ausgabe
Polygone |
---|
{"type": "MultiPolygon", "coordinates": [ ... ]} |
Im folgenden Beispiel wird true aufgrund des ungültigen Polygons zurückgegeben.
let polygon = dynamic({"type":"Polygon","coordinates":[[[5,48],[5,48]]]});
print is_invalid_polygon = isnull(geo_polygon_simplify(polygon))
Ausgabe
is_invalid_polygon |
---|
1 |
Im folgenden Beispiel wird aufgrund der ungültigen Toleranz True zurückgegeben.
let polygon = dynamic({"type":"Polygon","coordinates":[[[5,48],[0,50],[0,47],[4,47],[5,48]]]});
print is_invalid_polygon = isnull(geo_polygon_simplify(polygon, -0.1))
Ausgabe
is_invalid_polygon |
---|
1 |
Im folgenden Beispiel wird True zurückgegeben, da eine hohe Toleranz dazu führt, dass Polygon verschwindet.
let polygon = dynamic({"type":"Polygon","coordinates":[[[5,48],[0,50],[0,47],[4,47],[5,48]]]});
print is_invalid_polygon = isnull(geo_polygon_simplify(polygon, 1000000))
Ausgabe
is_invalid_polygon |
---|
1 |
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