Google Haritalar zoom düzeyleri hangi oran ölçeklerine karşılık geliyor?


83

Herhangi biri bana Google Haritalar’ın "yakınlaştırma düzeyi" rakamlarına gerçek oranla ilgili bir bağlantı (veya bazı detaylar) sağlayabilir mi?

örneğin Google Haritalar Seviye 13 = 1: 20000


1
Bu işlevi yaptığım ilk bilgilere dayanarak belki birileri kullanabilir! setZoomLevel (metre) {//console.log ( Zoom level set meters: ${meters}) işlevi ; var yakınlaştırma faktörü = 1; eğer (metre <1128) {yakınlaştırma faktörü = 15; } başka eğer ((metre> 1128) && (metre <2256)) {zoomfactor = 14; } başka eğer ((metre> 2256) && (metre <4513)) {zoomfactor = 13; } aksi takdirde ((metre> 4513) && (metre <9027)) {zoomfactor = 12; } aksi takdirde ((metre> 9027) && (metre <18055)) {zoomfactor = 11; } başka eğer ((metre> 18055) && (metre <36111)) {zoomfactor = 10; } else eğer ((metre> 36111) && (metre <72
Friis1978

Yanıtlar:


79

Eğer google maps veya sanal dünyaya bindirmeyi planladığınız ve bir döşeme şeması oluşturmayı planladığınız bir harita tasarlıyorsanız, aradığınızı her zoom seviyesi için ölçekler olduğunu düşünüyorum.

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

Kaynak: http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#designing_overlay_gm_mve.htm


2
@ capdragon Teşekkürler. Bu iyi bilinen bir kaynak (ESRI) ama bizi hala bu ölçeklerle nasıl karşıladıklarını merak etmemize neden oluyor.
whuber

4
Akılcı kimler için kritiktir? Bu konuda rasyonel bir şey görmüyorum. Dürüst olmak gerekirse sorusuna dürüstçe cevap vermek istediğine inanıyorum.
CaptDragon

4
@ Bir sebep olmadan, doğru bir cevabı yanlış olandan ayırmak zor veya imkansızdır. Bir sebep olmadan, cevap veren kişinin otoritesine güvenmek zorunda kalır. Bu konudaki diğer cevapların oylanmaya başladığına ve sizinkilerin doğruluk veya dürüstlükle pek bir ilgisi olmadığından eminim - sizinki, grubun en yetkili ve dürüstlüğüdür - ama daha doğrusu diğerleri tarafından verilen muhakeme ile yapın. Btw Ben seninkine düşürmedim.
whuber

3
Teşekkürler: +1. Muhtemelen siz coğrafyacılar ya da uzaktan algılama gurularısınız. Ben sadece adamın cevabına ulaşmasına yardım etmek isteyen bir GIS geliştiricisiyim. Bir meslektaşım (PHD tipi, çift MIT majör), ona basit bir soru sorduğumda her saat bir derse giriyor ve beni yol boyunca gevşetiyor. Ona artık soru sormuyorum (bilimde yüksek lisansım var). Anladığım kadarıyla, diğer insanlar rasyonel ve benzeri şeyler yapmayı seviyorlar, ama çoğumuz ne hakkında konuştuğunu bilemeyecek kadar cahiliz. IMHO, sorusuna cevap vermeyen cevapları karıştırıyorlardı.
CaptDragon

10
Ölçekler, taban 2'deki raster karoları ile eşit şekilde bölünebilecekleri şekilde seçildi (ör. 128, 512 ...). Bing benzer şekilde yapar msdn.microsoft.com/en-us/library/bb259689.aspx
Garrett Hall

44

Bu yanıtı buldum - bir Google çalışanı tarafından yazıldı - bu muhtemelen en doğru olanı olurdu:

Bu doğru olmaz, çünkü mercator projeksiyonu ile bir haritanın çözünürlüğü (Google maps gibi) enlemlere bağlıdır.

Bu formülü kullanarak hesaplamak mümkündür:

metersPerPx = 156543.03392 * Math.cos(latLng.lat() * Math.PI / 180) / Math.pow(2, zoom)

Bu, dünyanın yarıçapının 6378137 m olduğu varsayımına dayanmaktadır. Kullandığımız değer hangisi :)

https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM adresinden alınmıştır.

