Bagikan melalui


geo_simplify_polygons_array()

Menyederhanakan poligon dengan mengganti rantai tepi pendek yang hampir lurus dengan satu tepi panjang di Bumi.

Sintaks

geo_simplify_polygons_array(toleransi, poligon)

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Tipe Wajib Deskripsi
polygon dynamic ✔️ Poligon atau multipoligon 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

Poligon yang disederhanakan atau multipoligon dalam format GeoJSON dan jenis data dinamis , tanpa dua simpul dengan jarak kurang dari toleransi. Jika poligon atau toleransi tidak valid, kueri akan memberikan hasil null.

Catatan

  • Jika input adalah poligon tunggal, silakan lihat geo_polygon_simplify().
  • Koordinat geospasial diinterpretasikan sebagaimana diwakili oleh sistem referensi koordinat WGS-84.
  • Datum geodetik yang digunakan untuk pengukuran di Bumi adalah bola. Tepi poligon adalah geodesik pada bola.
  • Jika tepi poligon input adalah garis kartesius lurus, pertimbangkan untuk menggunakan geo_polygon_densify() untuk mengonversi tepi planar menjadi geodesik.
  • Jika inputnya adalah multipoligon dan berisi lebih dari satu poligon, hasilnya adalah luas gabungan poligon.
  • Toleransi tinggi dapat menyebabkan poligon kecil menghilang.

Definisi dan batasan poligon

dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})

dynamic({"type": "MultiPolygon","coordinates": [[ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})

  • LinearRingShell diperlukan dan didefinisikan sebagai array berurutan koordinat counterclockwise [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Hanya boleh ada satu shell.
  • LinearRingHole diperlukan dan didefinisikan sebagai array berurutan koordinat clockwise [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Mungkin ada sejumlah cincin dan lubang interior.
  • Puncak LinearRing harus berbeda dengan setidaknya tiga koordinat. Koordinat pertama harus sama dengan yang terakhir. Setidaknya empat entri yang diperlukan.
  • Koordinat [garis bujur, garis lintang] harus valid. Bujur harus berupa bilangan real dalam rentang [-180, +180] dan garis lintang berupa menjadi bilangan real dalam rentang [-90, +90].
  • LinearRingShell menutup paling banyak setengah dari bola. LinearRing membagi bola menjadi dua wilayah. Yang lebih kecil dari dua wilayah akan dipilih.
  • Panjang tepi LinearRing harus kurang dari 180 derajat. Tepi terpendek antara dua puncak akan dipilih.
  • LinearRing tidak boleh bersilangan dan tidak boleh berbagi tepi. LinearRings dapat berbagi puncak.

Contoh

Contoh berikut menyederhanakan poligon dengan batas bersama (status AS), dengan menghapus simpul yang berada dalam jarak 100 meter satu sama lain.

US_States
| project polygon = features.geometry
| summarize lst = make_list(polygon)
| project polygons = geo_simplify_polygons_array(lst, 100)

Hasil

Poligon
{ "type": "MultiPolygon", "coordinates": [ ... ]]}

Contoh berikut mengembalikan True karena salah satu poligon tidak valid.

datatable(polygons:dynamic)
[
    dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807,40.80068],[-73.98201,40.76825],[-73.97317,40.76455],[-73.9495,40.7969]]]}),
    dynamic({"type":"Polygon","coordinates":[[[-73.94622,40.79249]]]}),
    dynamic({"type":"Polygon","coordinates":[[[-73.97335,40.77274],[-73.9936,40.76630],[-73.97171,40.75655],[-73.97335,40.77274]]]})
]
| summarize arr = make_list(polygons)
| project is_invalid_polygon = isnull(geo_simplify_polygons_array(arr))

Hasil

is_invalid_polygon
1

Contoh berikut mengembalikan True karena toleransi yang tidak valid.

datatable(polygons:dynamic)
[
    dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807,40.80068],[-73.98201,40.76825],[-73.97317,40.76455],[-73.9495,40.7969]]]}),
    dynamic({"type":"Polygon","coordinates":[[[-73.94622,40.79249],[-73.96888,40.79282],[-73.9577,40.7789],[-73.94622,40.79249]]]}),
    dynamic({"type":"Polygon","coordinates":[[[-73.97335,40.77274],[-73.9936,40.76630],[-73.97171,40.75655],[-73.97335,40.77274]]]})
]
| summarize arr = make_list(polygons)
| project is_null = isnull(geo_simplify_polygons_array(arr, -1))

Hasil

is_null
1

Contoh berikut mengembalikan True karena toleransi tinggi menyebabkan poligon menghilang.

datatable(polygons:dynamic)
[
    dynamic({"type":"Polygon","coordinates":[[[-73.9495,40.7969],[-73.95807,40.80068],[-73.98201,40.76825],[-73.97317,40.76455],[-73.9495,40.7969]]]}),
    dynamic({"type":"Polygon","coordinates":[[[-73.94622,40.79249],[-73.96888,40.79282],[-73.9577,40.7789],[-73.94622,40.79249]]]}),
    dynamic({"type":"Polygon","coordinates":[[[-73.97335,40.77274],[-73.9936,40.76630],[-73.97171,40.75655],[-73.97335,40.77274]]]})
]
| summarize arr = make_list(polygons)
| project is_null = isnull(geo_simplify_polygons_array(arr, 10000))

Hasil

is_null
1