Dela via


geo_polygon_buffer()

Beräknar polygon eller multipolygon som innehåller alla punkter inom den angivna radien för den inmatade polygonen eller multipolygonen på jorden.

Syntax

geo_polygon_buffer(Polygon,Radie,Tolerans)

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Obligatorisk Beskrivning
Polygon dynamic ✔️ Polygon eller multipolygon i GeoJSON-format.
Radie real ✔️ Buffertradie i meter. Giltigt värde måste vara positivt.
Tolerans real Definierar toleransen i mätare som avgör hur mycket en polygon kan avvika från den idealiska radien. Om det är ospecificerat används standardvärdet 10 . Toleransen får inte vara lägre än 0,0001 % av radien. Om du anger tolerans som är större än radien sänks toleransen till största möjliga värde under radien.

Returer

Polygon eller MultiPolygon runt indatapolygonen eller multipolygonen. Om koordinaterna, radien eller toleransen är ogiltiga genererar frågan ett null-resultat.

Anteckning

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 reellt tal i intervallet [-180, +180] och latitud måste vara ett reellt tal i intervallet [-90, +90].
  • LinearRingShell omger högst hälften av sfären. LinearRing 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.
  • LinearRings får inte korsa och får inte dela kanter. LinearRings kan dela hörn.
  • Polygon innehåller dess hörn.

Exempel

Följande fråga beräknar polygon runt indatapolygon, med en radie på 10 km.

let polygon = dynamic({"type":"Polygon","coordinates":[[[139.813757,35.719666],[139.72558,35.71813],[139.727471,35.653231],[139.818721,35.657264],[139.813757,35.719666]]]});
print buffer = geo_polygon_buffer(polygon, 10000)
Buffert
{"type": "Polygon","coordinates": [ ... ]}

Följande fråga beräknar bufferten runt varje polygon och förenar resultatet

datatable(polygon:dynamic, radius:real )
[
    dynamic({"type":"Polygon","coordinates":[[[12.451218693639277,41.906457003556625],[12.445753852969375,41.90160968881543],[12.453514425793855,41.90361551885886],[12.451218693639277,41.906457003556625]]]}), 100,
    dynamic({"type":"Polygon","coordinates":[[[12.4566086734784,41.905119850039995],[12.453913683559591,41.903652663265234],[12.455485761012113,41.90146110630562],[12.4566086734784,41.905119850039995]]]}), 20
]
| project buffer = geo_polygon_buffer(polygon, radius)
| summarize polygons = make_list(buffer)
| project result = geo_union_polygons_array(polygons)
resultat
{"type": "Polygon","coordinates": [ ... ]}

Följande exempel returnerar true på grund av ogiltig polygon.

print buffer = isnull(geo_polygon_buffer(dynamic({"type":"p"}), 1))
Buffert
Sant

Följande exempel returnerar true på grund av en ogiltig radie.

print buffer = isnull(geo_polygon_buffer(dynamic({"type":"Polygon","coordinates":[[[10,10],[0,10],[0,0],[10,10]]]}), 0))
Buffert
Sant