Alguém pode me fornecer um link (ou alguns detalhes) sobre a proporção real para números de “nível de zoom” para o Google Maps?
por exemplo Google Maps Nível 13 = 1: 20000
Comentários
- Com base nas primeiras informações que fiz esta função, talvez alguém possa usá-la! function setZoomLevel (metros) {//console.log(
Zoom level set meters: ${meters}
); var zoomfactor = 1; if (metros < 1128) {zoomfactor = 15; } else if ((metros > 1128) & & (metros < 2256)) {zoomfactor = 14; } else if ((metros > 2256) & & (metros < 4513)) {zoomfactor = 13; } else if ((metros > 4513) & & (metros < 9027)) {zoomfactor = 12; } else if ((metros > 9027) & & (metros < 18055)) {zoomfactor = 11; } else if ((metros > 18055) & & (metros < 36111)) {zoomfactor = 10; } else if ((metros > 36111) & & (metros < 72
Resposta
Se você estiver projetando um mapa, pretende sobrepor no google maps ou na terra virtual e criando um esquema de blocos, 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
Comentários
- @capdragon Obrigado. Isso ‘ é uma fonte bem conhecida (ESRI), mas ainda nos deixa imaginando como eles surgiram com essas escalas.
- Racional é crítico para quem? Não ‘ não vejo qualquer menção de racional na pergunta. Acredito que ele deseja uma resposta direta à sua pergunta direta.
- @ cap Sem motivo, é ‘ difícil ou impossível de distinguir uma resposta correta de uma incorreta. Sem uma razão, fica-se tendo que confiar na autoridade de quem responde. Eu ‘ tenho certeza de que o motivo pelo 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 – o seu é o mais confiável e direto do grupo – mas, ao contrário, tem tudo a ver com o raciocínio fornecido pelos outros. A propósito, eu não ‘ t votei contra o seu.
- Obrigado: +1. Vocês provavelmente são geógrafos ou gurus de sensoriamento remoto. Eu ‘ sou apenas um desenvolvedor de GIS que quer ajudar o cara a chegar em sua resposta. Um colega meu (tipo PHD, especialização dupla no MIT) dá uma aula de uma hora toda vez que faço uma pergunta simples e me perde no meio do caminho. Não ‘ não faço mais perguntas a ele (tenho mestrado em ciências). Eu entendo que outras pessoas gostam de entrar na carne do racional e assim por diante, mas muitos de nós somos muito ignorantes para saber do que estão falando. IMHO, eles eram respostas confusas que não ‘ não respondem à sua pergunta.
- As escalas foram escolhidas de forma que possam ser divididas uniformemente por blocos raster que estão na base 2 , (por exemplo, 128, 512 …). Bing faz isso de forma semelhante msdn.microsoft.com/en-us/library/bb259689.aspx
Resposta
Encontrei esta resposta – escrita por um funcionário do Google – provavelmente é a mais precisa:
Isso não será preciso, porque a resolução de um mapa com a projeção do 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()
Comentários
- O QUE é igual à sua fórmula? Fazendo isso para lat = 2,92 e zoom 13, obtive 19,08. O que é 19.08 o quê?
- @Rodrigo metros por pixel
- Posso testemunhar que esta resposta ainda é correta e muito precisa três anos depois. Esta deve ser a resposta aceita.
- Isso se aplica a x apenas ou também a y ? O Google Maps via Javascript API usa a mesma escala para os dois eixos?
- @OldGeezer Sim, funciona em todas as direções. A distorção linear em qualquer ponto de Mercator é igual em todas as direções. Esse ‘ é um dos motivos pelos quais ele é usado para mapas escorregadios. Quando você aumenta o zoom, obtém um mapa de distorção razoavelmente baixo. depois de compensar a escala, que é o que esta resposta faz.
Resposta
Para ajudá-lo a entender a matemática (não é um cálculo preciso, é apenas para ilustração):
- O bloco do mapa da web do Google tem 256 pixels de largura
-
digamos que seu monitor de computador tem 100 pixels por polegada (PPI). Isso significa que 256 pixels têm cerca de 6,5 cm de comprimento. E isso “s 0,065 m .
-
em nível de zoom 0 , todos 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 você pode vê-lo no mapa do OpenStreetMap (ele usa o mesmo esquema de blocos ).
-
360 graus no Equador são iguais à circunferência da Terra, 40.075,16 km, que é 40075160 m
-
divide 40075160 m com 0,065 m e você “obterá 616313361 , que é uma escala de nível de zoom 0 no Equador para um monitor de computador com 100 DPI
- então a questão é que a escala depende do PPI do seu monitor e da latitude (por causa da projeção de Mercator)
- para o nível de zoom 1, o a escala é a metade daquela do nível de zoom 0
- …
- para o nível de zoom N, a escala é um meio f 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_level_of_the_map.3F
Comentários
- A escala realmente depende do DPI das imagens de mapa geradas. As duas resoluções mais comumente usadas são 96DPI (que ‘ o que são os blocos de mapas do Google) e 72DPI.
- 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 começar a partir do nível 1 para calcular com o Google Maps?
Resposta
Não é tão fácil. Dada a projeção, o tamanho dos pixels do ladrilho depende da latitude da área em que você está interessado. Então, em termos de transformar o tamanho do pixel do ladrilho no tamanho do pixel da tela, depende da tela e da resolução em que os dados são exibidos, o dpi que sua tela está usando.
Comentários
- Correto, mercator esférico (projeção do Google) não ‘ t preservar a escala igual conforme você se afasta do equador. Para algumas referências excelentes: Mapnik ‘ s Escala e denominadores de escala artigo: trac.mapnik.org/wiki/ScaleAndPpi e também OSM ‘ s FAQ: wiki.openstreetmap.org/ wiki / …
Resposta
Simples resposta correta confiável:
591657550.500000 / 2^(level-1)
ele fornece a tabela acima, inserindo o nível de zoom.
Experimente ao vivo em jsfiddle.net
Como a questão é apenas para o Google MAPS, não para o EARTH, o OP não se preocupa com a geometria 3D. Os mapas do Google JÁ estão achatados, então 1 pixel é sempre a mesma distância (em GRAUS, que é o que diz respeito a um mapa do google), aqui e no equator como nos pólos.
A propósito, você percebe que em algum lugar dentro da primeira linha de pixel de um mapa-múndi, a escala é 1: 1?
Comentários
- O que significa o número 591657550.500000 representa?
- @Sergio por que não apenas 591657550,5?
- ” O número vem da resolução do bloco sendo definida em um múltiplo de 256 pixels e da resolução da tela (96dpi) ” gis.stackexchange.com/a/111589/ 92997
- Não funciona – depende do Latitude, mas sua fórmula não é
Resposta
Essa tabela existe na documentação do Virtal Earth Tile System da Microsoft . Mas, como disse GuillaumeC, os valores dependem do latitude e em a resolução da tela. A tabela fornece valores medidos no Equador e em uma resolução de tela de 96 dpi.
PS: Não tenho certeza disso, mas os níveis de zoom da Microsoft podem ser deslocados em 1 em comparação aos níveis de zoom em Google.Mas eles definitivamente usam a mesma projeção para que os valores permaneçam corretos para o Google.
Resposta
Radius @ Equator 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 elevado à potência de 32 (4.294.967.296) pixels 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 a 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 a documentos impressos, não a telas de computador. O que você precisa para que essas imagens sejam usadas com alguma precisão é saber a dimensão de cada pixel e dimensionar a imagem de acordo com o que quer que esteja sendo sobreposto a ela.
Então, há 15-20 anos, alguém fez o WGS- 84 como dados de base. (observe em uma postagem anterior que alguém usou um valor de 40.075.160. Eu vi isso na Wikipedia alguns lugares e está incorreto. O valor correto é 40.075.017
Eles então pegaram isso e dividiram por um total Inteiro de 32 bits. Esta é uma escolha lógica, pois produz uma 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 este nível 24 foi escolhido Não sei, no entanto, já que alguém aqui calculou 0 reduz para um bloco de 256 pixels para a Terra.
Agora, um exemplo de como usar os dados acima. Digamos que eu tenha uma imagem no nível de zoom 20 (com o zoom que eles permitem que você obtenha) Tome 0,009330692 (zoom 24 no equador) dobre para o zoom 23, novamente para o zoom 22, novamente para o zoom 21 e uma última vez para o zoom 20. Você deve agora ter 0,149231071 .
Agora, digamos que nossa imagem esteja na latitude 45. Pegue o cosseno disso (0,707106781) e multiplique-o por nosso 0,149231071 e você terá 0,105564729 metros s. Esse é o comprimento e a altura de um pixel de uma imagem na latitude 45 no nível de zoom 20. Se você capturar uma imagem de 1000 x 1000 pixels dessa área, a dimensão terá 105,56 metros quadrados. Se você quiser pés, divida isso 0,3048
Quanto às fontes, eu fiz um engenheiro reverso essencial cerca de 5 anos atrás de várias informações e documentação que encontrei na web, incluindo Google e sites de suporte de mapeamento MS.
Eu usei centenas de vezes e sobrepondo-os com dados de levantamento de campo, e sempre estiveram corretos. Compare com qualquer uma das tabelas postadas aqui e os números corresponderão.
Comentários
- I ‘ não tenho certeza de como isso responde à pergunta.
- Eu concordo com @Devdatta, você poderia fornecer uma fonte e algum contexto.
- Não tenho certeza se esses comentários foram antes ou depois de editar, mas usei esta resposta e ela funciona muito bem
Resposta
Apenas fiz alguns cálculos e obtive o seguinte resultados:
O Google Maps mostra uma régua de 1 km (parte inferior esquerda do mapa) com 90 pixels de comprimento, no nível de zoom 13. O que significa o seguinte:
Assumindo a resolução da tela é 96 dpi ou 36 dpcm, no nível de zoom 13 temos 0,4 km (de 36/90) em 1 cm, o que produz uma escala de mapa de 1: 40.000 para uma tela de 96 dpi.
Para várias operações na tela o melhor é usar 90px como base, pois todos os números serão redondos em todos os níveis de zoom, ou seja,
- Nível de zoom 12: 2km em 90px
- Nível de zoom l 11: 4km em 90px
- Nível de zoom 10: 8km em 90px
e assim por diante.
Observe que esta é uma aproximação que deve funcionam mais ou menos bem em escalas menores do que em escalas grandes.
(E o Google gosta de números redondos no final …)
Comentários
- Se você olhar de perto, ‘ descobrirá que o comprimento da linha muda dependendo da latitude da área que você ‘ re visualizando.
- Isso é válido apenas em uma latitude específica, como @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 é 2 km em North Cape (71 ° latitude), 1 km em torno de 45 ° latitude e 500 m no equator.
Resposta
Com base em todas as informações fornecidas , Eu construí 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); }
Resposta
Não posso adicionar um comentário ainda, mas esta é uma possível fonte da resposta de Pete” acima: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates
[…] observe que cada aumento do nível de zoom é duas vezes maior nas direções xey. Portanto, cada nível de zoom superior contém quatro vezes mais resolução do que o nível anterior. Por exemplo, no nível de zoom 1, o mapa consiste em 4 blocos de 256×256 pixels, resultando em um espaço de pixel de 512×512. No nível de zoom 19, cada pixel xey no mapa pode ser referenciado usando um valor entre 0 e 256 * 2 19
Resposta
Eu 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 é duplicada conforme o nível de zoom aumenta em um passo. Portanto, espero que a escala para o nível de zoom 16 seja 1: 8000 e assim por diante.
Comentários
- Bem-vindo ao GIS.SE! Você pode fornecer uma fonte ou como isso foi calculado?
Resposta
Olá, acho que calculei isso 1 pixel = 11,627km em linha reta; não levando 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 clareie sua mente.
Comentários
- Não faz. O valor de um pixel depende da latitude.
- Ah, entendo, não tão complexo em que entrei.