Delen via


geo_polygon_simplify()

Vereenvoudigt een veelhoek of een multipolygon door bijna rechte kettingen van korte randen te vervangen door één lange rand op aarde.

Syntax

geo_polygon_simplify(Veelhoek,Tolerantie)

Meer informatie over syntaxisconventies.

Parameters

Naam Type Vereist Beschrijving
Veelhoek dynamic ✔️ Veelhoek of multipolygon in de GeoJSON-indeling.
Tolerantie int, lang of echt Definieert de maximale afstand in meters tussen de oorspronkelijke planaire rand en de geconverteerde geodetische randketen. Ondersteunde waarden bevinden zich in het bereik [0,1, 10000]. Als dit niet wordt opgegeven, is 10de standaardwaarde .

Retouren

Vereenvoudigde veelhoek of een multipolygon in de GeoJSON-indeling en van een dynamisch gegevenstype, zonder twee hoekpunten met een afstand kleiner dan tolerantie. Als de veelhoek of tolerantie ongeldig is, produceert de query een null-resultaat.

Notitie

  • Als invoer meer dan één veelhoek heeft, met wederzijdse randen, raadpleegt u geo_simplify_polygons_array().
  • De georuimtelijke coördinaten worden geïnterpreteerd als vertegenwoordigd door het WGS-84-coördinatenreferentiesysteem .
  • De geodetische datum die wordt gebruikt voor metingen op aarde is een bol. Veelhoekranden zijn geodeën op de bol.
  • Als de invoerveelhoekranden rechte cartesische lijnen zijn, kunt u overwegen geo_polygon_densify() te gebruiken om planaire randen te converteren naar geodetische lijnen.
  • Als invoer een multipolygon is en meer dan één veelhoek bevat, wordt het resultaat het gebied van veelhoeken samenvoeging.
  • Hoge tolerantie kan ervoor zorgen dat een kleine veelhoek verdwijnt.

Polygoondefinitie en beperkingen

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

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

  • LinearRingShell is vereist en gedefinieerd als een counterclockwise geordende matrix van coördinaten [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Er kan maar één shell zijn.
  • LinearRingHole is optioneel en wordt gedefinieerd als een clockwise geordende matrix van coördinaten [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Er kunnen een willekeurig aantal binnenringen en gaten zijn.
  • LinearRing-hoekpunten moeten verschillend zijn met ten minste drie coördinaten. De eerste coördinaat moet gelijk zijn aan de laatste. Er zijn ten minste vier vermeldingen vereist.
  • De coördinaten [lengtegraad, breedtegraad] moeten geldig zijn. Lengtegraad moet een reëel getal zijn in het bereik [-180, +180] en breedtegraad moet een reëel getal in het bereik [-90, +90] zijn.
  • LinearRingShell omsluit maximaal de helft van de bol. LinearRing verdeelt de bol in twee regio's. De kleinste van de twee regio's wordt gekozen.
  • De lengte van de LinearRing-rand moet kleiner zijn dan 180 graden. De kortste rand tussen de twee hoekpunten wordt gekozen.
  • LinearRings mag geen randen kruisen en mogen geen randen delen. LinearRings kan hoekpunten delen.

Voorbeelden

Het volgende voorbeeld vereenvoudigt veelhoeken door hoekpunten te verwijderen die zich binnen een afstand van 10 meter van elkaar bevinden.

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)

Uitvoer

Vereenvoudigd
{"type": "Polygon", "coördinaten": [[[-73.94885127760315, 40.796734763556572],[-73.949063122272477, 40,797107362717881],[-73.949236124753952, 40.7968708081794],[-73.948851227760315, 40.796734763556572]]]}

Het volgende voorbeeld vereenvoudigt veelhoeken en combineert resultaten in geoJSON-geometrieverzameling.

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

Uitvoer

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

Het volgende voorbeeld vereenvoudigt polygonen en unifies resultaat

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)

Uitvoer

Veelhoeken
{"type": "MultiPolygon", "coördinaten": [ ... ]}

In het volgende voorbeeld wordt True geretourneerd vanwege de ongeldige veelhoek.

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

Uitvoer

is_invalid_polygon
1

In het volgende voorbeeld wordt True geretourneerd vanwege de ongeldige tolerantie.

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

Uitvoer

is_invalid_polygon
1

In het volgende voorbeeld wordt True geretourneerd omdat hoge tolerantie ervoor zorgt dat veelhoek verdwijnt.

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

Uitvoer

is_invalid_polygon
1