Bagikan melalui


geo_line_simplify()

Menyederhanakan garis atau multibaris dengan mengganti rantai tepi pendek yang hampir lurus dengan satu tepi panjang di Bumi.

Sintaks

geo_line_simplify(toleransi lineString, )

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Tipe Wajib Deskripsi
lineString dynamic ✔️ LineString atau MultiLineString dalam format GeoJSON.
Toleransi int, long, atau real Mendefinisikan jarak minimum dalam meter antara dua simpul. Nilai yang didukung berada dalam rentang [0, ~7.800.000 meter]. Jika tidak ditentukan, nilai default 10 akan digunakan.

Mengembalikan

Garis yang disederhanakan atau multibaris dalam format GeoJSON dan jenis data dinamis , tanpa dua simpul dengan jarak kurang dari toleransi. Jika garis atau toleransi tidak valid, kueri akan memberikan 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. Tepi garis adalah geodesik pada bola.
  • Jika tepi garis input adalah garis kartesius lurus, pertimbangkan untuk menggunakan geo_line_densify() untuk mengubah tepi planar menjadi geodesik.
  • Jika input adalah multibaris dan berisi lebih dari satu baris, hasilnya akan menjadi penyederhanaan penyatuan garis.
  • Toleransi tinggi dapat menyebabkan garis kecil menghilang.

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

Contoh berikut menyederhanakan baris dengan menghapus simpul yang berada dalam jarak 10 meter satu sama lain.

let line = dynamic({"type":"LineString","coordinates":[[-73.97033169865608,40.789063020152824],[-73.97039607167244,40.78897975920816],[-73.9704617857933,40.78888837512432],[-73.97052884101868,40.7887949601531],[-73.9706052839756,40.788698498903564],[-73.97065222263336,40.78862640672032],[-73.97072866559029,40.78852791445617],[-73.97079303860664,40.788434498977836]]});
print simplified = geo_line_simplify(line, 10)

Hasil

disederhanakan
{"type": "LineString", "coordinates": [[-73.97033169865608, 40.789063020152824], [-73.97079303860664, 40.788434498977836]] }

Contoh berikut menyederhanakan garis dan menggabungkan hasil ke dalam koleksi geometri GeoJSON.

NY_Manhattan_Roads
| project road = features.geometry
| project road_simplified = geo_line_simplify(road, 100)
| summarize roads_lst = make_list(road_simplified)
| project geojson = bag_pack("type", "Feature","geometry", bag_pack("type", "GeometryCollection", "geometries", roads_lst), "properties", bag_pack("name", "roads"))

Hasil

geojson
{"type": "Feature", "geometry": {"type": "GeometryCollection", "geometries": [ ... ]}, "properties": {"name": "roads"}}

Contoh berikut menyederhanakan garis dan hasil unifies

NY_Manhattan_Roads
| project road = features.geometry
| project road_simplified = geo_line_simplify(road, 100)
| summarize roads_lst = make_list(road_simplified)
| project roads = geo_union_lines_array(roads_lst)

Hasil

Jalan
{"type": "MultiLineString", "coordinates": [ ... ]}

Contoh berikut mengembalikan True karena baris yang tidak valid.

print is_invalid_line = isnull(geo_line_simplify(dynamic({"type":"LineString","coordinates":[[1, 1]]})))

Hasil

is_invalid_line
Benar

Contoh berikut mengembalikan True karena toleransi yang tidak valid.

print is_invalid_line = isnull(geo_line_simplify(dynamic({"type":"LineString","coordinates":[[1, 1],[2,2]]}), -1))

Hasil

is_invalid_line
Benar

Contoh berikut mengembalikan True karena toleransi tinggi menyebabkan garis kecil menghilang.

print is_invalid_line = isnull(geo_line_simplify(dynamic({"type":"LineString","coordinates":[[1.1, 1.1],[1.2,1.2]]}), 100000))

Hasil

is_invalid_line
Benar