Bagikan melalui


geo_polygon_densify()

Mengonversi tepi poligon atau planar multipoligon menjadi geodesik dengan menambahkan titik menengah.

Sintaks

geo_polygon_densify(toleransi poligon, [ preserve_crossing ],)

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Tipe Wajib Deskripsi
polygon dynamic ✔️ Poligon atau multipoligon dalam format GeoJSON.
Toleransi int, long, atau real Menentukan jarak maksimum dalam meter antara tepi planar asli dan rantai tepi geodesik yang dikonversi. Nilai yang didukung berada dalam rentang [0,1, 10.000]. Jika tidak ditentukan, nilai defaultnya adalah 10.
preserve_crossing bool Jika true, pertahankan tepi menyeberangi antimeridian. Jika tidak ditentukan, nilai default false akan digunakan.

Definisi 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 ditentukan sebagai counterclockwise larik berurutan dari koordinat [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Hanya boleh ada satu shell.
  • LinearRingHole bersifat opsional dan ditentukan sebagai clockwise larik berurutan dari koordinat [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Mungkin ada sejumlah cincin dan lubang interior.
  • LinearRing puncak harus berbeda dengan minimal 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 menyelimuti lebih dari setengah bola. LinearRing membagi bola menjadi dua wilayah. Yang lebih kecil dari dua wilayah akan dipilih.
  • LinearRing panjang tepi harus kurang dari 180 derajat. Tepi terpendek antara dua puncak akan dipilih.

Kendala

  • Jumlah maksimum titik dalam poligon yang dipadatkan terbatas pada 10485760.
  • Penyimpanan poligon dalam format dinamis memiliki batas ukuran.
  • Pemadatan poligon yang valid dapat membatalkan poligon. Algoritmanya menambahkan titik dengan cara yang tidak seragam, dan dengan demikian dapat menyebabkan tepi terjalin satu sama lain.

Motivasi

Mengembalikan

Poligon yang dipadatkan dalam Format GeoJSON dan jenis data dinamis. Jika poligon atau toleransi tidak valid, kueri menghasilkan hasil null.

Catatan

Koordinat geospasial diinterpretasikan sebagaimana diwakili oleh sistem referensi koordinat WGS-84.

Contoh

Contoh berikut memadatkan poligon Manhattan Central Park. Tepi-tepinya pendek dan jarak antara tepi planar dan tepi geodesik lainnya kurang dari jarak yang ditentukan oleh toleransi. Dengan demikian, hasilnya tetap tidak berubah.

print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[-73.958244,40.800719],[-73.949146,40.79695],[-73.973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]})))

Hasil

densified_polygon
{"type":"Polygon","coordinates":[[[-73.958244,40.800719],[-73.949146,40.79695],[-73.973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]}

Contoh berikut memadatkan dua tepi poligon. Panjang tepi yang dipadatkan adalah ~ 110 km

print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]})))

Hasil

densified_polygon
{"type":"Polygon","coordinates":[[[10,10],[10.25,10],[10.5,10],[10.75,10],[11,10],[11,11],[10.75,11],[10.5,11],[10.25,11],[10,11],[10,10]]]}

Contoh berikut menampilkan hasil null karena input koordinat yang tidak valid.

print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,900],[11,10],[11,11],[10,11],[10,10]]]}))

Hasil

densified_polygon

Contoh berikut menampilkan hasil null karena input toleransi yang tidak valid.

print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]}), 0)

Hasil

densified_polygon