User Tools

Site Tools


projects:voyc:zoom_level

projects:voyc

Zoom and Scale

Google, ESRI and other systems use a fixed system.

zoom level is a number from 0 to 20

scale is the ratio of distance on the map vs distance on the earth

Zoom level and scale are inversely related.

Zoom changes the field of view.

Scale changes the level of detail.

Zoom Level 0

At zoom level 0, scale is 1:591657527.591555.

On the mercator map, the equator is 256 pixels long.

Scale is calculated using 256 pixels at 96 pixels per inch (ppi), or 37.79527559 pixels per cm (ppcm).

On the globe, we see only half of the equator and its length is described by:

$$256 / (PI / 2)$$

level pow2 scale
0 1
1 2

number of tiles

Scale

Scale is a ratio of distances on the map to distances on the earth's surface.

  • A scale of 1:100 means 1 cm on the map represents 1 meter on the earth.
  • A scale of 1:100,000 means 1 cm on the map represents 1 km on the earth
  • A scale of 1:80,000,000 allows us to display the earth as a 10 cm globe on screen.

k

The radius of the earth in pixels.

Zoom Level

At level 0, the entire earth is displayed in one tile. At level 1, the width and height are both doubled, meaning 4 tiles are required. At level 2, width and height are both doubled again, requiring 16 tiles.

k

At zoom level 0, if the browser window is 900 pixels square, and k is 450, the globe will exactly fit in the window.

The mercator projection is how much larger than the orthographic?

Orthographic Diameter of the globe is 500 pixels. Radius = k = 250

Mercator radius = k * PI/2 = 392.5 width = height = 845 pixels

https://liorsinai.github.io/mathematics/2020/08/27/secant-mercator.html

Resize

what to do on window resize? two choices:

  • keep map scale constant, ala Google Maps
  • keep zoom level constant, ala Google Earth and voyc

field of view (FOV) follows the zoom level

scale determines the level of detail possible

When you enlarge the window, you could show a wider area, or show more detail.

map drawing is done from the center outward with three factors: rotate, scale, translate

  • rotate - center coordinate [lng,lat]
  • translate - center pixel [x,y]
  • scale - zoom level

window dimensions provide a viewport into the map after it is drawn

user actions

  • rotate - spin the globe, or slide the mercator back and forth
  • zoom - zoom in and out
  • resize the window - this translates the center pixel, and may optionally change the zoom
  • startup - do all three: rotate, zoom, resize
  • restart - maintain settings from localStorage

the size of the map at zoom level 0

  • fixed at radius 256 pixels at 96 pixels per inch
  • based on the window size

on resize, we have two options

  • keep the zoom constant so the field of view (FOV) changes
  • change the zoom to keep the field of view constant
    • in this case, the proportion between window size and zoom level 0 is lost
    • voyc current, the next user zoom will be wonky because it will reset to the new screen size

proportion between zoom level and window size is maintained by “k”

k is the radius of the globe in pixels, and is set to half the window square / pi

at zoom level zero the full mercator square just fits in the window. the globe is pi/2 smaller.

Ways of representing scale

  • scale
  • k
  • zoom level

ratio 1cm on the map : how many cm on the earth's surface

k - number of pixels to display the radius of the globe

https://docs.google.com/spreadsheets/d/1ke6Qn_dxM6pKPYjXO0UKiwGXSUHdPTeeGnZkYoXL9wA/edit#gid=0

realistic distances mercator: distance along the equator orthographic: distance at the window centerpoint

the orthographic globe

6371 km earth radius
12742 km earth diameter
1274200000 cm earth diameter
arcgis level 0 -> scale 1:591657528
1274200000 cm / 591657528 = 2.15
ergo, earth diameter displayed in 2.15 cm
mercator square displayed in ? cm

what determines scale?

  • orthographic: k
  • equirectangular: ?
  • mercator: pow(2,zlevel)

halfwid * factor = k = “scale” only the factor is saved in localStorage on resize, factor stays the same, scale changes factor = scale / 2

scale = factor * halfwid factor= scale / halfwid

google

zoom level 0 thru 20

zoom from whole earth to india

  • voyc: 16 levels
  • google: 3 levels

voyc k is based on window size google zoom level is based on 0 - 20

scalefactor chosen by user zoom k = windowsize / 2 * scalefactor pxlPerDgr = k * 4 / 360

change orthographic and equirectangular to use google zoom level, and make them match up

projects/voyc/zoom_level.txt · Last modified: 2023/02/23 18:01 by jhagstrand

Except where otherwise noted, content on this wiki is licensed under the following license: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki