À quelles échelles de rapport les niveaux de zoom de Google Maps correspondent-ils?


83

Quelqu'un peut-il me fournir un lien (ou des détails) sur le rapport réel au niveau de zoom pour Google Maps?

par exemple, Google Maps niveau 13 = 1: 20000


1
Basé sur la première information que j'ai faite cette fonction, peut-être que quelqu'un pourrait l'utiliser! fonction setZoomLevel (metres) {//console.log ( Zoom level set meters: ${meters}); var zoomfactor = 1; si (mètres <1128) {zoomfactor = 15; } else if ((mètres> 1128) && (mètres <2256)) {zoomfactor = 14; } else if ((mètres> 2256) && (mètres <4513)) {zoomfactor = 13; } else if ((mètres> 4513) && (mètres <9027)) {zoomfactor = 12; } else if ((mètres> 9027) && (mètres <18055)) {zoomfactor = 11; } else if ((mètres> 18055) && (mètres <36111)) {zoomfactor = 10; } else if ((mètres> 36111) && (mètres <72
Friis1978

Réponses:


79

Si vous concevez une carte que vous envisagez de superposer sur Google Maps ou sur Virtual Earth et créez un schéma de tuilage, je pense que ce que vous recherchez sont les échelles pour chaque niveau de zoom, utilisez ce qui suit:

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

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


2
@ capdragon Merci. C'est une source bien connue (ESRI), mais cela nous laisse toujours à nous demander comment ils ont créé ces échelles.
whuber

4
Le rationnel est critique pour qui? Je ne vois aucune mention de rationnel dans la question. Je crois qu'il veut une réponse directe à sa question directe.
CaptDragon

4
@cap Sans raison, il est difficile voire impossible de distinguer une réponse correcte d'une réponse incorrecte. Sans aucune raison, on reste obligé de s'appuyer sur l'autorité du répondant. Je suis à peu près sûr que la raison pour laquelle les autres réponses de ce fil de discussion ont été votées et que la vôtre n’a pas grand-chose à voir avec la correction ou la franchise - votre vote est le plus autoritaire et le plus simple du groupe - mais a tout pour plaire faire avec le raisonnement fourni par les autres. BTW, je n'ai pas voté contre le vôtre.
whuber

3
Merci: +1. Vous êtes probablement des géographes ou des gourous de la télédétection. Je ne suis qu'un développeur de SIG qui souhaite aider le gars à trouver sa réponse. Un de mes collègues (type PHD, double major du MIT) donne une heure de lecture à chaque fois que je lui pose une question simple et me perd en cours de route. Je ne lui pose plus de questions (j'ai un master en sciences). Je comprends que d’autres personnes aiment se mettre dans la peau du rationnel, etc., mais beaucoup d’entre nous sont trop ignorants pour savoir de quoi ils parlent. IMHO ils étaient des réponses confuses qui ne répondent pas à sa question.
CaptDragon

10
Les échelles ont été choisies de manière à pouvoir être divisées de manière égale par des carreaux de trame situés en base 2 (par exemple, 128, 512 ...). Bing le fait de la même msdn.microsoft.com/en-us/library/bb259689.aspx
Garrett hall

45

J'ai trouvé cette réponse - écrite par un employé de Google - ce serait probablement la plus précise:

Ce ne sera pas précis, car la résolution d'une carte avec la projection de mercator (comme Google maps) dépend de la latitude.

Il est possible de calculer en utilisant cette formule:

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

Ceci est basé sur l'hypothèse que le rayon de la Terre est de 6378137m. Quelle est la valeur que nous utilisons :)

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

BTW - Je devine que:

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

Qu'est-ce qui correspond à votre formule? Le faire pour lat = 2,92 et zoom 13 19.08. Qu'est-ce que 19.08 quoi?
Rodrigo

4
@Rodrigo mètres par pixel
Justin Poehnelt le

3
Je peux témoigner que cette réponse est toujours correcte et très précise trois ans plus tard. Cela devrait être la réponse acceptée.
Jean

Est-ce que cela s'applique à x seulement ou aussi à y ? Google Maps via l'API Javascript utilise-t-il la même échelle pour les deux axes?
Vieux Geezer

@OldGeezer Oui, cela fonctionne dans toutes les directions. La distorsion linéaire en tout point dans Mercator est égale dans toutes les directions. C'est l'une des raisons pour lesquelles il est utilisé pour des cartes glissantes. Lorsque vous effectuez un zoom avant, vous obtenez une carte de distorsion raisonnablement faible. une fois que vous compensez l’échelle, c’est ce que fait cette réponse.
forgeron

30

