Dela via


geo_line_buffer()

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

Syntax

geo_line_buffer(lineString,Radie,Tolerans)

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Obligatorisk Beskrivning
lineString dynamic ✔️ En LineString eller MultiLineString 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 indata LineString eller MultiLineString. Om koordinaterna, radien eller toleransen är ogiltiga genererar frågan ett null-resultat.

Anteckning

  • Geospatiala koordinater tolkas som de representeras av WGS-84-koordinatreferenssystemet .
  • Det geodetiska datum som används för att mäta avståndet på jorden är en sfär.
  • Om indatalinjens kanter är raka kartesiska linjer bör du överväga att använda geo_line_densify() för att konvertera planära kanter till geodesik.
  • Linjernas ändkapslar är runda.
  • Båda sidor av linjerna är buffrade.

LineString-definition och begränsningar

dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})

dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})

  • Matrisen LineString-koordinater måste innehålla minst två poster.
  • Koordinaterna [longitud, latitud] måste vara giltiga där longitud är ett reellt tal i intervallet [-180, +180] och latitud är ett reellt tal i intervallet [-90, +90].
  • Kantlängden måste vara mindre än 180 grader. Den kortaste kanten mellan de två hörnen väljs.

Exempel

Följande fråga beräknar polygon runt linjen, med radie på 4 meter och 0,1 meter tolerans

let line = dynamic({"type":"LineString","coordinates":[[-80.66634997047466,24.894526340592122],[-80.67373241820246,24.890808090321286]]});
print buffer = geo_line_buffer(line, 4, 0.1)
Buffert
{"type": "Polygon", "coordinates": [ ... ]}

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

datatable(line:dynamic)
[
    dynamic({"type":"LineString","coordinates":[[14.429214068940496,50.10043066548272],[14.431184174126173,50.10046525983731]]}),
    dynamic({"type":"LineString","coordinates":[[14.43030222687753,50.100780677801936],[14.4303847111523,50.10020274910934]]})
]
| project buffer = geo_line_buffer(line, 2, 0.1)
| summarize polygons = make_list(buffer)
| project result = geo_union_polygons_array(polygons)
resultat
{"type": "Polygon","coordinates": [ ... ]}

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

print buffer = isnull(geo_line_buffer(dynamic({"type":"LineString"}), 5))
Buffert
Sant

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

print buffer = isnull(geo_line_buffer(dynamic({"type":"LineString","coordinates":[[0,0],[1,1]]}), 0))
Buffert
Sant