static/pngtile/map.js
author Tero Marttila <terom@paivola.fi>
Mon, 15 Sep 2014 00:15:51 +0300
changeset 143 22efa9fe73c8
parent 142 9b316e83e9e3
child 145 51908b0cc3a1
permissions -rw-r--r--
pngtile: fix map_bounds
142
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
var map_config;
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
var map;
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
function map_init (_config) {
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
    map_config = _config;
143
22efa9fe73c8 pngtile: fix map_bounds
Tero Marttila <terom@paivola.fi>
parents: 142
diff changeset
     6
    
22efa9fe73c8 pngtile: fix map_bounds
Tero Marttila <terom@paivola.fi>
parents: 142
diff changeset
     7
    // pixel coordinates
142
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
    var bounds = L.latLngBounds(
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
        L.latLng(-map_config.image_height, 0),
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
        L.latLng(0, +map_config.image_width)
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
    );
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
    
143
22efa9fe73c8 pngtile: fix map_bounds
Tero Marttila <terom@paivola.fi>
parents: 142
diff changeset
    13
    // in zoom-scaled coordinates
22efa9fe73c8 pngtile: fix map_bounds
Tero Marttila <terom@paivola.fi>
parents: 142
diff changeset
    14
    var map_bounds = [
22efa9fe73c8 pngtile: fix map_bounds
Tero Marttila <terom@paivola.fi>
parents: 142
diff changeset
    15
        [ -(map_config.image_height >> map_config.tile_zoom), 0 ],
22efa9fe73c8 pngtile: fix map_bounds
Tero Marttila <terom@paivola.fi>
parents: 142
diff changeset
    16
        [ 0, +(map_config.image_width >> map_config.tile_zoom) ], 
22efa9fe73c8 pngtile: fix map_bounds
Tero Marttila <terom@paivola.fi>
parents: 142
diff changeset
    17
    ];
22efa9fe73c8 pngtile: fix map_bounds
Tero Marttila <terom@paivola.fi>
parents: 142
diff changeset
    18
142
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
    map = L.map('map', {
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
        crs: L              .CRS.Simple,
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
        minZoom:            0,
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
        maxZoom:            map_config.tile_zoom,
143
22efa9fe73c8 pngtile: fix map_bounds
Tero Marttila <terom@paivola.fi>
parents: 142
diff changeset
    23
        maxBounds:          map_bounds
142
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
    });
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
    map.on('move', map_move);
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
    L.tileLayer(map_config.tile_url, {
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
        name:               map_config.tile_name,
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
        minZoom:            0,
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
        maxZoom:            map_config.tile_zoom,
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
        tileSize:           map_config.tile_size,
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
        continuousWorld:    true,
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
        noWrap:             true,
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
        zoomReverse:        true,
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
        bounds:             bounds
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
    }).addTo(map);
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
    // set position
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
    var x = bounds.getCenter().lng;
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
    var y = -bounds.getCenter().lat;
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
    var z = 0;
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
    if (document.location.hash) {
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
        // parse x:y:z tuple
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
        var pt = document.location.hash.substr(1).split(":");
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
        
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    48
        // unpack    
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
        if (pt.length) x = parseInt(pt.shift()) || x;
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
        if (pt.length) y = parseInt(pt.shift()) || y;
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
        if (pt.length) z = parseInt(pt.shift()) || z;
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
    }
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
    map_center(x, y, z);
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
}
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
function map_move () {
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
    var map_center = map.getCenter();
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
    var map_zoom = map.getZoom();
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
    var x = (+map_center.lng) << map_config.tile_zoom;
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
    var y = (-map_center.lat) << map_config.tile_zoom;
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
    var z = map_config.tile_zoom - map_zoom;
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
    document.location.hash = x + ":" + y + ":" + z;
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
}
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
/*
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
 * Position map based on pngtile coordinates
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    70
 */
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
function map_center (x, y, z) {
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    72
    // translate to lat/lng
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
    // leaflet seems to base its latlng coordinates on the max zoom level
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    74
    var map_center = [
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
        -(y >> map_config.tile_zoom),
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
        +(x >> map_config.tile_zoom),
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
    ];
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
    // reversed zoom
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
    var map_zoom = map_config.tile_zoom - z;
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
    
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    82
    map.setView(map_center, map_zoom);
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    83
}
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84