¿A qué escalas de proporción corresponden los niveles de zoom de Google Maps?

83

¿Alguien puede proporcionarme un enlace (o algunos detalles) sobre la proporción real de las cifras de "nivel de zoom" para Google Maps?

por ejemplo, Google Maps Nivel 13 = 1: 20000

mlo55
fuente
1
Basado en la primera información que hice esta función, ¡tal vez alguien podría usarla! función 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
Friis1978

Respuestas:

79

Si está diseñando un mapa que planea superponer sobre google maps o virtual earth y está creando un esquema de mosaico, entonces creo que lo que está buscando son las escalas para cada nivel 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

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

CaptDragon
fuente
2
@capdragon Gracias. Esa es una fuente bien conocida (ESRI) pero nos deja todavía preguntándonos cómo se les ocurrió esta escala.
whuber
44
¿Racional es crítico para quién? No veo ninguna mención de racional en la pregunta. Creo que quiere una respuesta directa a su pregunta directa.
CaptDragon
44
@cap Sin una razón, es difícil o imposible distinguir una respuesta correcta de una incorrecta. Sin una razón, uno tiene que depender de la autoridad del respondedor. Estoy bastante seguro de que la razón por la que las otras respuestas en este hilo se votan y la suya no tiene poco que ver con la corrección o la franqueza: la suya es la más autorizada y directa del grupo, sino que tiene todo para hacer con el razonamiento proporcionado por los demás. Por cierto, no he rechazado el tuyo.
whuber
3
Gracias: +1. Ustedes son probablemente geógrafos o gurús de la teledetección. Soy simplemente un desarrollador de SIG que quiere ayudar al tipo a alcanzar su respuesta. Un colega mío (tipo PHD, doble MIT mayor) entra en una conferencia de una hora cada vez que le hago una pregunta simple y me pierde en el camino. Ya no le hago más preguntas (tengo una maestría en ciencias). Entiendo que a otras personas les gusta meterse en la carne de lo racional, etc., pero muchos de nosotros somos demasiado ignorantes para saber de qué están hablando. En mi humilde opinión eran respuestas confusas que no responden a su pregunta.
CaptDragon
10
Se eligieron las escalas para que puedan dividirse equitativamente por mosaicos de trama que se encuentran en la base 2 (por ejemplo, 128, 512 ...). Bing lo hace de manera similar msdn.microsoft.com/en-us/library/bb259689.aspx
Garrett Hall
45

Encontré esta respuesta, escrita por un empleado de Google, esta probablemente sería la más precisa:

Esto no será exacto, porque la resolución de un mapa con la proyección de mercator (como los mapas de Google) depende de la latitud.

Es posible calcular usando esta fórmula:

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

Esto se basa en la suposición de que el radio de la Tierra es de 6378137 m. ¿Cuál es el valor que usamos :)

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

Por cierto, supongo que:

'latLng.lat()' = map.getCenter.lat()
'zoom' = map.getZoom()
gilad mayani
fuente
¿QUÉ equivale a tu fórmula? Haciéndolo para lat = 2.92 y zoom 13 obtuve 19.08. ¿Qué es 19.08 qué?
Rodrigo
44
@Rodrigo metros por píxel
Justin Poehnelt
3
Puedo testificar que esta respuesta sigue siendo correcta y muy precisa tres años después. Esta debería ser la respuesta aceptada.
John
¿Esto se aplica solo a x o también a y ? ¿Google Maps a través de la API de Javascript utiliza la misma escala para ambos ejes?
Old Geezer
@OldGeezer Sí, funciona en todas las direcciones. La distorsión lineal en cualquier punto de Mercator es igual en todas las direcciones. Esa es una de las razones por las que se usa para mapas resbaladizos. Cuando acercas el zoom obtienes un mapa de distorsión razonablemente baja. una vez que compensa la escala, que es lo que hace esta respuesta.
smithkm
30

Para ayudarlo a comprender las matemáticas (no es un cálculo preciso, es solo para ilustración):

  • El mosaico del mapa web de Google tiene 256 píxeles de ancho
  • Digamos que el monitor de su computadora tiene 100 píxeles por pulgada (PPI). Eso significa que 256 píxeles tienen aproximadamente 6.5 cm de longitud. Y eso es 0.065 m .

  • en el nivel de zoom 0 , los 360 grados completos de longitud son visibles en un solo mosaico . No puede observar esto en Google Maps, ya que se mueve automáticamente al nivel de zoom 1, pero puede verlo en el mapa de OpenStreetMap (usa el mismo esquema de mosaico).

  • 360 grados en el ecuador son iguales a la circunferencia de la Tierra, 40,075.16 km, que es 40075160 m

  • dividir 40075160 m con 0,065 m y obtendrá 616 313 361 , que es una escala de nivel de zoom 0 en el ecuador de un monitor de ordenador con 100 DPI

  • así que el punto es que la escala depende del PPI de su monitor y de la latitud (debido a la proyección de Mercator)
  • para el nivel de zoom 1, la escala es la mitad de la del nivel de zoom 0
  • ...
  • para el nivel de zoom N, la escala es la mitad de la del nivel de zoom N-1

