A que escalas de proporção os níveis de zoom do Google Maps correspondem?

83

Alguém pode me fornecer um link (ou alguns detalhes) sobre a proporção real em relação aos valores do "nível de zoom" do Google Maps?

por exemplo, Google Maps Nível 13 = 1: 20000

mlo55
fonte
1
Com base nas primeiras informações que criei essa função, talvez alguém possa usá-la! função setZoomLevel (metros) {//console.log ( Zoom level set meters: ${meters}); var zoomfactor = 1; if (metros <1128) {zoomfactor = 15; } caso contrário, se ((metros> 1128) && (metros <2256)) {zoomfactor = 14; } caso contrário, se ((metros> 2256) && (metros <4513)) {zoomfactor = 13; } caso contrário, se ((metros> 4513) && (metros <9027)) {zoomfactor = 12; } senão se ((metros> 9027) && (metros <18055)) {zoomfactor = 11; } senão se ((metros> 18055) && (metros <36111)) {zoomfactor = 10; } else if ((metros> 36111) && (metros <72
Friis1978 25/11

Respostas:

79

Se você estiver projetando um mapa, planeja sobrepor sobre o Google Maps ou o Virtual Earth e criar um esquema de ladrilhos, então acho que o que você está procurando são as escalas para cada nível de zoom, use estas:

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

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

CaptDragon
fonte
2
@capdragon Obrigado. Essa é uma fonte bem conhecida (ESRI), mas ainda nos perguntamos como eles conseguiram essas escalas.
whuber
4
O racional é crítico para quem? Não vejo menção de racional na questão. Eu acredito que ele quer uma resposta direta à sua pergunta direta.
CaptDragon
4
@cap Sem motivo, é difícil ou impossível distinguir uma resposta correta de uma incorreta. Sem uma razão, resta-se ter que confiar na autoridade do respondente. Tenho certeza de que a razão pela qual as outras respostas neste tópico estão sendo votadas e a sua não tem pouco a ver com correção ou franqueza - a sua é a mais autoritária e direta do grupo - mas tem tudo para fazer com o raciocínio fornecido pelos outros. BTW, eu não diminuí o voto do seu.
whuber
3
Obrigado: +1. Vocês provavelmente são geógrafos ou gurus de sensoriamento remoto. Sou apenas um desenvolvedor de GIS que quer ajudar o cara a encontrar sua resposta. Um colega meu (tipo PHD, duplo MIT major) entra em uma palestra de uma hora toda vez que faço uma pergunta simples e me perde no caminho. Eu não faço mais perguntas (tenho mestrado em ciências). Entendo que outras pessoas gostam de entrar no ramo do racional e assim por diante, mas muitos de nós somos ignorantes demais para saber do que estão falando. IMHO eles estavam respostas confusas que não respondem a sua pergunta.
CaptDragon
10
As escalas foram escolhidas para que possam ser divididas igualmente por blocos raster que estão na base 2 (por exemplo, 128, 512 ...). Bing não é semelhante msdn.microsoft.com/en-us/library/bb259689.aspx
Garrett Salão
45

Encontrei esta resposta - escrita por um funcionário do Google - provavelmente seria a mais precisa:

Isso não será preciso, porque a resolução de um mapa com a projeção mercator (como o Google maps) depende da latitude.

É possível calcular usando esta fórmula:

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

Isso se baseia na suposição de que o raio da Terra é 6378137m. Qual é o valor que usamos :)

retirado de: https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM

BTW - Estou supondo que:

'latLng.lat()' = map.getCenter.lat()
'zoom' = map.getZoom()
Gilad Mayani
fonte
O que é igual à sua fórmula? Fazendo isso para lat = 2,92 e zoom 13, obtive 19,08. O que é 19.08?
Rodrigo
4
@Rodrigo metros por pixel
Justin Poehnelt
3
Posso testemunhar que essa resposta ainda está correta e muito precisa três anos depois. Essa deve ser a resposta aceita.
John John
Isso se aplica apenas a x ou também a y ? O Google Maps via Javascript API usa a mesma escala para os dois eixos?
Old Geezer
@ OldGeezer Sim, funciona em todas as direções. A distorção linear em qualquer ponto do Mercator é igual em todas as direções. Essa é uma das razões pelas quais é usada para mapas escorregadios. Quando você aproxima o zoom, obtém um mapa de distorção razoavelmente baixo. Depois de compensar a escala, é o que essa resposta faz.
smithkm 5/04
30

