Dela via


geo_polygon_simplify()

Förenklar en polygon eller en multipolygon genom att ersätta nästan raka kedjor av korta kanter med en enda lång kant på jorden.

Syntax

geo_polygon_simplify(Polygon,Tolerans)

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Obligatorisk Beskrivning
Polygon dynamic ✔️ Polygon eller multipolygon i GeoJSON-format.
Tolerans int, long eller real Definierar maximalt avstånd i meter mellan den ursprungliga planarkanten och den konverterade geodesiska kantkedjan. Värden som stöds finns i intervallet [0.1, 10000]. Om det är ospecificerat är 10standardvärdet .

Returer

Förenklad polygon eller multipolygon i GeoJSON-format och av en dynamisk datatyp, utan två hörn med ett avstånd som är mindre än tolerans. Om polygonen eller toleransen är ogiltig ger frågan ett null-resultat.

Anteckning

  • Om indata har fler än en polygon, med ömsesidiga kantlinjer, se geo_simplify_polygons_array().
  • De geospatiala koordinaterna tolkas som de representeras av WGS-84-koordinatreferenssystemet .
  • Det geodetiska datum som används för mätningar på jorden är en sfär. Polygonkanter är geodesik på sfären.
  • Om indatapolygonkanter är raka kartesiska linjer bör du överväga att använda geo_polygon_densify() för att konvertera plana kanter till geodesik.
  • Om indata är en multipolygon och innehåller mer än en polygon blir resultatet området för polygoner.
  • Hög tolerans kan leda till att små polygoner försvinner.

Polygondefinition och begränsningar

dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})

dynamic({"type": "MultiPolygon","coordinates": [[ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})

  • LinearRingShell krävs och definieras som en counterclockwise ordnad matris med koordinater [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Det kan bara finnas ett gränssnitt.
  • LinearRingHole är valfritt och definieras som en clockwise ordnad matris med koordinater [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Det kan finnas valfritt antal inre ringar och hål.
  • Linjära hörn måste vara distinkta med minst tre koordinater. Den första koordinaten måste vara lika med den sista. Minst fyra poster krävs.
  • Koordinaterna [longitud, latitud] måste vara giltiga. Longitud måste vara ett verkligt tal i intervallet [-180, +180] och latitud måste vara ett verkligt tal i intervallet [-90, +90].
  • LinearRingShell omsluter högst hälften av sfären. Linjärring delar upp sfären i två regioner. Den mindre av de två regionerna väljs.
  • Linjär Kantlängd måste vara mindre än 180 grader. Den kortaste kanten mellan de två hörnen väljs.
  • Linjära linjer får inte korsas och får inte dela kanter. LinearRings kan dela hörn.

Exempel

Följande exempel förenklar polygoner genom att ta bort hörn som ligger inom ett avstånd på 10 meter från varandra.

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)

Resultat

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

I följande exempel förenklas polygoner och resultaten kombineras i GeoJSON-geometrisamlingen.

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

Resultat

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

Följande exempel förenklar polygoner och förenar resultat

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)

Resultat

Polygoner
{"type": "MultiPolygon", "coordinates": [ ... ]}

Följande exempel returnerar Sant på grund av den ogiltiga polygonen.

let polygon = dynamic({"type":"Polygon","coordinates":[[[5,48],[5,48]]]});
print is_invalid_polygon = isnull(geo_polygon_simplify(polygon))

Resultat

is_invalid_polygon
1

Följande exempel returnerar True på grund av den ogiltiga toleransen.

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

Resultat

is_invalid_polygon
1

I följande exempel returneras Sant eftersom hög tolerans gör att polygon försvinner.

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

Resultat

is_invalid_polygon
1