Pour vous aider à comprendre les maths (pas un calcul précis, c'est juste pour l'illustration):

  • La tuile de carte Web de Google a une largeur de 256 pixels
  • Disons que l'écran de votre ordinateur a 100 pixels par pouce (PPI). Cela signifie que 256 pixels font environ 6,5 cm de long. Et c'est 0,065 m .

  • au niveau de zoom 0 , les 360 degrés de longitude sont visibles dans une seule mosaïque . Vous ne pouvez pas l'observer dans Google Maps, car il passe automatiquement au niveau de zoom 1, mais vous pouvez le voir sur la carte d'OpenStreetMap (il utilise le même schéma de tuilage).

  • 360 degrés sur l'équateur sont égaux à la circonférence de la Terre, 40 075,16 km, soit 40075160 m

  • divisez 40075160 m avec 0,065 m et vous obtiendrez 616313361 , qui correspond à une échelle de niveau de zoom 0 de l'équateur pour un écran d'ordinateur de 100 DPI

  • le fait est que l'échelle dépend du PPI de votre moniteur et de la latitude (en raison de la projection de Mercator)
  • pour le niveau de zoom 1, l'échelle est la moitié de celle du niveau de zoom 0
  • ...
  • pour le niveau de zoom N, l'échelle est la moitié de celle du niveau de zoom N-1

Consultez également: http://wiki.openstreetmap.org/wiki/FAQ#What_is_the_map_scale_for_a_particular_zoom_level_of_the_map.3F


3
L'échelle repose en réalité sur le DPI des images de carte générées. Les deux résolutions les plus utilisées sont 96DPI (c'est ce que sont les mosaïques de carte Google) et 72DPI.
Sasa Ivetic

Avec 96DPI, l'échelle 591657550.500000correspond au niveau 0 selon cette réponse. Mais selon @CaptDragon, c'est le niveau 1. Je devrais envisager de partir du niveau 1 pour calculer avec Google Maps?
Douglas Nassif Roma junior

17

Pas si simple. Étant donné la projection, la taille des pixels en mosaïque dépend de la latitude de la zone qui vous intéresse. Ensuite, en termes de transformation de la taille des pixels en mosaïque en taille de l'écran, elle dépend de l'écran et de la résolution d'affichage des données, de la dpi votre écran utilise.


2
C'est exact, mercator sphérique (projection Google) ne conserve pas la même échelle lorsque vous vous éloignez de l'équateur. Pour une excellente référence: l'article de Mapnik et les dénominateurs de l'échelle: trac.mapnik.org/wiki/ScaleAndPpi ainsi que la FAQ de l'OSM: wiki.openstreetmap.org/wiki/…
Maning

12

Réponse correcte faisant autorité:

591657550.500000 / 2^(level-1)

il vous donne le tableau ci-dessus, en entrant le niveau de zoom.

Essayez-le en direct sur jsfiddle.net

Comme la question ne concerne que Google MAPS, pas la Terre, le PO ne s'intéresse pas à la géométrie 3D. Les cartes Google sont déjà aplaties, donc 1 pixel correspond toujours à la même distance (en degrés, ce qui concerne une carte google), ici et dans l'écuateur comme dans les pôles.

A propos, avez-vous réalisé que quelque part à l'intérieur de la première rangée de pixels d'une carte du monde, l'échelle est de 1: 1?


5
Que représente le nombre 591657550.500000?
Justin Dearing

2
@Sergio pourquoi pas seulement 591657550.5?
Birowsky

2
"Le nombre provient de la résolution du pavé définie sur un multiple de 256 pixels et de la résolution de l'écran (96 dpi)" gis.stackexchange.com/a/111589/92997
juffel Le

Ne fonctionne pas - cela dépend de Latitude, mais votre formule ne l’est pas
Evgenii Vorobei

9

Il existe un tel tableau dans la documentation du système de tuiles Virtal Earth de Microsoft . Mais comme l'a dit GuillaumeC, les valeurs dépendent de la latitude et de la résolution de l'écran. Le tableau donne les valeurs mesurées à l'équateur et à une résolution d'écran de 96 dpi.

PS: Pas sûr, mais les niveaux de zoom de Microsoft pourraient être décalés de 1 par rapport aux niveaux de zoom de Google. Mais ils utilisent définitivement la même projection pour que les valeurs restent correctes pour Google.


7

Rayon @ Equateur 6.378.137 mètres exacts (WGS-84)

Circonférence à l'équateur = 40 075 017 mètres (2πr)

Le niveau de zoom 24 utilise 2 pixels de la puissance (32 294 967 296) par circonférence.

Circonférence équatoriale / 2 32 = 0,009330692 mètres par pixel

