Freigeben über


geo_polygon_simplify()

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

Vereinfacht ein Polygon oder ein Multipolygon, indem nahezu gerade Ketten von kurzen Kanten durch einen einzelnen langen Rand auf der Erde ersetzt werden.

Syntax

geo_polygon_simplify(Polygontoleranz, )

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Type 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 befinden sich 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 abstand kleiner als Toleranz. Wenn das Polygon oder die Toleranz ungültig ist, erzeugt die Abfrage ein NULL-Ergebnis.

Hinweis

  • Wenn die Eingabe über mehrere Polygone mit gegenseitigen Rahmen verfügt, lesen Sie bitte geo_simplify_polygons_array().
  • Die Geospatialkoordinaten werden durch das WGS-84-Koordinatenverweissystem interpretiert.
  • Das geodetische Datum , das für Messungen auf der Erde verwendet wird, ist eine Kugel. Polygonränder sind geodätische Ränder auf der Kugel.
  • Wenn eingabe polygonale Kanten gerade kartesische Linien sind, sollten Sie geo_polygon_densify() verwenden, um planare Kanten in Geodästik zu konvertieren.
  • Wenn die Eingabe ein Multipolygon ist und mehr als ein Polygon enthält, entspricht das Ergebnis dem Bereich der Polygone-Vereinigung.
  • 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 ein counterclockwise sortiertes 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 definiert als ein clockwise sortiertes Array von Koordinaten [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. 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 mit der letzten koordinate gleich 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 teilt die Kugel in zwei Bereiche auf. Die kleineren der beiden Regionen werden ausgewählt.
  • Die Länge des LinearRing-Rands muss kleiner als 180 Grad sein. Der kürzeste Rand zwischen den beiden Scheitelpunkten wird ausgewählt.
  • LinearRinge dürfen nicht kreuzen und dürfen keine Kanten teilen. LinearRinge können Scheitelpunkte teilen.

Beispiele

Im folgenden Beispiel werden Polygone vereinfacht, indem Scheitelpunkte entfernt werden, die sich innerhalb eines Abstands 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)

Output

simplified
{"type": "Polygon", "coordinates": [[-73.948851227760315, 40.796734763556572],[-73.949063122272477, 40.797107362717881],[-73.949236124753952, 40.7968708081794],[-73.948851227760315, 40.796734763556572]]]}

Im folgenden Beispiel werden Polygone vereinfacht und Ergebnisse in der GeoJSON-Geometrieauflistung kombiniert.

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"))

Output

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

Im folgenden Beispiel werden Polygone vereinfacht und ergebnisse übersichtlicher.

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)

Output

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))

Output

is_invalid_polygon
1

Im folgenden Beispiel wird "True" aufgrund der ungültigen Toleranz 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))

Output

is_invalid_polygon
1

Im folgenden Beispiel wird True zurückgegeben, da viele Polygone nicht mehr angezeigt werden.

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))

Output

is_invalid_polygon
1