Consulte también: http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F

Igor Brejc
fuente
3
La escala en realidad se basa en el DPI de las imágenes de mapa generadas. Las dos resoluciones más utilizadas son 96DPI (eso es lo que son los mosaicos de mapas de Google) y 72DPI.
Sasa Ivetic
Con 96DPI, la escala 591657550.500000es el Nivel 0 de acuerdo con esta respuesta. Pero según @CaptDragon es el Nivel 1. ¿Debería considerar comenzar desde el nivel 1 para calcular con Google Maps?
Douglas Nassif Roma Junior
17

No tan fácil. Dada la proyección, el tamaño de los píxeles del mosaico depende de la latitud del área que le interesa. Luego, en términos de transformación del tamaño del píxel del mosaico en el tamaño del píxel de la pantalla, depende de la pantalla y de la resolución que se muestren los datos, dpi que está usando su pantalla.

GuillaumeC
fuente
2
Eso es correcto, mercator esférico (proyección de google) no conserva la misma escala a medida que te alejas del ecuador. Para una excelente referencia: Escala de Mapnik y artículo de denominadores de escala: trac.mapnik.org/wiki/ScaleAndPpi y también las preguntas frecuentes de OSM: wiki.openstreetmap.org/wiki/…
maning
12

Respuesta correcta autoritaria directa:

591657550.500000 / 2^(level-1)

le da la tabla de arriba, ingresando el nivel de zoom.

Pruébalo en vivo en jsfiddle.net

Debido a que la pregunta es solo para Google MAPS, no para EARTH, al OP no le importa la geometría 3D. Los mapas de Google ya están aplanados, por lo que 1 píxel es siempre la misma distancia (en GRADOS, que es lo que concierne a un mapa de Google), aquí y en el ecuador como en los polos.

Por cierto, ¿Te diste cuenta de que en algún lugar dentro de la primera fila de píxeles del mapa de un mundo, la escala es 1: 1?

Sergio
fuente
55
¿Qué representa el número 591657550.500000?
Justin Dearing
2
@ Sergio, ¿por qué no solo 591657550.5?
Birowsky
2
"El número proviene de la resolución del mosaico establecida en un múltiplo de 256 píxeles y de la resolución de la pantalla (96 ppp)" gis.stackexchange.com/a/111589/92997
juffel
No funciona, depende de Latitude, pero su fórmula no lo es
Evgenii Vorobei
9

Existe una tabla de este tipo en la documentación del Sistema Virtal Earth Tile de Microsoft . Pero como dijo GuillaumeC, los valores dependen de la latitud y de la resolución de la pantalla. La tabla proporciona valores medidos en el ecuador y con una resolución de pantalla de 96 ppp.

PD: No estoy seguro de eso, pero los niveles de zoom de Microsoft podrían cambiar en 1 en comparación con los niveles de zoom de Google. Pero definitivamente usan la misma proyección para que los valores sigan siendo correctos para Google.

Nombre
fuente
7

Radio @ ecuador 6.378.137 metros exactos (WGS-84)

Circunferencia en el ecuador = 40,075,017 metros (2πr)

El nivel de zoom 24 usa de 2 a 32 píxeles de potencia (4,294,967,296) en la circunferencia.

Circunferencia ecuatorial / 2 32 = .009330692 metros por píxel

Unidad en latitud = (Coseno de latitud) X (Unidad en el ecuador)

El nivel de zoom duplica cada incremento.

1 pie (internacional) = 0.3048 metros

Editar

Bueno, no es realmente una pregunta legítima para empezar. Las proporciones de escala son relativas a documentos impresos, no a pantallas de computadora. Lo que necesita para que estas imágenes se utilicen con precisión es conocer la dimensión de cada píxel y luego escalar la imagen de acuerdo con la superposición.

