view map.js @ 170:fb98e644b80c gmap2

Fix coordinates display.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 11 Mar 2014 20:19:58 +0200
parents 21cf84dcae73
children b874aae3e75f
line wrap: on
line source

// $Id: map.js 2404 2009-12-24 20:01:32Z jeskko $

var pmap;
var pmapCanvas;
var proj;

var pmapTileSize = 256;
var pmapTileOrig = pmapTileSize / 2.0;
var pmapTilePxPerDeg = pmapTileSize / 360.0;
var pmapTilePxPerRad = pmapTileSize / (2.0 * Math.PI);


function pmapLatLngToMapCoord(latLng, zoom)
{
  msiny = Math.sin((latLng.lat() * Math.PI) / 180.0);

  px = latLng.lng() * pmapTilePxPerDeg;
  py = 0.5 * Math.log((1 + msiny) / (1 - msiny)) * - pmapTilePxPerRad;
  numTiles = 1 << zoom;
  return new google.maps.Point(px * numTiles, py * numTiles);
}


function CanvasProjectionOverlay() {}
CanvasProjectionOverlay.prototype = new google.maps.OverlayView();
CanvasProjectionOverlay.prototype.constructor = CanvasProjectionOverlay;
CanvasProjectionOverlay.prototype.onAdd = function(){};
CanvasProjectionOverlay.prototype.draw = function(){};
CanvasProjectionOverlay.prototype.onRemove = function(){};


function pmapInitializeMap()
{
  var pmapBatMap = new google.maps.ImageMapType(
  {
    getTileUrl: function(coord, zoom)
    {
      return "tiles/"+ zoom +"/"+ coord.y +"/"+ coord.x +".png";
    },

    tileSize: new google.maps.Size(256, 256),
    maxZoom: 10,
    minZoom: 3,
    radius: 1738000,
    name: 'BatMap'
  });

  pmap = new google.maps.Map(document.getElementById("map"),
  {
    zoom: 3,
    center: new google.maps.LatLng(-15, 10),

    streetViewControl: false,
    draggableCursor: 'crosshair',
    draggingCursor: 'pointer',
    mapTypeControl: false,
    scaleControl: false,
    rotateControl: false,
    overviewMapControl: false,
  });

  pmap.mapTypes.set('BatMap', pmapBatMap);
  pmap.setMapTypeId('BatMap');

  pmapCanvas = new CanvasProjectionOverlay();
  pmapCanvas.setMap(pmap);

  google.maps.event.addListener(pmap, "mousemove", pmapCoordinateListener);

  pmapInitializeIcons();
  pmapInitializeMarkers();
  pmapInitializeNav();
}


//
// Listener for updating coordinates display
//
function pmapCoordinateListener(point)
{
  var p = pmapLatLngToMapCoord(point.latLng, 7);
  var tx = Math.round((p.x + 1) / 2);
  var ty = Math.round((p.y + 1) / 2);

  var cx = tx;
  var cy = ty;
  var cont = "Deep Sea";
  
  for (i = 0; i < pmapContinents.length; i++)
  {
    var c = pmapContinents[i];
    if (c != null && tx > c[1] && tx < c[3] && ty > c[2] && ty < c[4])
    {
      cont = c[0];
      cx = tx - c[1];
      cy = ty - c[2];
      break;
    }
  }

  document.getElementById("xcoord").innerHTML = cx;
  document.getElementById("ycoord").innerHTML = cy;
  document.getElementById("continent").innerHTML = cont;
}