Para ajudar você a entender a matemática (não é um cálculo preciso, é apenas uma ilustração):

  • O bloco de mapas da web do Google tem 256 pixels de largura
  • digamos que o monitor do seu computador tenha 100 pixels por polegada (PPI). Isso significa que 256 pixels têm aproximadamente 6,5 cm de comprimento. E isso é 0,065 m .

  • no nível de zoom 0 , os 360 graus de longitude são visíveis em um único bloco . Você não pode observar isso no Google Maps, pois ele se move automaticamente para o nível de zoom 1, mas pode ser visto no mapa do OpenStreetMap (ele usa o mesmo esquema de mosaicos).

  • 360 graus no equador são iguais a circunferência da Terra, 40,075.16 km, que é 40.075.160 m

  • divida 40075160 m com 0,065 me você obterá 616313361 , que é uma escala de nível de zoom 0 no Equator para um monitor de computador com 100 DPI

  • portanto, a questão é que a escala depende do PPI do monitor e da latitude (devido à projeção de Mercator)
  • para o nível de zoom 1, a escala é metade da do nível de zoom 0
  • ...
  • para o nível de zoom N, a escala é metade da do nível de zoom N-1

Verifique também: http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_loom_of_the_map.3F

Igor Brejc
fonte
3
A escala realmente depende do DPI das imagens de mapa geradas. As duas resoluções mais usadas são 96DPI (é o que os blocos de mapas do Google são) e 72DPI.
Sasa Ivetic
Com 96DPI, a escala 591657550.500000é o nível 0, de acordo com esta resposta. Mas, de acordo com @CaptDragon, é o nível 1. Devo considerar começar no nível 1 para calcular com o Google Maps?
Douglas Nassif Roma Junior
17

Não tão fácil. Dada a projeção, o tamanho dos pixels do bloco depende da latitude da área em que você está interessado. Depois, em termos de transformação do tamanho do pixel do bloco no tamanho da tela, depende da tela e da resolução em que os dados são exibidos. dpi que sua tela está usando.

GuillaumeC
fonte
2
Isso é correto, o mercator esférico (projeção do google) não preserva a mesma escala à medida que você se afasta do equador. Para uma excelente referência: Artigo sobre os denominadores de Escala e Escala de Mapnik : trac.mapnik.org/wiki/ScaleAndPpi e também as Perguntas Freqüentes da OSM: wiki.openstreetmap.org/wiki/…
man
12

Resposta correta autoritativa direta:

591657550.500000 / 2^(level-1)

fornece a tabela acima, inserindo o nível de zoom.

Experimente ao vivo em jsfiddle.net

Como a pergunta é apenas para o Google MAPS, não para a TERRA, o OP não se importa com a geometria 3D. Os mapas do Google JÁ estão achatados, de modo que 1 pixel está sempre à mesma distância (em GRAUS, que é o que diz respeito a um mapa do Google), aqui e no ecuador como nos pólos.

A propósito, você percebeu que em algum lugar dentro da primeira linha de pixels do mapa de um mundo, a escala é de 1: 1?

Sergio
fonte
5
O que o número 591657550.500000 representa?
23814 Justin Dearing
2
@Sergio, por que não apenas 591657550.5?
Birowsky 06/02
2
"O número vem da resolução do bloco que está sendo definida em um múltiplo de 256 pixels e da resolução da tela (96dpi)" gis.stackexchange.com/a/111589/92997
juffel
Não funciona - depende do Latitude, mas sua fórmula não é
Evgenii Vorobei
9

Existe uma tabela na documentação do Virtal Earth Tile System da Microsoft . Mas, como disse GuillaumeC, os valores dependem da latitude e da resolução da tela. A tabela fornece os valores medidos no Equador e com uma resolução de tela de 96 dpi.

PS: Não tenho certeza disso, mas os níveis de zoom da Microsoft podem ser alterados em 1 em comparação com os níveis de zoom do Google. Mas eles definitivamente usam a mesma projeção para que os valores permaneçam corretos para o Google.

Nome
fonte
7

Raio @ Equador 6.378.137 metros exatos (WGS-84)

Circunferência no Equador = 40.075.017 metros (2πr)

O nível de zoom 24 usa 2 aos 32 pixels de potência (4.294.967.296) na circunferência.

Circunferência Equatorial / 2 32 = 0,009330692 metros por pixel

Unidade na latitude = (cosseno da latitude) X (unidade no equador)

O nível de zoom dobra cada incremento.

1 pé (Internacional) = 0,3048 metros

Editar

Bem, não é realmente uma pergunta legítima para começar. As proporções de escala são relativas aos documentos impressos e não às telas dos computadores. O que você precisa para que essas imagens sejam usadas com precisão é conhecer a dimensão de cada pixel e escalar a imagem de acordo com a sua sobreposição.

