Caractéristiques de la mise à l'échelle de la carte WebGL

Nous avons publié un éditeur de style . En savoir plus sur la façon de l' utiliser, vous pouvez configurer la carte dans les tâches de service peut être lu sur vc.ru . Sur Habré, nous voulons parler du concept StyleZoom, que nous utilisons également dans l'éditeur de style.



Ci-dessous la coupe - une courte histoire sur les niveaux de zoom: pourquoi, dans la forme standard, ils ne conviennent pas aux grandes surfaces et comment l'échelle affecte le chargement des tuiles et l'apparence de la carte.









Le niveau de zoom



Pour indiquer l'échelle dans la carte 2GIS WebGL, comme dans beaucoup d'autres cartes, un nombre est utilisé - niveau de zoom ou simplement zoom. Un zoom de zéro correspond à une échelle de carte qui s'adapte au monde entier dans un carré de 256 × 256 px.





Carte du monde au zoom = 0



Une augmentation du zoom d'une unité correspond à un étirement de la carte deux fois. Au premier zoom, le monde entier sera de 256 × 2 = 512 px. Sur le quatrième, nous obtenons la taille 256 × 2 × 2 × 2 × 2 = 4096 px.



Ce système vous permet de désigner une gamme d'échelles avec des nombres faciles à comprendre. Par exemple, zoom = 11 correspond à environ une grande ville à l'écran, zoom = 19 vous permet de voir en détail les bâtiments et les passages entre eux.



Projection de Mercator



Les cartes 2GIS utilisent la projection cartographique Mercator. Une projection cartographique est un moyen d'afficher une surface sphérique de la Terre sur une carte plane.



Comme un plan et une balle ne sont pas la même chose, toute projection cartographique déforme la forme ou la taille des objets. Dans la projection de Mercator, les objets situés à des latitudes élevées sur la carte apparaissent plus grands que les objets à l'équateur. Par conséquent, sur de telles cartes, le Groenland a la taille de l'Afrique, même si en fait sa superficie est 14 fois inférieure à celle de l'Afrique. Ici, vous pouvez voir comment la projection déforme la taille des pays.





Si la Russie se rapproche de l'équateur, sa taille sur la carte est considérablement réduite



L'étirement des objets est proportionnel à 1 / cos (lat), où lat est la latitude de l'objet. De cette formule, il s'ensuit que les objets à la latitude de Saint-Pétersbourg (lat = 60 °) sur la carte seront étirés deux fois. Et les objets aux pôles Nord ou Sud (lat = 90 °) s'étireront indéfiniment. C'est pourquoi les pôles ne sont jamais dessinés sur les cartes dans la projection Mercator - tout le nord et le sud de ≈85 ° de latitude y sont coupés.



Vous pouvez en savoir plus sur la projection Mercator dans ce matériel visuel et fascinant .



Problèmes de zoom et de projection Mercator



Le problème principal des zooms découle des propriétés de la projection de Mercator: le même niveau de zoom à différentes latitudes correspond à différentes échelles de carte réelles.



Comparons les captures d'écran de la carte au 14e zoom à Mourmansk (latitude 69 °) et Tachkent (latitude 41 °).





15e zoom à Mourmansk





15e zoom à Tachkent Vous



pouvez voir à quel point la taille de la maison diffère. A Mourmansk, ils sont grands, à Tachkent, la carte est peu profonde.



Lors de la mise en forme de la carte, nous voulons lui donner un aspect et une sensation spécifiques. Pour ce faire, nous définissons la largeur des routes en pixels en fonction du zoom ou du zoom à partir duquel nous commençons à afficher les maisons. Les styles écrits pour une latitude seront très différents sur une autre. La signification qui leur est inhérente sera déformée, car les zooms signifieront une échelle réelle différente.



Décision



Pour résoudre ce problème, nous avons introduit le concept de styleZoom, qui peut différer du zoom habituel.

Zoom normal StyleZoom
Définit la mise à l'échelle des objets Détermine les tuiles à charger
Écrit dans l'url Détermine à quelle échelle appliquer les styles
Utilisé dans les méthodes habituelles getZoom / setZoom Utilisé dans les méthodes getStyleZoom / setStyleZoom
Correspond aux tuiles bitmap


styleZoom est calculé à partir du zoom et de la latitude à l'aide de la formule suivante: styleZoom = zoom + log2 (1 / (2 * cos (lat)).



Les propriétés styleZoom suivantes découlent de la formule:

  • À 60 ° de latitude styleZoom = zoom. Puisque les styles ont été initialement écrits pour Novosibirsk et Moscou, nous avons décidé de prendre cette latitude comme base.
  • Aux latitudes <60 ° styleZoom <zoom. À l'équateur, styleZoom = zoom - 1.
  • Aux latitudes> 60 ° styleZoom> zoom.


Voyons maintenant à quoi ressembleront Tachkent et Mourmansk avec styleZoom = 15.





Tachkent, styleZoom = 15 (zoom ≈ 15,59)





Mourmansk, styleZoom = 15 (zoom ≈ 14,53)



On voit clairement que styleZoom correspond à l'échelle réelle de la carte quelle que soit la latitude: visuellement ne diffèrent pas par la taille, la carte est la même dans deux villes différentes.



Limites



Le mécanisme de correction présente des inconvénients qui apparaissent dans deux scénarios d'utilisation de la carte.



zoom <9

Avec de petits zooms, lorsque le monde entier ou la plus grande partie de celui-ci est visible à l'écran, faire glisser la carte de haut en bas entraîne de grands changements de latitude et, par conséquent, styleZoom.



Lors du glisser-déposer, cela peut entraîner le chargement de nouvelles tuiles, le changement de style, l'apparition ou la disparition d'objets, etc. Pour éviter cet effet, à zoom <9, la correction est désactivée et styleZoom est réglé sur zoom.



lat> 60 °

Aux latitudes très élevées, styleZoom devient un zoom beaucoup plus grand. Puisque styleZoom est responsable des tuiles à charger, il peut s'avérer, par exemple, qu'au 14e zoom, nous chargerons et afficherons les tuiles du 16e zoom. La 16ème vignette de zoom a une superficie 16 fois plus petite que la 14ème vignette de zoom. Et si généralement ≈30 tuiles tombent sur l'écran, alors dans ce cas, il y en aura 480. Et le nombre de tuiles affecte grandement les performances. Afin de ne pas charger la carte vidéo à ces latitudes, à lat> 60 °, la correction est désactivée et styleZoom est également réglé sur zoom.



Au lieu de la sortie



Connectez l'API de nos cartes WebGL et  concevez des cartes pour les tâches de votre service, sans vous soucier de leur apparence dans différentes villes.



Un merci spécial à Lesha Fedosov pour le message. Lyokha, bonjour!



All Articles