Bagikan melalui


geo_line_buffer()

Menghitung poligon atau multipoligon yang berisi semua titik dalam radius tertentu dari baris input atau multibaris di Bumi.

Sintaks

geo_line_buffer(toleransi radius, lineString, )

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Tipe Wajib Deskripsi
lineString dynamic ✔️ LineString atau MultiLineString dalam format GeoJSON.
radius real ✔️ Radius buffer dalam meter. Nilai valid harus positif.
Toleransi real Mendefinisikan toleransi dalam meter yang menentukan berapa banyak poligon yang dapat menyimpang dari radius ideal. Jika tidak ditentukan, nilai default 10 akan digunakan. Toleransi tidak boleh lebih rendah dari 0,0001% dari radius. Menentukan toleransi yang lebih besar dari radius menurunkan toleransi ke nilai terbesar yang mungkin di bawah radius.

Mengembalikan

Poligon atau MultiPolygon di sekitar lineString input atau MultiLineString. Jika koordinat atau radius atau toleransi tidak valid, kueri menghasilkan hasil null.

Catatan

  • Koordinat geospasial diinterpretasikan sebagaimana diwakili oleh sistem referensi koordinat WGS-84.
  • Datum geodetik yang digunakan untuk mengukur jarak di Bumi adalah bola.
  • Jika tepi garis input adalah garis kartesius lurus, pertimbangkan untuk menggunakan geo_line_densify() untuk mengubah tepi planar menjadi geodesik.
  • Endcap dari garis bulat.
  • Kedua sisi garis di-buffer.

Batasan dan definisi LineString

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

  • Array koordinat LineString harus berisi minimal dua entri.
  • Koordinat [bujur, lintang] harus valid di mana bujur adalah angka riil dalam rentang [-180, +180] dan garis lintang adalah angka nyata dalam rentang [-90, +90].
  • Panjang tepi harus kurang dari 180 derajat. Tepi terpendek antara dua puncak akan dipilih.

Contoh

Kueri berikut menghitung poligon di sekitar garis, dengan radius 4 meter dan toleransi 0,1 meter

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

Kueri berikut menghitung buffer di sekitar setiap baris dan hasil unifies

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)
hasil
{"type": "Polygon","coordinates": [ ... ]}

Contoh berikut akan mengembalikan true, karena baris yang tidak valid.

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

Contoh berikut akan mengembalikan true, karena radius yang tidak valid.

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