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 10 standardvä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 encounterclockwise
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 enclockwise
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 |
---|
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för