BTW - Tahmin ediyorum ki:

'latLng.lat()' = map.getCenter.lat()
'zoom' = map.getZoom()

Formülünüzü Neye eşittir? Lat = 2.92 ve zoom 13 için yapıyorum. 19.08. 19.08 nedir?
Rodrigo,

4
Piksel başına @Rodrigo metre
Justin Poehnelt

3
Üç yıl sonra bu cevabın hala doğru ve çok doğru olduğunu kanıtlayabilirim. Bu kabul edilen cevap olmalı.
John

Bu sadece x için mi yoksa y için de geçerli mi? Javascript API ile Google Maps her iki eksen için aynı ölçeği kullanıyor mu?
Old Geezer,

@OldGeezer Evet, her yöne çalışıyor. Mercator'daki herhangi bir noktada doğrusal bozulma, her yönde eşittir. Kaygan haritalar için kullanılmasının sebeplerinden biri de bu. Yakınlaştırdığınızda, oldukça düşük bir bozulma haritası elde edersiniz. bir kez ölçeklendirmeyi telafi ettiğinizde, bu cevabın yaptığı budur.
smithkm

30

Matematiği anlamanıza yardımcı olmak için (kesin bir hesaplama değil, sadece örnekleme içindir):

  • Google’ın web haritası kutucuğu 256 piksel genişliğe sahiptir
  • Diyelim ki bilgisayar monitörünüz inç başına 100 piksel (ÜFE) değerine sahip. Bu, 256 pikselin kabaca 6,5 ​​cm uzunluğunda olduğu anlamına gelir. Ve bu 0,065 m .

  • ilgili zum düzeyinde 0 , boylam bütün 360 derece görebilir tek karoda . Bunu Google Haritalar’da gözlemleyemezsiniz, çünkü otomatik olarak 1 nolu zoom seviyesine hareket eder, ancak OpenStreetMap’in haritasında görebilirsiniz (aynı döşeme şemasını kullanır).

  • Ekvator'daki 360 derece, 40075160 m olan 40.075.16 km olan Dünya'nın çevresine eşittir.

  • bölmek 40075160 m ile 0.065 m ve alacağınız 616313361 yakınlaştırma düzeyinde 0 bir ölçek olduğunu 100 DPI bir bilgisayar monitörü için Ekvator üzerinde

  • bu nedenle mesele, ölçeğin monitörünüzün ÜFE'sine ve enlemine bağlı olmasıdır (Mercator projeksiyonu nedeniyle)
  • yakınlaştırma seviyesi 1 için ölçek yakınlaştırma seviyesi 0'ın yarısı kadardır.
  • ...
  • yakınlaştırma seviyesi N için, ölçek yakınlaştırma seviyesi N-1'in yarısı kadardır.

Ayrıca kontrol edin: http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F


3
Ölçek aslında oluşturulan harita resimlerinin DPI'sına dayanmaktadır. En çok kullanılan iki çözünürlük 96DPI (Google harita döşemelerinin aldığı şey) ve 72DPI'dir.
Sasa Ivetic

96DPI ile ölçek 591657550.500000bu cevaba göre Seviye 0'dır. Ancak @CaptDragon'a göre Seviye 1'dir. Google Haritalar ile hesaplamak için 1. seviyeden başlamayı düşünmeliyim?
Douglas Nassif Roma Gençleri

17

O kadar kolay değil. Yansıtma göz önüne alındığında, döşeme piksellerinin boyutu, ilgilendiğiniz alanın enlemesine bağlıdır. Ardından, döşeme pikselinin boyutunu ekran piksel boyutuna dönüştürmek açısından, ekrana ve verilerin görüntülendiği çözünürlüğe bağlıdır. dpi ekran kullanıyor.


2
Bu doğru, küresel mercator (google projeksiyonu) ekvatordan uzaklaştıkça eşit ölçeği korumaz. Mapnik en Ölçek ve Ölçek paydalar madde:: bazı mükemmel referans için trac.mapnik.org/wiki/ScaleAndPpi : ve ayrıca OSM en SSS wiki.openstreetmap.org/wiki/...
Maning

12

Anlaşılır yetkili doğru cevap:

591657550.500000 / 2^(level-1)

Yakınlaştırma seviyesine girerek yukarıdaki tabloyu size verir.

Jsfiddle.net sitesinde canlı olarak deneyin