Então, de 15 a 20 anos atrás, alguém usava o WGS-84 como dados base. (note em uma postagem anterior, alguém usou o valor 40.075.160. Vi isso na Wikipedia alguns lugares e está incorreto. O valor correto é 40.075.017

Eles então pegaram e dividiram por um número inteiro de 32 bits. Essa é uma escolha lógica, pois fornece precisão global de cerca de um centímetro, o que é suficiente para imagens aéreas. Inteiros de 32 bits também são eficientes para armazenar e processar.

Por que esse nível 24 foi escolhido? Eu não sei, no entanto, como alguém aqui trabalhou 0 leva você a um bloco de 256 pixels para a Terra.

Agora, um exemplo de como usar os dados acima. Digamos que eu tenho uma imagem no nível de zoom 20 (o zoom que eles permitem atualmente) Tire 0,009330692 (Zoom 24 no equador) dobre para o zoom 23, novamente para o zoom 22, novamente para o zoom 22, novamente para o zoom 21 e uma última vez para o zoom 20 Agora você deve ter 0,149231071.

Agora vamos dizer que nossa imagem está na latitude 45. Pegue o cosseno disso (0,707106781) e multiplique-o pelos nossos 0,149231071 e ele fornecerá 0,105564729 metros. Esse é o comprimento e a altura de um pixel de uma imagem na latitude 45 no nível de zoom 20. Se você capturar na tela uma imagem de 1000 x 1000 pixels dessa área, a dimensão é de 105,56 metros quadrados. Se você quer pés dividir esse 0,3048

Quanto às fontes, eu essencialmente fiz engenharia reversa há cerca de 5 anos, a partir de várias informações e documentação que encontrei na web, incluindo sites de suporte a mapas do Google e MS.

Eu usei essa centena de tempo e sobrepondo-a com dados de pesquisa de campo, e isso sempre foi correto. Compare com qualquer uma das tabelas postadas aqui e os números corresponderão.

DavidG
fonte
2
Não tenho certeza de como isso responde à pergunta.
Devdatta Tengshe
Concordo com @Devdatta, você poderia fornecer uma fonte e algum contexto.
Aaron
Não tenho certeza se esses comentários foram antes ou depois da edição, mas eu usei esta resposta e ele funciona muito bem
bjnortier
4

Apenas fiz alguns cálculos e obtive os seguintes resultados:

O Google Maps mostra uma régua de 1 km (canto inferior esquerdo do mapa) com 90 pixels de comprimento, no nível de zoom 13. O que significa o seguinte:

Supondo que a resolução da tela seja 96 dpi ou 36 dpcm, no nível de zoom 13, temos 0,4 km (de 36/90) em 1 cm, o que gera uma escala de mapa de 1: 40.000 para uma tela de 96 dpi.

Para várias operações na tela, o melhor é tomar 90px como base, pois todos os números serão arredondados em todos os níveis de zoom, ou seja,

  • Nível de zoom 12: 2km em 90px
  • Nível de zoom 11: 4km em 90px
  • Nível de zoom 10: 8km em 90px

e assim por diante.

Observe que essa é uma aproximação que deve funcionar mais ou menos bem em escalas menores, em vez de grandes.

(E o Google gosta de números redondos no final ...)

mojuba
fonte
1
Se você olhar com atenção, descobrirá que o comprimento da linha muda dependendo da latitude da área que está visualizando.
Rcoup
1
Isso é válido apenas em uma latitude específica, como o @rcoup mencionado. Não apenas o comprimento da barra de escala varia, mas também a distância que ela representa. Para continuar este exemplo no zoom 13, a distância representada pela barra de escala é de 2 km no Cabo Norte (71 ° de latitude), 1 km em torno de 45 ° de latitude e 500 m no equador.
François
3

Com base em todas as informações fornecidas, criei uma função que fornece o melhor z aplicado a um mapa quando você deseja ter uma linha horizontal que representa N% do mapa exibido.

O mapa exibido é caracterizado por sua própria largura de pixel.

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
fonte
3

Ainda não posso adicionar um comentário, mas esta é uma possível fonte da resposta de Pete acima: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates

[...] observe que cada nível de zoom crescente é duas vezes maior nas direções xey. Portanto, cada nível de zoom mais alto contém quatro vezes mais resolução que o nível anterior. Por exemplo, no nível de zoom 1, o mapa consiste em 4 blocos de 256x256 pixels, resultando em um espaço de pixel de 512x512. No nível de zoom 19, cada pixel xey no mapa pode ser referenciado usando um valor entre 0 e 256 * 2 19

Ingo Haumann
fonte
1

Calculei as escalas para quatro níveis de zoom:

Nível de zoom | Escala 20 1: 500 19 1: 1000 18 1: 2000 17 1: 4000

Parece que a escala é dobrada à medida que o nível de zoom aumenta em um passo. Espero que a escala do nível de zoom 16 seja de 1: 8000 e assim por diante.

Pete
fonte
3
Bem-vindo ao GIS.SE! Você pode fornecer uma fonte ou como isso foi calculado?
Paul
0

Olá, acho que calculei que 1 pixel = 11,627 km em linha reta; sem levar em consideração o raio da terra. Aqui está o link do vídeo que explica como: https://www.youtube.com/watch?v=Y3cvTeiMJqE&feature=youtu.be . Espero que isso esclareça sua mente.

O Sr. Totardo
fonte
Isso não. O valor de um pixel depende da latitude.
John Powell
Oh, entendo, não é tão complexo assim.
O Sr. Totardo