Timbangan apa yang berhubungan dengan tingkat zoom Google Maps?

83

Adakah yang bisa memberi saya tautan (atau detail) pada rasio aktual dengan angka "tingkat zoom" untuk Google Maps?

misalnya Google Maps Level 13 = 1: 20000

mlo55
sumber
1
Berdasarkan informasi pertama yang saya buat fungsi ini, mungkin seseorang bisa menggunakannya! fungsi setZoomLevel (meter) {//console.log ( 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
Friis1978

Jawaban:

79

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

CaptDragon
sumber
2
@capdragon Terima kasih. Itu sumber yang terkenal (ESRI) tetapi membuat kita masih bertanya-tanya bagaimana mereka muncul dengan skala ini.
Whuber
4
Rasional sangat penting untuk siapa? Saya tidak melihat penyebutan rasional dalam pertanyaan itu. Saya yakin dia menginginkan jawaban langsung untuk pertanyaannya.
CaptDragon
4
@cap Tanpa alasan, sulit atau tidak mungkin untuk membedakan jawaban yang benar dari yang salah. Tanpa alasan, seseorang harus mengandalkan otoritas penjawab. Saya cukup yakin bahwa alasan balasan lain di utas ini dipilih dan jawaban Anda tidak ada hubungannya dengan kebenaran atau keterusterangan - milik Anda adalah yang paling berwibawa dan lugas dari kelompok itu - tetapi memiliki segalanya untuk dilakukan. lakukan dengan alasan yang diberikan oleh yang lain. BTW saya belum menurunkan milik Anda.
whuber
3
Terima kasih: +1. Kalian mungkin ahli geografi atau guru penginderaan jauh. Saya hanya seorang pengembang GIS yang ingin membantu orang itu mencapai jawabannya. Seorang kolega saya (tipe PHD, jurusan MIT ganda) mengikuti kuliah satu jam setiap kali saya mengajukan pertanyaan sederhana dan membuat saya kehilangan jalan. Saya tidak bertanya lagi padanya (saya memiliki master dalam sains). Saya mengerti bahwa orang lain suka masuk ke dalam daging rasional dan sebagainya, tetapi banyak dari kita terlalu bodoh untuk tahu apa yang mereka bicarakan. IMHO mereka adalah jawaban yang membingungkan yang tidak menjawab pertanyaannya.
CaptDragon
10
Timbangan dipilih sehingga mereka dapat dibagi secara merata oleh ubin raster yang ada di basis 2, (mis. 128, 512 ...). Bing juga melakukan hal yang sama msdn.microsoft.com/en-us/library/bb259689.aspx
Garrett Hall
45

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()
gilad mayani
sumber
APA yang sama dengan formula Anda? Melakukannya untuk lat = 2.92 dan zoom 13 saya mendapat 19.08. Apa itu 19.08?
Rodrigo
4
@Rodrigo meter per piksel
Justin Poehnelt
3
Saya bisa bersaksi bahwa jawaban ini masih benar dan sangat akurat tiga tahun kemudian. Ini harus menjadi jawaban yang diterima.
John
Apakah ini berlaku untuk x saja atau juga y ? Apakah Google Maps via Javascript API menggunakan skala yang sama untuk kedua sumbu?
Pak Tua
@ OldGeezer Ya itu bekerja ke segala arah. Distorsi linear pada titik mana pun di Mercator sama di semua arah. Itulah salah satu alasan digunakannya peta slippy. Ketika Anda memperbesar jalan Anda mendapatkan peta distorsi yang cukup rendah. setelah Anda mengimbangi skala, itulah yang dilakukan jawaban ini.
smithkm
30

Untuk membantu Anda memahami matematika (bukan perhitungan yang tepat, itu hanya untuk ilustrasi):

  • Ubin peta web Google memiliki lebar 256 piksel
  • 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

  • jadi intinya adalah bahwa skala tergantung pada PPI monitor Anda dan pada lintang (karena proyeksi Mercator)
  • untuk tingkat zoom 1, skalanya adalah setengah dari tingkat zoom 0
  • ...
  • untuk level zoom N, skalanya adalah setengah dari level zoom N-1

Lihat juga: http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F

Igor Brejc
sumber
3
Skala sebenarnya bergantung pada DPI dari gambar peta yang dihasilkan. Dua resolusi yang paling sering digunakan adalah 96DPI (itulah ubin peta Google) dan 72DPI.
Sasa Ivetic
Dengan 96DPI skala 591657550.500000adalah Level 0 sesuai dengan jawaban ini. Tetapi menurut @CaptDragon adalah Level 1. Saya harus mempertimbangkan mulai dari level 1 untuk menghitung dengan Google Maps?
Douglas Nassif Roma Junior
17

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.

GuillaumeC
sumber
2
Itu benar, mercator bulat (proyeksi google) tidak mempertahankan skala yang sama ketika Anda menjauh dari khatulistiwa. Untuk beberapa referensi yang bagus: Artikel Skala dan Skala denominator Mapnik : trac.mapnik.org/wiki/ScaleAndPpi dan juga FAQ OSM: wiki.openstreetmap.org/wiki/…
maning
12

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?

Sergio
sumber
5
Apakah yang dimaksud angka 591657550.500000?
Justin Dearing
2
@Sergio mengapa tidak hanya 591657550.5?
Birowsky
2
"Angka tersebut berasal dari resolusi ubin yang ditetapkan pada kelipatan 256 piksel, dan dari resolusi layar (96dpi)" gis.stackexchange.com/a/111589/92997
juffel
Tidak berfungsi - itu tergantung pada Latitude, tetapi rumus Anda tidak
Evgenii Vorobei
9

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.

Nama
sumber
7

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.

DavidG
sumber
2
Saya tidak yakin bagaimana ini menjawab pertanyaan.
Devdatta Tengshe
Saya setuju dengan @Devdatta, bisakah Anda memberikan sumber dan beberapa konteks.
Aaron
Tidak yakin apakah komentar ini sebelum atau setelah pengeditan, tetapi saya menggunakan jawaban ini dan itu berfungsi dengan baik
bjnortier
4

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

  • Tingkat zoom 12: 2km dalam 90px
  • Tingkat zoom 11: 4km dalam 90px
  • Tingkat zoom 10: 8km dalam 90px

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 ...)

Mojuba
sumber
1
Jika Anda melihat lebih dekat, Anda akan menemukan bahwa panjang garis berubah tergantung pada garis lintang area yang Anda lihat.
rcoup
1
Ini hanya berlaku pada garis lintang tertentu, seperti yang disebutkan @rcoup. Tidak hanya panjang bilah skala bervariasi, tetapi jarak yang diwakilinya juga. Untuk melanjutkan contoh ini pada zoom 13, jarak yang diwakili oleh bar skala adalah 2 km di Tanjung Utara (lintang 71 °), 1 km di sekitar 45 ° garis lintang, dan 500 m di khatulistiwa.
François
3

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);
}
jaroc
sumber
3

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

Ingo Haumann
sumber
1

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.

Pete
sumber
3
Selamat datang di GIS.SE! Bisakah Anda memberikan sumber atau bagaimana ini dihitung?
Paul
0

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.

Tuan Totardo
sumber
Itu tidak. Nilai piksel tergantung pada garis lintang.
John Powell
Oh, begitu, bukan pada kompleks yang saya tempati.
Tn. Totardo