Show mouse position (Lat/Long, GridRef)

This Page is locked
Modified: 2007/02/10 02:04 by ViaVE Visitor
Name: moveHandler Description: Display mouse position above map - shows lat/long & grid reference

Parameters:

Usage: To see where the mouse is while it moves over the map
	var map = null;
	var myWin = null;
	var lat = null;
	var ling = null;
	var zoom = null;
	var latc = null;
	var bc = null;
	var xgrid = null;
	var ygrid = null;
// Add Firefox patch - if the browser is Firefox get the version number
var ffv = 0;
var ffn = "Firefox/"
var ffp = navigator.userAgent.indexOf(ffn);
if (ffp != -1) ffv = parseFloat(navigator.userAgent.substring(ffp + ffn.length));
// If we're using Firefox 1.5 or above override the Virtual Earth drawing functions to use SVG
if (ffv >= 1.5) {
  Msn.Drawing.Graphic.CreateGraphic=function(f,b) { return new Msn.Drawing.SVGGraphic(f,b) }
}
		var params = new Object();
		params.latitude = 52;
		params.longitude = -4;
		params.zoomlevel = 2;
	
		map = new VEMap('myMap');
		map.LoadMap(new VELatLong(params.latitude,params.longitude),params.zoomlevel,'r',false);
		
    if (document.all) {
      //msg = 'Internet Explorer';
      } else {
      if (document.getElementById) {
        //msg = 'Firefox';
        } else {
        //msg = 'Netscape';
        document.captureEvents(Event,MOUSEMOVE)
        }
      }
    document.onmousemove=moveHandler



Having loaded the map (above) then the onmousemove handler (below, with associated functions) will place the mouse position on the map in Latitude/Longitude as well as GB Ordanance Survey grid reference.

See http://www.svrsig.org/cgi-bin/gemap.cgi?lat=52&long=-4&zoom=3 for an example.

Code:
    function moveHandler(evt) {
    if (document.all) {
      mx=window.event.clientX + document.body.scrollLeft
      my=window.event.clientY + document.body.scrollTop
      } else {
      if (document.getElementById) {
        mx=evt.clientX + document.body.scrollLeft
        my=evt.clientY + document.body.scrollTop
        } else {
        mx=evt.pageX + window.pageXOffset
        my=evt.pageY + window.pageYOffset
        }
      }
    if ((mx>50) && (mx<50+900) && (my>110) && (my<110+400)) {
      elat=map.PixelToLatLong(mx-50,my-110).Latitude
      elong=map.PixelToLatLong(mx-50,my-110).Longitude
      ezoom=map.GetZoomLevel()
		document.getElementById("info").innerHTML =
			'Mouse: Latitude = ' + 
			latmin(elat) + 
			', Longitude = ' +
			lingmin(elong) + 
			', Zoom=' + 
			ezoom +
			', Grid ref: ' +
			gridref(elong,elat);
      } else {
      elat=map.GetCenter().Latitude
      elong=map.GetCenter().Longitude
      ezoom=map.GetZoomLevel()
		document.getElementById("info").innerHTML =
			'Centre: Latitude = ' + 
			latmin(elat) +
			', Longitude = ' +
			lingmin(elong) +
			', Zoom=' + 
			ezoom +
			', Grid ref: ' +
			gridref(elong,elat);
      }
    }

