google maps projection, scale denomiator

by Leo

HTML

<script src="https://maps.googleapis.com/maps/api/js?v=3&amp;sensor=false&amp;libraries=geometry,spherical"></script>
<div id="zoom">...</div>
<div id="scale1">...</div>
<div id="scale2">...</div>
<div id="delta">...</div>
<div id="map_canvas" style="height:600px;width:800px;"></div>

JavaScript

var map;

    var TILE_SIZE = 256;
    // From Google Groups: 
    var circumference = 40075040;
    
    // From OSM = 40041472:
    //var circumference = 2 * 6372798.2 * Math.PI;
    
    //Standard:
    var DPI = 96;
    
    //OSM: 0.3mm/pixel (about 85.2 American DPI):
    //var DPI = 82.5;
    
    var g = google.maps;
    var round = Math.round;
    var abs = Math.abs;

    var opts = {
        center: new g.LatLng(54.355995, 48.4317237),
        zoom: 13,
        mapTypeId: g.MapTypeId.ROADMAP,
        scaleControl: true
    }

    map = new g.Map(document.getElementById("map_canvas"), opts);
    
    g.event.addListener(map, 'idle', function () {
        var zoomElement = document.getElementById('zoom');
        var scaleElement1 = document.getElementById('scale1');
        var scaleElement2 = document.getElementById('scale2');
        var deltaElement = document.getElementById('delta');

        var mInPx1 = map.getMapScale1();
        var mInPx2 = map.getMapScale2();
        var scale1 = round(mInPx1 * DPI * (100 / 2.54));
        var scale2 = round(mInPx2 * DPI * (100 / 2.54));
 
        var scaleControlWidth = $(
            "div.gm-style-cc:has('span'):contains(' км') span" + ", " + 
            "div.gm-style-cc:has('span'):contains(' km') span" + ", " +
            "div.gm-style-cc:has('span'):contains(' м') span" + ", " + 
            "div.gm-style-cc:has('span'):contains(' m') span" 
        ).next().width();
        var ruler1Width = ( scaleControlWidth ?  round(mInPx1 * scaleControlWidth) : 0) + " (m/"+scaleControlWidth+"px)";
        var ruler2Width = ( scaleControlWidth ?  round(mInPx2 * scaleControlWidth) : 0) + " (m/"+scaleControlWidth+"px)";

        zoomElement.innerText = "ZoomLevel |  " + map.getZoom();
        scaleElement1.innerText = "Scale1 |  "  + "1 / " + scale1 + " (" + mInPx1.toFixed(3) + " m/px)" + ", ruler: " + ruler1Width;
        scaleElement2.innerText = "Scale2 |  "  + "1 / " + scale2 + " (" + mInPx2.toFixed(3) + " m/px)"...