User Tools

Site Tools


projects:voyc:zoom_level

This is an old revision of the document!


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

on window resize

Google keep center and scale constant field of view falls where it may

Voyc keep center and field of view constant scale slides along with halfwid

We start with the window size. Do we really?

What does the user expect when he changes the size of his window?

User can change the size of his window. Do we change our scale map so that

Ways of representing scale scale k zoom level

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

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

w - width h - height at zoom level 0

      // scale = number of pixels to display the radius of the globe
      var halfwid = Math.round(Math.min(w, h) / 2)
      this.scale = {}
      this.scale.min = halfwid * voyc.defaultScale.minScaleFactor   // small number, zoomed out
      var maxscale = voyc.geosketch.options.maxscale || voyc.defaultScale.maxScaleFactor
      this.scale.max = halfwid * maxscale                           // large number, zoomed in
      this.scale.factor = scalefactor
      this.scale.now = Math.round(halfwid * scalefactor)

halfwid - the smaller of width or height, divided by 2

scale

min = halfwid * minfactor
max = halfwid * maxfactor
now = halfwid * scalefactor        

factor

min
max
factor
      

voyc.defaultScale = {

      minScaleFactor: .5,  // small number, zoomed out
      maxScaleFactor: 6,   // large number, zoomed in
      scaleStepPct: .14,
      spinStep: 6,

}

level pow2 scale
0 1
1 2

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

on resize keep the ctrCo change the ctrPt keep the zoom change the fov

on zoom change the zoom keep the ctrCo keep the ctrPt keep the fov

projects/voyc/zoom_level.1676711139.txt.gz · Last modified: 2023/02/18 04:05 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