Soru sadece Google MAPS için olduğu için, EARTH için değil, OP 3B geometriyi önemsemiyor. Google haritaları ALREADY düzleştirilmiştir, bu nedenle 1 piksel her zaman aynı uzaklıktadır (DEGREES'te, google haritasına ilişkin olan), burada ve ekvatorda olduğu gibi.

Bu arada, bir dünya haritasının ilk piksel sırasının içinde bir yerde, ölçeğin 1: 1 olduğunu fark ettiniz mi?


5
591657550.500000 numarası neyi temsil eder?
Justin,

2
@Sergio neden sadece 591657550.5 değil?
Birowsky

2
"Sayı, döşeme çözünürlüğünün 256 piksele ayarlanmış sayısından ve ekran çözünürlüğünden ( 96dpi
juffel


9

Microsoft'tan Virtal Toprak Kiremit Sistemi belgelerinde böyle bir tablo var . Ancak GuillaumeC tarafından söylendiği gibi, değerler enlem ve ekran çözünürlüğüne bağlıdır. Tablo, Ekvator'da ve 96 dpi ekran çözünürlüğünde ölçülen değerleri verir.

Not: Bundan emin değilim, ancak Microsoft’un yakınlaştırma düzeyleri, Google’ın yakınlaştırma düzeyleriyle karşılaştırıldığında 1 puan arasında değişebilir. Fakat aynı projeksiyonu kesinlikle kullanıyorlar, böylece değerler Google için doğru kalıyor.


7

Yarıçap @ Equator 6,378,137 metre kesin (WGS-84)

Ekvator'daki çevre = 40,075,017 metre (2πr)

Yakınlaştırma seviyesi 24, çevre üzerinde 2 ila 32 güç (4,294,967,296) piksel kullanır.

Ekvator Çevresi / 2 32 = .009330692 piksel başına piksel

Enlemdeki Birim = (Enlem Kosinüsü) X (Ekvatordaki Birim)

Yakınlaştırma seviyesi her artışı iki katına çıkarır.

1 ayak (Uluslararası) = 0.3048 metre

Düzenle

Peki, başlamak için gerçekten meşru bir soru değil. Ölçek oranları, bilgisayar ekranları yerine basılı belgelere göredir. Bu görüntülerin herhangi bir doğrulukla kullanılması için ihtiyacınız olan, her pikselin boyutunu bilmek ve görüntüyü bindirdiğiniz yere göre ölçeklendirmektir.

Böylece 15-20 yıl önce birileri temel verileri WGS-84'ü aldı. (önceki bir yazıda, biri 40,075,160 değerini kullandıgını not edin Vikipedi'de bunu birkaç yerde gördüm ve yanlış. Doğru değeri 40.075.017

Daha sonra bunu aldı ve tam bir 32 bit tam sayı ile böldüler. Bu, havadan görüntüler için bol olan yaklaşık bir santimetreye kadar küresel doğruluk sağladığı için mantıklı bir seçimdir. 32 bit tam sayılar da depolamak ve işlemek için verimlidir.

Bu seviye 24'ün neden seçildiğini bilmiyorum ancak burada başka biri 0 çalıştığında, sizi dünya için 256 piksel karodan aşağıya indirir.

Şimdi yukarıdaki verilerin nasıl kullanılacağına dair bir örnek için. Diyelim ki zoom seviyesi 20'de bir görüntüm var (şu anda çekebildiğiniz kadar zoomlu): 0.009330692 (ekvatorda Zoom 24) çekimi zoom 23 için iki kat, zoom 22 için tekrar 21 ve zoom 20 için son bir kez Şimdi 0.149231071'e sahip olmalısınız.

Şimdi resmimizin enlem 45 olduğunu söyleyelim. Bunun Kosinüsünü alın (0.707106781) ve onu 0.149231071 ile çarpın, size 0.105564729 metre verecektir. Bu, bir pikselden enlemesine (45) yakınlaştırma düzeyindeki (20) bir görüntüden bir pikselin uzunluğu ve yüksekliğidir. Ayakları istiyorsanız, bu 0,3048 bölmek

Kaynaklara gelince, ben esansiyel olarak mühendisimi yaklaşık 5 yıl önce Google ve MS haritalama destek siteleri de dahil olmak üzere web üzerinde bulduğum çeşitli bilgi ve dokümantasyonlardan tersine çevirdim.

Bu yüzlerce kez kullandım ve onu gerçekten saha araştırması verileriyle örtüştüm ve her zaman doğru oldu. Burada yayınlanan tabloların herhangi birine karşı kontrol edin, sayılar eşleşecektir.


2
Bunun soruyu nasıl cevapladığından emin değilim.
Devdatta Tengshe

@Devdatta ile aynı fikirdeyim, lütfen bir kaynak ve bir bağlam sunabilir misiniz?
Aaron

Bu yorumların düzenlemeden önce mi yoksa sonra mı olduğundan emin değilim, ancak bu yanıtı kullandım ve harika çalışıyor
bjnortier

4

Sadece bazı hesaplamalar yaptım ve aşağıdaki sonuçları aldım:

Google Haritalar, zoom seviyesi 13'te, uzunluğu 90 piksel olan 1km'lik bir cetvel (haritanın sol altında) gösterir.

Ekran çözünürlüğünün 96 dpi veya 36 dpcm olduğunu varsayarsak, 13 yakınlaştırma düzeyinde 1 cm'de 0,4km (36/90 arasında) var; bu da 96 dpi ekran için 1: 40,000 harita ölçeğini veriyor.

Ekrandaki çeşitli işlemler için en iyisi temel olarak 90 piksel almaktır, çünkü tüm sayılar tüm yakınlaştırma düzeylerinde yuvarlak olacaktır, yani

  • Yakınlaştırma seviyesi 12: 90px'de 2km
  • Yakınlaştırma seviyesi 11: 90px'te 4km
  • Yakınlaştırma seviyesi 10: 90px'de 8km

ve bunun gibi.

Bunun, büyüklerden ziyade küçük ölçeklerde aşağı yukarı iyi çalışması gereken bir yaklaşım olduğunu unutmayın.

(Ve Google sonunda tur sayılarını sever ...)


1
Yakından bakarsanız, çizginin uzunluğunun, görüntülediğiniz alanın enlemesine bağlı olarak değiştiğini keşfedeceksiniz.
rcoup

1
@Rcoup belirtildiği gibi, bu yalnızca belirli bir enlemde geçerlidir. Sadece ölçek çubuğunun uzunluğu değişmez, aynı zamanda temsil ettiği mesafe de değişir. Bu örneğe zoom 13'te devam etmek için, ölçek çubuğunun temsil ettiği mesafe Kuzey Cape'de 2 km (71 ° enlem), 1 km yaklaşık 45 ° enlem ve ekvatorda 500 m'dir.
François,

3

Sağlanan tüm bilgilere dayanarak, görüntülenen Haritanın N% 'sini temsil eden yatay bir çizgiye sahip olmak istediğinizde bir haritaya uygulanan en iyi z'yi veren bir işlev oluşturdum.

Görüntülenen Harita kendi piksel genişliğiyle tanımlanır.

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);
}

