User Tools

Site Tools


projects:voyc:zoom_level

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
projects:voyc:zoom_level [2023/02/13 07:58] – created jhagstrandprojects:voyc:zoom_level [2023/02/23 18:01] (current) – [Zoom and Scale] jhagstrand
Line 1: Line 1:
-[[Projects]]:[[voyc]]+[[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)$$ 
 + 
 + 
 + 
 + 
 + 
 + 
  
-====== Zoom Level ====== 
  
 | level | pow2 | scale |  | level | pow2 | scale | 
Line 42: Line 76:
 width = height = 845 pixels width = height = 845 pixels
  
-We start with the window size Do we really?+https://liorsinai.github.io/mathematics/2020/08/27/secant-mercator.html
  
-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+==== 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
  
-Ways of representing scale +When you enlarge the window, you could show a wider area, or show more detail.
-scale +
-+
-zoom level+
  
 +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
  
-ratio 1/cm on the map : how many cm on the earth's surface+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 k - number of pixels to display the radius of the globe
  
-w - width +https://docs.google.com/spreadsheets/d/1ke6Qn_dxM6pKPYjXO0UKiwGXSUHdPTeeGnZkYoXL9wA/edit#gid=0 
-h - height + 
-at zoom level 0 +realistic distances 
-halfwid the smaller of width or height+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:
 +  * 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
  
-        // 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) 
-} 
projects/voyc/zoom_level.1676293116.txt.gz · Last modified: 2023/02/13 07:58 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