Unité à la latitude = (cosinus de latitude) X (unité à l'équateur)

Le niveau de zoom double chaque incrément.

1 pied (International) = 0,3048 mètre

Modifier

Eh bien, ce n’est pas vraiment une question légitime pour commencer. Les ratios d'échelle sont relatifs aux documents imprimés et non aux écrans d'ordinateur. Pour pouvoir utiliser ces images avec précision, vous devez connaître la dimension de chaque pixel, puis redimensionner l’image en fonction de la superposition.

Il y a 15 à 20 ans, quelqu'un a pris le WGS-84 comme base de données. (note dans un post précédent, quelqu'un a utilisé une valeur de 40 075 160 que j'ai déjà vue dans Wikipedia à quelques endroits et c'est incorrect. La valeur correcte est 40 075 017

Ils ont ensuite pris cela et divisé par un entier 32 bits. C'est un choix logique car il offre une précision globale d'environ un centimètre, ce qui est suffisant pour l'imagerie aérienne. Les entiers 32 bits sont également efficaces pour stocker et traiter.

Pourquoi ce niveau 24 a-t-il été choisi? Je ne sais pas, cependant, comme quelqu'un d'autre l'a expliqué, 0 vous ramène à une tuile de 256 pixels pour la Terre.

Maintenant, pour un exemple d'utilisation des données ci-dessus. Disons que j'ai une image au niveau de zoom 20 (zoomée comme ils vous le permettent actuellement). Prenez 0.009330692 (zoom 24 à l'équateur) doublez-le pour le zoom 23, encore pour le zoom 22, encore pour le zoom 21 et une dernière fois pour le zoom 20 Vous devriez maintenant avoir 0.149231071.

Supposons maintenant que notre image se trouve à la latitude 45. Prenez le cosinus de celui-ci (0,707106781) et multipliez-le par notre 0,149231071 pour obtenir 0,105564729 mètres. C'est la longueur et la hauteur d'un pixel d'une image à une latitude de 45 au niveau de zoom 20. Si vous capturez une image de 1 000 x 1 000 pixels de cette zone, la dimension est de 105,56 mètres carrés. Si vous voulez que les pieds divisent que 0.3048

En ce qui concerne les sources, je suis devenu ingénieur inversé il y a environ 5 ans à partir de diverses informations et de la documentation trouvées sur le Web, y compris les sites d’aide à la cartographie de Google et de MS.

J'ai utilisé cette centaine de fois et je l'ai superposé à des données d'enquête sur le terrain et cela a toujours été correct. Comparez-le aux tables affichées ici et les chiffres vont correspondre.


2
Je ne sais pas comment cela répond à la question.
Devdatta Tengshe

Je suis d'accord avec @Devdatta, pourriez-vous s'il vous plaît fournir une source et un contexte.
Aaron

Pas sûr si ces commentaires étaient avant ou après la modification, mais j'ai utilisé cette réponse et cela fonctionne très bien
bjnortier

4

Je viens de faire quelques calculs et d’obtenir les résultats suivants:

Google Maps affiche une règle de 1 km (en bas à gauche de la carte) d'une longueur de 90 pixels, au niveau de zoom 13. Cela signifie que:

En supposant que la résolution de l'écran soit de 96 dpi ou 36 dpcm, au niveau de zoom 13, nous avons 0,4 km (sur 36/90) en 1cm, ce qui donne une échelle de carte de 1/40 000 pour un écran de 96 dpi.

Pour différentes opérations à l'écran, le mieux est de prendre 90px comme base, car tous les chiffres seront arrondis à tous les niveaux de zoom, c'est-à-dire

  • Niveau de zoom 12: 2 km en 90 pixels
  • Niveau de zoom 11: 4 km en 90 pixels
  • Niveau de zoom 10: 8 km en 90 pixels

etc.

Notez qu’il s’agit d’une approximation qui devrait fonctionner plus ou moins bien sur de plus petites échelles que sur de grandes.

(Et Google aime les chiffres ronds à la fin ...)


1
Si vous regardez de plus près, vous découvrirez que la longueur de la ligne change en fonction de la latitude de la zone que vous visualisez.
coupure

1
Ceci n'est valable qu'à une latitude spécifique, comme l'a mentionné @rcoup. Non seulement la longueur de la barre d'échelle varie, mais la distance qu'elle représente aussi. Pour continuer cet exemple au zoom 13, la distance représentée par la barre d'échelle est de 2 km au nord du Cap (71 ° de latitude), 1 km autour de 45 ° de latitude et 500 m à l'équateur.
François

3

Sur la base de toutes les informations fournies, j'ai construit une fonction qui donne le meilleur z appliqué à une carte lorsque vous souhaitez avoir une ligne horizontale qui représente N% de la carte affichée.

La carte affichée est caractérisée par sa propre largeur en pixels.

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

Je ne peux pas encore ajouter de commentaire, mais voici une source possible de la réponse de Pete ci-dessus: https://developers.google.com/maps/documentation/javascript/maptypes#MapCoordinates

[...] notez que chaque niveau de zoom croissant est deux fois plus grand dans les directions x et y. Par conséquent, chaque niveau de zoom supérieur contient quatre fois plus de résolution que le niveau précédent. Par exemple, au niveau de zoom 1, la carte se compose de 4 mosaïques de 256 x 256 pixels, générant un espace de pixels de 512 x 512. Au niveau de zoom 19, chaque pixel x et y de la carte peut être référencé à l'aide d'une valeur comprise entre 0 et 256 * 2 19


1

J'ai calculé les échelles pour quatre niveaux de zoom:

Niveau de zoom | Échelle 20 1: 500 19 1: 1000 18 1: 2000 17 1: 4000

Il semble que l’échelle soit doublée lorsque le niveau de zoom augmente d’un cran. J'espère donc que l'échelle du niveau de zoom 16 sera de 1: 8000, etc.


3
Bienvenue sur GIS.SE! Pouvez-vous s'il vous plaît fournir une source ou comment cela a-t-il été calculé?
Paul

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.