3

Henüz bir yorum ekleyemiyorum, ancak bu yukarıdaki Pete'in cevabının olası bir kaynağıdır: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates

[...] Her artan zum seviyesinin hem x hem de y yönlerinde iki kat daha büyük olduğuna dikkat edin. Bu nedenle, her bir yüksek zoom seviyesi bir önceki seviyeye göre dört kat daha fazla çözünürlük içeriyor. Örneğin, yakınlaştırma düzeyinde 1, harita 4 256x256 piksel döşemelerden oluşur ve 512x512 piksel alanıyla sonuçlanır. Yakınlaştırma düzeyinde 19, haritadaki her x ve y pikseline 0 ile 256 * 2 arasındaki bir değer kullanılarak referans verilebilir. 19


1

Dört zoom seviyesi için terazileri hesapladım:

Yakınlaştırma seviyesi | Ölçek 20 1: 500 19 1: 1000 18 1: 2000 17 1: 4000

Zum seviyesi bir adım arttıkça ölçeğin iki katına çıktığı görülüyor. Bu yüzden, 16 nolu zum seviyesi ölçeğinin 1: 8000 ve daha fazla olacağını umuyorum.


3
GIS.SE'ye Hoşgeldiniz! Lütfen bir kaynak verebilir misiniz veya bu nasıl hesaplandı?
Paul,

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.