static/pngtile/map.js
author Tero Marttila <terom@paivola.fi>
Mon, 15 Sep 2014 00:10:43 +0300
changeset 142 9b316e83e9e3
child 143 22efa9fe73c8
permissions -rw-r--r--
pngtile.image: split out javascript and rename js/css to map
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;
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
    var bounds = L.latLngBounds(
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
        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
     9
        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
    10
    );
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
    map = L.map('map', {
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
        crs: L              .CRS.Simple,
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
        minZoom:            0,
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
        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
    16
        maxBounds:          bounds
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
    });
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
    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
    20
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
    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
    22
        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
    23
        minZoom:            0,
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
        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
    25
        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
    26
        continuousWorld:    true,
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
        noWrap:             true,
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
        zoomReverse:        true,
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
        bounds:             bounds
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
    }).addTo(map);
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
    // set position
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
    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
    34
    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
    35
    var z = 0;
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
    if (document.location.hash) {
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
        // 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
    39
        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
    40
        
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
        // unpack    
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
        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
    43
        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
    44
        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
    45
    }
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
    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
    48
}
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
function map_move () {
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
    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
    52
    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
    53
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
    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
    55
    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
    56
    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
    57
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
    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
    59
}
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
/*
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
 * 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
    63
 */
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
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
    65
    // translate to lat/lng
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
    // 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
    67
    var map_center = [
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
        -(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
    69
        +(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
    70
    ];
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    72
    // reversed zoom
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
    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
    74
    
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
    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
    76
}
9b316e83e9e3 pngtile.image: split out javascript and rename js/css to map
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77