Kami ingin menampilkan beberapa penanda pada peta statis dan ingin menghitung tingkat zoom optimal seperti yang dilakukan Google Maps. Kami sudah menghitung persegi panjang pembatas dan titik tengah peta tapi sekarang kami kesulitan menghitung tingkat zoom yang benar untuk menampilkan seluruh persegi panjang pembatas. Bisakah seseorang tolong tunjukkan kami ke arah yang benar?
google-maps
openstreetmap
tiles
extents
Tobias Schwarz
sumber
sumber
Jawaban:
Untuk mendapatkan tingkat pembesaran, Anda harus mengetahui dimensi piksel peta Anda. Anda juga perlu melakukan matematika Anda dalam koordinat mercator bola.
sumber
Ini adalah kode C # yang saya gunakan di Maperitive :
mapArea
: kotak pembatas dalam koordinat panjang / lat (x = panjang, y = lat)paddingFactor
: ini dapat digunakan untuk mendapatkan efek "120%" yang dirujuk oleh ThomM. Nilai 1,2 akan memberi Anda 120%.Perhatikan bahwa dalam kasus saya
zoom
dapat berupa bilangan real. Dalam kasus peta Web, Anda memerlukan nilai zoom integer, jadi Anda harus menggunakan sesuatu seperti(int)Math.Floor(zoom)
untuk mendapatkannya.Tentu saja, kode ini hanya berlaku untuk proyeksi Web Mercator.
sumber
GeometryUtils
hanya digunakan di sini untuk mengubah derajat ke radian dan kembali, itu adalah rumus matematika sederhana.Bounds2
pada dasarnya hanya struktur persegi panjang. Kode ini diberikan lebih sebagai pseudocode daripada sesuatu yang langsung dapat disalin.Jika Anda menggunakan OpenLayers maka
Map.getZoomForExtent
akan menghitung level zoom tertinggi yang dapat memenuhi seluruh tingkat di peta. Theextent
kebutuhan untuk berada di proyeksi peta ini. Anda juga dapat menggunakan afill_factor
untuk menghindari menampilkan titik di tepi peta, danmax_zoom
untuk membatasi kemungkinan zoom:sumber