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 sebagaicounterclockwise
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 sebagaiclockwise
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
- Format GeoJSON mendefinisikan tepi antara dua titik sebagai garis kartesius lurus saat
geo_polygon_densify()
menggunakan geodesik. - Keputusan untuk menggunakan tepi geodesik atau planar mungkin bergantung pada himpunan data dan sangat relevan di tepi panjang.
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 |
---|
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk