Dela via


geo_polygon_densify()

Konverterar polygon- eller flerpolygonplanära kanter till geodesik genom att lägga till mellanliggande punkter.

Syntax

geo_polygon_densify(Polygon,Tolerans, [ preserve_crossing ])

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 .
preserve_crossing bool Om true, bevarar kantkorsning över antimeridian. Om det är ospecificerat används standardvärdet false .

Polygondefinition

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.
  • LinearRing hörnen 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 reellt tal i intervallet [-180, +180] och latitud måste vara ett reellt tal i intervallet [-90, +90].
  • LinearRingShell omsluter högst hälften av sfären. LinearRing delar upp sfären i två regioner. Den mindre av de två regionerna väljs.
  • LinearRing kantlängden måste vara mindre än 180 grader. Den kortaste kanten mellan de två hörnen väljs.

Villkor

  • Det maximala antalet punkter i den förtätade polygonen är begränsat till 10485760.
  • Lagring av polygoner i dynamiskt format har storleksgränser.
  • Om du förtätar en giltig polygon kan polygonen ogiltigförklaras. Algoritmen lägger till punkter på ett icke-enhetligt sätt och kan därför göra att kanter sammanflätas med varandra.

Motivation

  • GeoJSON-format definierar en kant mellan två punkter som en rak kartesisk linje medan geo_polygon_densify()geodesisk används.
  • Beslutet att använda geodesiska eller planära kanter kan bero på datauppsättningen och är särskilt relevant i långa kanter.

Returer

Densifierad polygon i GeoJSON-format och av en dynamisk datatyp. Om polygonen eller toleransen är ogiltig genererar frågan ett null-resultat.

Anteckning

Geospatiala koordinater tolkas som de representeras av WGS-84-koordinatreferenssystemet .

Exempel

I följande exempel nekas Manhattan Central Park polygon. Kanterna är korta och avståndet mellan planarkanterna och deras geodesiska motsvarigheter är mindre än det avstånd som anges av toleransen. Resultatet förblir därför oförändrat.

print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[-73.958244,40.800719],[-73.949146,40.79695],[-73.973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]})))

Resultat

densified_polygon
{"type":"Polygon","coordinates":[[-73.958244,40.800719],[-73.949146,40.79695],[-73.973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]]}

I följande exempel nekas två kanter av polygonen. Längden på densifierade kanter är ~110 km

print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]})))

Resultat

densified_polygon
{"type":"Polygon","coordinates":[[[10,10],[10.25,10],[10.5,10],[10.75,10],[11,10],],[11,10],[11,11],[10.75,11],[10.5,11],[10.25,11],[10,11],[10,10]]]}

I följande exempel returneras ett null-resultat på grund av ogiltiga koordinatindata.

print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,900],[11,10],[11,11],[10,11],[10,10]]]}))

Resultat

densified_polygon

I följande exempel returneras ett null-resultat på grund av ogiltiga toleransindata.

print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]}), 0)

Resultat

densified_polygon