Mengingat kondisi ini:
- skala seperti
1:50000
- pusat viewport adalah
100°E, 20°N
- ukuran viewport adalah
400x600
Bagaimana saya bisa menghitung kotak pembatas viewport?
Sistem koordinat geografis peta adalah EPSG: 4490.
Kami ingin menampilkannya dalam proyeksi berbeda seperti Mercator atau latitude_longitude_projection (mungkin ini yang dikatakan tidak diproyeksikan).
Ukuran viewport dalam piksel.
android
scale
resolution
Giser
sumber
sumber
Jawaban:
Ok, dengan beberapa masalah awal diselesaikan tugasnya relatif sederhana.
Skala, disajikan sebagai f.ex 1: 50000 berarti bahwa satu unit pada peta sesuai dengan 50.000 unit di dunia nyata.
Untuk peta kertas yang dicetak skala 1: 50000 ini berarti bahwa 1 meter pada peta setara dengan 50.000 meter di dunia nyata, atau untuk membuatnya lebih mudah: 1 cm pada peta setara dengan 50 meter di dunia nyata. Sejauh ini bagus.
Ketika komputer (atau layar ponsel) memasuki acara itu jauh lebih sulit: satuan ukuran pada layar adalah pixel, yang tidak memetakan langsung ke sentimeter. OpenLayers adalah (atau setidaknya di mana) menggunakan "Dots per inch", dan diasumsikan bahwa satu inci sesuai dengan 72 piksel (ini masuk akal pada layar 72 dpi, tetapi salah pada yaitu Retina Menampilkan. Tapi untuk sekarang, mari kita tetap berpegang pada 72 dpi (karena inilah yang dilakukan sebagian besar perpustakaan pemetaan (saya pikir, koreksi disambut)).
OpenLayers memiliki fungsi OpenLayers.Util.getResolutionFromScale (lihat sumber ):
Dengan unit = "derajat" (yang EPSG: 4490 adalah, dari apa yang saya kumpulkan) kita mendapatkan inci_per unit = 4374754 (OpenLayers.INCHES_PER_UNIT ["derajat"])
skala 1: 50000 (yang sesuai dengan 1/50000 = 0,00002) (inilah yang menghitung penLayers.Util.normalizeScale) memberikan normScale = 0,00002
Kami kemudian dapat menghitung resolusi sebagai
Mengetahui titik pusat (lon = 100, lat = 30), ukuran piksel viewport (w = 400, h = 600) dan resolusi kita kemudian dapat menggunakan fungsi calculBounds dari OpenLayers.Map (lihat sumber ):
yang dapat kita kurangi menjadi:
Menyebut ini dengan nilai-nilai kami memberi:
Kami kemudian dapat menggabungkan semua ini ke fungsi yang bekerja untuk derajat dengan penyebut skala yang diberikan:
sumber
dpi
nilainya. Bukan?