Jawaban:
Jika Anda mendesain peta yang Anda rencanakan untuk overlay di peta google atau bumi virtual dan membuat skema ubin maka saya pikir apa yang Anda cari adalah skala untuk setiap level zoom, gunakan ini:
20 : 1128.497220
19 : 2256.994440
18 : 4513.988880
17 : 9027.977761
16 : 18055.955520
15 : 36111.911040
14 : 72223.822090
13 : 144447.644200
12 : 288895.288400
11 : 577790.576700
10 : 1155581.153000
9 : 2311162.307000
8 : 4622324.614000
7 : 9244649.227000
6 : 18489298.450000
5 : 36978596.910000
4 : 73957193.820000
3 : 147914387.600000
2 : 295828775.300000
1 : 591657550.500000
Sumber: http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#designing_overlay_gm_mve.htm
Saya menemukan respons ini - ditulis oleh seorang karyawan Google - ini mungkin yang paling akurat:
Ini tidak akan akurat, karena resolusi peta dengan proyeksi mercator (seperti Google maps) bergantung pada garis lintang.
Mungkin untuk menghitung menggunakan rumus ini:
metersPerPx = 156543.03392 * Math.cos(latLng.lat() * Math.PI / 180) / Math.pow(2, zoom)
Ini didasarkan pada asumsi bahwa jari-jari bumi adalah 6378137m. Nilai mana yang kami gunakan :)
diambil dari: https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM
BTW - Saya menduga bahwa:
'latLng.lat()' = map.getCenter.lat()
'zoom' = map.getZoom()
Untuk membantu Anda memahami matematika (bukan perhitungan yang tepat, itu hanya untuk ilustrasi):
katakanlah monitor komputer Anda memiliki 100 piksel per inci (PPI). Itu berarti 256 piksel panjangnya sekitar 6,5 cm. Dan itu 0,065 m .
pada tingkat zoom 0 , keseluruhan 360 derajat garis bujur terlihat dalam satu ubin . Anda tidak dapat mengamati ini di Google Maps karena secara otomatis bergerak ke tingkat zoom 1, tetapi Anda dapat melihatnya di peta OpenStreetMap (menggunakan skema ubin yang sama).
360 degress pada Ekuator sama dengan keliling Bumi, 40.075,16 km, yaitu 40075160 m
bagikan 40075160 m dengan 0,065 m dan Anda akan mendapatkan 616313361 , yang merupakan skala tingkat zoom 0 pada Ekuator untuk monitor komputer dengan 100 DPI
Lihat juga: http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F
591657550.500000
adalah Level 0 sesuai dengan jawaban ini. Tetapi menurut @CaptDragon adalah Level 1. Saya harus mempertimbangkan mulai dari level 1 untuk menghitung dengan Google Maps?
Tidak semudah itu. Dengan proyeksi tersebut, ukuran piksel ubin bergantung pada garis lintang area yang Anda minati. Kemudian dalam hal mengubah ukuran piksel ubin dalam ukuran piksel layar, tergantung pada layar dan resolusi data yang ditampilkan, dpi layar Anda gunakan.
Jawaban yang benar langsung berwibawa:
591657550.500000 / 2^(level-1)
itu memberi Anda tabel di atas, memasuki level zoom.
Cobalah langsung di jsfiddle.net
Karena pertanyaannya hanya untuk Google MAPS, bukan BUMI, OP tidak peduli tentang geometri 3D. Peta Google SUDAH rata sehingga 1 pixel jaraknya selalu sama (di DEGREES, yang menjadi perhatian peta google), di sini dan di ecuator seperti di kutub.
Ngomong-ngomong, Apakah Anda menyadari bahwa di suatu tempat di dalam deretan piksel pertama dari peta dunia, skalanya adalah 1: 1?
Ada tabel seperti itu dalam dokumentasi Virtal Earth Tile System dari Microsoft . Tetapi seperti yang dikatakan oleh GuillaumeC nilai-nilai tergantung pada garis lintang dan pada resolusi layar. Tabel memberikan nilai yang diukur di Equator dan pada resolusi layar 96 dpi.
PS: Tidak yakin akan hal itu, tetapi tingkat pembesaran oleh Microsoft mungkin digeser oleh 1 dibandingkan dengan tingkat pembesaran oleh Google. Tetapi mereka secara pasti menggunakan proyeksi yang sama sehingga nilainya tetap benar untuk Google.
Radius @ Equator tepat 6,378,137 meter (WGS-84)
Lingkar di Khatulistiwa = 40.075.017 meter (2πr)
Level zoom 24 menggunakan 2 hingga 32 power (4.294.967.296) piksel pada keliling.
Lingkar Khatulistiwa / 2 32 = .009330692 meter per piksel
Unit at Latitude = (Cosine of Latitude) X (Unit at Equator)
Tingkat zoom menggandakan setiap kenaikan.
1 kaki (Internasional) = 0,3048 meter
Sunting
Yah itu sebenarnya bukan pertanyaan yang sah untuk memulai. Rasio skala relatif terhadap dokumen yang dicetak bukan layar komputer. Apa yang Anda butuhkan agar gambar-gambar ini dapat digunakan dengan akurasi apa pun adalah untuk mengetahui dimensi setiap piksel lalu skala gambar sesuai dengan apa pun yang Anda overlay dengannya.
Jadi kembali 15-20 tahun yang lalu seseorang mengambil WGS-84 sebagai basis data. (catatan di posting sebelumnya seseorang menggunakan nilai 40.075.160 saya pernah melihat ini di Wikipedia beberapa tempat dan itu salah. Nilai yang benar adalah 40.075.017
Mereka kemudian mengambilnya dan membaginya dengan integer 32 bit penuh. Ini adalah pilihan logis karena menghasilkan akurasi global hingga sekitar satu sentimeter yang cukup untuk pencitraan udara. Bilangan bulat 32 bit juga efisien untuk disimpan dan diproses.
Mengapa ini level 24 dipilih, saya tidak tahu karena orang lain di sini berhasil 0 membuat Anda turun ke satu ubin 256 pixel untuk bumi.
Sekarang untuk contoh cara menggunakan data di atas. Katakanlah saya memiliki gambar pada level zoom 20 (diperbesar seperti saat ini memungkinkan Anda) Ambil 0,009330692 (Zoom 24 pada ekuator) gandakan untuk zoom 23, lagi untuk zoom 22, lagi untuk zoom 21, sekali lagi untuk zoom 21 dan terakhir kali untuk zoom 20 Anda sekarang harus memiliki 0,149231071.
Sekarang misalkan gambar kita berada di garis lintang 45. Ambil Cosine dari itu (0,707106781) dan kalikan dengan 0,149231071 kita dan itu akan memberi Anda 0,105564729 meter. Itu adalah panjang dan tinggi satu piksel dari gambar di garis lintang 45 di tingkat zoom 20. Jika Anda menangkap gambar 1000 x 1000 piksel di area itu, dimensinya 105,56 meter persegi. Jika Anda ingin kaki membagi 0,3048 itu
Sedangkan untuk sumber saya secara esensial membalikkan insinyur sekitar 5 tahun yang lalu dari berbagai info dan dokumentasi yang saya temukan di web termasuk situs dukungan pemetaan Google dan MS.
Saya telah menggunakan waktu ini sebanyak seratus kali dan menimpanya dengan data survei lapangan yang sebenarnya dan selalu benar. Periksa terhadap tabel yang diposting di sini dan jumlahnya akan cocok.
Cukup lakukan beberapa perhitungan dan dapatkan hasil berikut:
Google Maps menunjukkan penggaris 1km (kiri bawah peta) yang panjangnya 90 piksel, pada tingkat zoom 13. Yang artinya adalah sebagai berikut:
Dengan asumsi resolusi layar adalah 96 dpi atau 36 dpcm, pada level zoom 13 kita memiliki 0,4km (dari 36/90) dalam 1cm, yang menghasilkan skala peta 1: 40.000 untuk layar 96dpi.
Untuk berbagai operasi di layar, yang terbaik adalah mengambil 90px sebagai basis, karena semua angka akan bulat di semua level zoom, yaitu
dan seterusnya.
Perhatikan bahwa ini adalah perkiraan yang akan berfungsi lebih atau kurang baik pada skala yang lebih kecil daripada yang besar.
(Dan Google suka angka bulat pada akhirnya ...)
Berdasarkan semua info yang diberikan, saya telah membangun sebuah fungsi yang memberikan z terbaik diterapkan pada peta ketika Anda ingin memiliki garis horizontal yang mewakili N% dari Peta yang ditampilkan.
Peta yang ditampilkan ditandai oleh lebar pikselnya sendiri.
function calculateZoom(WidthPixel,Ratio,Lat,Length){
// from a segment Length (km),
// with size ratio of the segment expected on a map (70%),
// with a map WidthPixel width in pixels (100px),
// and a latitude (45°) we can get the best Zoom
// assume earth is a perfect ball with radius : 6,378,137m and
// circumference at the equator = 40,075,016.7 m
// The full world on google map is available in tiles of 256 px;
// it has a ratio of 156543.03392 (px/m).
// For Z = 0;
// pixel scale at the Lat_level is ( 156543,03392 * cos ( PI * (Lat/180) ))
// The map scale increases at the rate of square root of Z.
//
Length = Length *1000; //Length is in Km
var k = WidthPixel * 156543.03392 * Math.cos(Lat * Math.PI / 180); //k = circumference of the world at the Lat_level, for Z=0
var myZoom = Math.round( Math.log( (Ratio * k)/(Length*100) )/Math.LN2 );
myZoom = myZoom -1; // Z starts from 0 instead of 1
//console.log("calculateZoom: width "+WidthPixel+" Ratio "+Ratio+" Lat "+Lat+" length "+Length+" (m) calculated zoom "+ myZoom);
// not used but it could be useful for some: Part of the world size at the Lat
MapDim = k /Math.pow(2,myZoom);
//console.log("calculateZoom: size of the map at the Lat: "+MapDim + " meters.");
//console.log("calculateZoom: world circumference at the Lat: " +k+ " meters.");
return(myZoom);
}
Saya belum bisa menambahkan komentar tetapi ini kemungkinan sumber jawaban Pete di atas: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates
[...] perhatikan bahwa setiap peningkatan level zoom dua kali lebih besar di arah x dan y. Oleh karena itu, setiap level zoom yang lebih tinggi mengandung resolusi empat kali lebih banyak dari level sebelumnya. Misalnya, pada tingkat zoom 1, peta terdiri dari 4 256x256 piksel petak, menghasilkan ruang piksel dari 512x512. Pada tingkat zoom 19, setiap piksel x dan y pada peta dapat dirujuk menggunakan nilai antara 0 dan 256 * 2 19
Saya menghitung skala untuk empat level zoom:
Tingkat pembesaran | Skala 20 1: 500 19 1: 1000 18 1: 2000 17 1: 4000
Tampaknya skala digandakan saat tingkat zoom meningkat satu langkah. Jadi, saya harap skala untuk level zoom 16 akan menjadi 1: 8000 dan seterusnya.
Hai Saya rasa saya telah menghitung bahwa 1pixel = 11,627km dalam garis lurus; tidak memperhitungkan jari-jari bumi. Di sini tautan video yang menjelaskan caranya: https://www.youtube.com/watch?v=Y3cvTeiMJqE&feature=youtu.be . Semoga itu menjernihkan pikiran Anda.
Zoom level set meters: ${meters}
); var zoomfactor = 1; if (meters <1128) {zoomfactor = 15; } lain jika ((meter> 1128) && (meter <2256)) {zoomfactor = 14; } lain jika ((meter> 2256) && (meter <4513)) {zoomfactor = 13; } lain jika ((meter> 4513) && (meter <9027)) {zoomfactor = 12; } lain jika ((meter> 9027) && (meter <18055)) {zoomfactor = 11; } lain jika ((meter> 18055) && (meter <36111)) {zoomfactor = 10; } lain jika ((meter> 36111) && (meter <72