Entonces, hace 15-20 años, alguien tomó WGS-84 como datos base. (tenga en cuenta que en una publicación anterior alguien usó un valor de 40,075,160. He visto esto en Wikipedia en algunos lugares y es incorrecto. El valor correcto es 40,075,017

Luego tomaron eso y lo dividieron por un entero de 32 bits. Esta es una opción lógica, ya que proporciona una precisión global de aproximadamente un centímetro, lo que es suficiente para las imágenes aéreas. Los enteros de 32 bits también son eficientes para almacenar y procesar.

No sé por qué se eligió este nivel 24, sin embargo, ya que alguien más aquí resolvió 0, lo lleva a un mosaico de 256 píxeles para la tierra.

Ahora para un ejemplo de cómo usar los datos anteriores. Digamos que tengo una imagen en el nivel de zoom 20 (con el zoom que actualmente le permiten obtener) Tome 0.009330692 (Zoom 24 en el ecuador) duplíquelo para el zoom 23, nuevamente para el zoom 22, nuevamente para el zoom 21 y una última vez para el zoom 20 Ahora debería tener 0.149231071.

Ahora digamos que nuestra imagen está en la latitud 45. Tome el coseno de eso (0.707106781) y multiplíquelo por nuestro 0.149231071 y le dará 0.105564729 metros. Esa es la longitud y la altura de un píxel de una imagen en la latitud 45 en el nivel de zoom 20. Si captura en pantalla una imagen de 1000 x 1000 píxeles de esa área, la dimensión es de 105.56 metros cuadrados. Si quieres pies divide eso 0.3048

En cuanto a las fuentes, hace aproximadamente 5 años, hice un ingeniero inverso esencial a partir de varios datos y documentación que encontré en la web, incluidos los sitios de soporte de mapeo de Google y MS.

He utilizado este tiempo cientos de veces y superponiéndolo con datos de encuestas de campo y siempre ha sido correcto. Compárelo con cualquiera de las tablas publicadas aquí y los números coincidirán.

DavidG
fuente
2
No estoy seguro de cómo esto responde la pregunta.
Devdatta Tengshe
Estoy de acuerdo con @Devdatta, ¿podría proporcionar una fuente y algo de contexto?
Aaron
No estoy seguro de si estos comentarios fueron antes o después de la edición, pero utilicé esta respuesta y funciona muy bien
bjnortier
4

Solo hice algunos cálculos y obtuve los siguientes resultados:

Google Maps muestra una regla de 1 km (parte inferior izquierda del mapa) que tiene una longitud de 90 píxeles, con un nivel de zoom 13. Lo que significa lo siguiente:

Suponiendo que la resolución de la pantalla es de 96 ppp o 36 dpcm, en el nivel de zoom 13 tenemos 0,4 km (de 36/90) en 1 cm, lo que produce una escala de mapa de 1: 40,000 para una pantalla de 96 ppp.

Para varias operaciones en la pantalla, lo mejor es tomar 90px como base, ya que todos los números serán redondos en todos los niveles de zoom, es decir

  • Nivel de zoom 12: 2 km en 90 px
  • Nivel de zoom 11: 4 km en 90 px
  • Nivel de zoom 10: 8 km en 90 px

y así.

Tenga en cuenta que esta es una aproximación que debería funcionar más o menos bien en escalas más pequeñas en lugar de grandes.

(Y a Google le gustan los números redondos al final ...)

mojuba
fuente
1
Si observa detenidamente, descubrirá que la longitud de la línea cambia según la latitud del área que está viendo.
rcoup
1
Esto es válido solo en una latitud específica, como se menciona en @rcoup. No solo varía la longitud de la barra de escala, sino también la distancia que representa. Para continuar este ejemplo en el zoom 13, la distancia representada por la barra de escala es de 2 km en el Cabo Norte (71 ° de latitud), 1 km alrededor de 45 ° de latitud y 500 m en el ecuador.
François
3

En función de toda la información proporcionada, he creado una función que ofrece la mejor z aplicada a un mapa cuando desea tener una línea horizontal que represente el N% del mapa mostrado.

El mapa mostrado se caracteriza por su propio ancho de píxel.

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

Todavía no puedo agregar un comentario, pero esta es una posible fuente de la respuesta de Pete anterior: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates

[...] tenga en cuenta que cada nivel de zoom creciente es dos veces mayor en las direcciones x e y. Por lo tanto, cada nivel de zoom más alto contiene cuatro veces más resolución que el nivel anterior. Por ejemplo, en el nivel de zoom 1, el mapa consta de 4 mosaicos de 256x256 píxeles, lo que da como resultado un espacio de píxeles de 512x512. En el nivel de zoom 19, se puede hacer referencia a cada píxel x e y del mapa utilizando un valor entre 0 y 256 * 2 19

Ingo Haumann
fuente
1

Calculé las escalas para cuatro niveles de zoom:

Nivel de zoom | Escala 20 1: 500 19 1: 1000 18 1: 2000 17 1: 4000

Parece que la escala se duplica a medida que el nivel de zoom aumenta en un paso. Entonces, espero que la escala para el nivel de zoom 16 sea 1: 8000 y así sucesivamente.

Pete
fuente
3
Bienvenido a GIS.SE! ¿Puede proporcionar una fuente o cómo se calculó?
Paul
0

Hola, creo que he calculado que 1 píxel = 11.627 km en línea recta; sin tener en cuenta el radio de la tierra. Aquí el enlace del video que explica cómo: https://www.youtube.com/watch?v=Y3cvTeiMJqE&feature=youtu.be . Espero que te aclare la mente.

El señor totardo
fuente
No es asi. El valor de un píxel depende de la latitud.
John Powell
Oh, ya veo, no es ese complejo en el que entré.
El Sr. Totardo