function xgrd(xling,ylat) { var fe = 4000.00; var k0 = 0.009996013; var ep2 = 0.00671534; var e2 = 0.00667054; var nu = null; with (Math) {nu = 6377563.396/sqrt(1-e2*sin(ylat*3.14159/180)*sin(ylat*3.14159/180))}; var t = null; with (Math) {t = tan(3.14159*ylat/180)*tan(3.14159*ylat/180)}; var c = null; with (Math) {c = ep2*cos(ylat*3.14159/180)*cos(ylat*3.14159/180)}; var a = null; with (Math) {a = 3.14159/180*(xling+2)*cos(ylat*3.14159/180)}; var m0 = 5429228.6; var m = null; with (Math) {m = 6377563.396*(3.14159/180*ylat*(1-e2/4-3*e2*e2/64-5*e2*e2*e2/256)-sin(2*3.14159/180*ylat)*(3*e2/8+3*e2*e2/32+45*e2*e2*e2/1024)+sin(4*3.14159/180*ylat)*(15*e2*e2/256+45*e2*e2*e2/1024)-sin(6*3.14159/180*ylat)*(35*e2*e2*e2/3072))}; return fe+k0*nu*(a+(1-t+c)*a*a*a/6+(5-18*t+t*t+72*c-58*ep2)*a*a*a*a*a/120); } function ygrd(xling,ylat) { var fn = -1000.00; var k0 = 0.009996013; var ep2 = 0.00671534; var e2 = 0.00667054; var nu = null; with (Math) {nu = 6377563.396/sqrt(1-e2*sin(ylat*3.14159/180)*sin(ylat*3.14159/180))}; var t = null; with (Math) {t = tan(3.14159*ylat/180)*tan(3.14159*ylat/180)}; var c = null; with (Math) {c = ep2*cos(ylat*3.14159/180)*cos(ylat*3.14159/180)}; var a = null; with (Math) {a = 3.14159/180*(xling+2)*cos(ylat*3.14159/180)}; var m0 = 5429228.6; var m = null; with (Math) {m = 6377563.396*(3.14159/180*ylat*(1-e2/4-3*e2*e2/64-5*e2*e2*e2/256)-sin(2*3.14159/180*ylat)*(3*e2/8+3*e2*e2/32+45*e2*e2*e2/1024)+sin(4*3.14159/180*ylat)*(15*e2*e2/256+45*e2*e2*e2/1024)-sin(6*3.14159/180*ylat)*(35*e2*e2*e2/3072))}; var bc = null; with (Math) {bc = fn+k0*(m-m0+nu*tan(3.14159/180*ylat)*(a*a/2+(5-t+9*c+4*c*c)*a*a*a*a/24+(61-58*t+t*t+600*c-330*ep2)*a*a*a*a*a*a/720))}; return bc; } function gridref(xxl,yyl) { ygrid=ygrd(xxl,yyl); xgrid=xgrd(xxl,yyl); return gref(xgrid,ygrid); } function gref(xg,yg) { if (xg<0 || xg>7000 || yg<0 || yg>11000) { return "?? ??? ???" } char1="HJKLMNOPQRST"; char2="ABCDEFGHJKLMNOPQRSTUVWXYZ"; return char1.charAt(10+(xg/5000)-5*(yg/5000-(yg%5000)/5000)) + char2.charAt((xg%5000)/1000+5*(4-(yg%5000)/1000+((yg%5000)%1000)/1000)) + padnum(xg%1000) + padnum(yg%1000) + "."; }

function padnum(xin) { if (xin>99) { return " "+parseInt(xin); } if (xin>9) { return " 0"+parseInt(xin); } return " 00"+parseInt(xin); }

function latmin(cin) { var ain = 0; var bin = 0; if (cin>0) { ain = parseInt(60*cin) % 60; bin = parseInt(36000*cin) % 600; return " "+parseInt(cin)+"°"+parseInt(ain)+"'"+parseInt(bin/10)+'.'+parseInt((bin) % 10)+'"N'; } cin = -cin; ain = parseInt(60*cin) % 60; bin = parseInt(36000*cin) % 600; return " "+parseInt(cin)+"°"+parseInt(ain)+"'"+parseInt(bin/10)+'.'+parseInt((bin) % 10)+'"S'; }

function lingmin(din) { var ain = 0; var bin = 0; if (din>0) { ain = parseInt(60*din) % 60; bin = parseInt(36000*din) % 600; return " "+parseInt(din)+"°"+parseInt(ain)+"'"+parseInt(bin/10)+'.'+parseInt((bin) % 10)+'"E'; } din = -din; ain = parseInt(60*din) % 60; bin = parseInt(36000*din) % 600; return " "+parseInt(din)+"°"+parseInt(ain)+"'"+parseInt(bin/10)+'.'+parseInt((bin) % 10)+'"W'; }

function qlat(gx,gy) { var xfac=(gx-3184)/(5049-3184); var yfac=(gy-1416)/(4196-1416); var flat=51.166+yfac*2.5; var fling=-3.166+xfac*2.667; var lling=0; do { lling=fling+(gx-xgrd(fling,flat))/(5049-3184)*2.667 flat=flat+(gy-ygrd(fling,flat))/(4196-1416)*2.5 fling=lling } while ((gx-xgrd(fling,flat))>0.2 || (gy-ygrd(fling,flat))>0.2 || (gx-xgrd(fling,flat))<-0.2 || (gy-ygrd(fling,flat))<-0.2) return flat; } function qling(gx,gy) { var xfac=(gx-3184)/(5049-3184); var yfac=(gy-1416)/(4196-1416); var flat=51.166+yfac*2.5; var fling=-3.166+xfac*2.667; var lling=0; do { lling=fling+(gx-xgrd(fling,flat))/(5049-3184)*2.667; flat=flat+(gy-ygrd(fling,flat))/(4196-1416)*2.5; fling=lling; } while ((gx-xgrd(fling,flat))>0.2 || (gy-ygrd(fling,flat))>0.2 || (gx-xgrd(fling,flat))<-0.2 || (gy-ygrd(fling,flat))<-0.2) return fling; }