leaflet.mousecoordinate
Version:
A Coordinate Mouse Viewer for Leaflet
110 lines (91 loc) • 4.54 kB
JavaScript
/*
Author : Johannes Rudolph
*/
/* globals L: true */
L.Control.mouseCoordinate = L.Control.extend({
options: {
gps: true,
utm: false,
utmref: false,
position: 'bottomright',
_sm_a: 6378137.0,
_sm_b: 6356752.314,
_sm_EccSquared: 6.69437999013e-03,
_UTMScaleFactor: 0.9996
},
onAdd: function(map){
this._map = map;
if(L.Browser.touch || L.Browser.msTouch)
return L.DomUtil.create('div');
var className = 'leaflet-control-mouseCoordinate';
var container = this._container = L.DomUtil.create('div',className);
this._gpsPositionContainer = L.DomUtil.create("div","gpsPos",container);
map.on("mousemove", this._update, this);
return container;
},
_update: function(e){
var lat = Math.round(e.latlng.lat * 100000) / 100000 ;
var lng = Math.round(e.latlng.lng * 100000) / 100000 ;
var gps = {lat: lat,lng: lng};
var content = "<table>";
if(this.options.gps){
content += "<tr><td>GPS</td><td>" + lat + "</td><td> " + lng +"</td></tr>";
var gpsMinuten = this._geo2geodeziminuten(gps);
content += "<tr><td></td><td class='coords'>"+ gpsMinuten.NS + " " + gpsMinuten.latgrad + "° "+ gpsMinuten.latminuten+"</td><td class='coords'> " + gpsMinuten.WE + " "+ gpsMinuten.lnggrad +"° "+ gpsMinuten.latminuten +"</td></tr>";
var gpsMinutenSekunden = this._geo2gradminutensekunden(gps);
content += "<tr><td></td><td>"+ gpsMinutenSekunden.NS + " " + gpsMinutenSekunden.latgrad + "° "+ gpsMinutenSekunden.latminuten + "′ "+ gpsMinutenSekunden.latsekunden+"″</td><td> " + gpsMinutenSekunden.WE + " "+ gpsMinutenSekunden.lnggrad +"° "+ gpsMinutenSekunden.latminuten + "′ "+ gpsMinutenSekunden.lngsekunden+"″</td></tr>";
}
if(this.options.utm){
var utm = UTM.fromLatLng(gps);
content += "<tr><td>UTM</td><td colspan='2'>"+utm.zone+" " +utm.x+" " +utm.y+"</td></tr>";
}
if(this.options.utmref){
var utmref = UTMREF.fromUTM(UTM.fromLatLng(gps));
content += "<tr><td>UTM REF</td><td colspan='2'>"+utmref.zone+" " +utmref.band+" " +utmref.x+" " +utmref.y+"</td></tr>";
}
if(this.options.qth){
var qth = QTH.fromLatLng(gps);
content += "<tr><td>QTH</td><td colspan='2'>"+qth+"</td></tr>";
}
if(this.options.nac){
var nac = NAC.fromLatLng(gps);
content += "<tr><td>NAC</td><td colspan='2'>"+nac.y+" "+ nac.x +"</td></tr>";
}
content += "</table>";
this._gpsPositionContainer.innerHTML = content;
},
_geo2geodeziminuten: function (gps){
var latgrad = parseInt(gps.lat);
var latminuten = Math.round( ((gps.lat - latgrad) * 60) * 10000 ) / 10000;
var lnggrad = parseInt(gps.lng);
var lngminuten = Math.round( ((gps.lng - lnggrad) * 60) * 10000 ) / 10000;
return this._AddNSEW({latgrad: latgrad, latminuten: latminuten, lnggrad: lnggrad, lngminuten: lngminuten});
},
_geo2gradminutensekunden: function (gps){
var latgrad = parseInt(gps.lat);
var latminuten = (gps.lat - latgrad) * 60;
var latsekunden = Math.round(((latminuten - parseInt(latminuten)) * 60) * 100) / 100;
latminuten = parseInt(latminuten);
var lnggrad = parseInt(gps.lng);
var lngminuten = (gps.lng - lnggrad) * 60;
var lngsekunden = Math.round(((lngminuten - parseInt(lngminuten)) * 60) * 100) /100;
lngminuten = parseInt(lngminuten);
return this._AddNSEW({latgrad: latgrad, latminuten: latminuten,latsekunden: latsekunden, lnggrad: lnggrad, lngminuten: lngminuten, lngsekunden: lngsekunden});
},
_AddNSEW: function (coord){
coord.NS = "N";
coord.WE = "E";
if(coord.latgrad < 0){
coord.latgrad = coord.latgrad * (-1);
coord.NS = "S";
}
if(coord.lnggrad < 0){
coord.lnggrad = coord.lnggrad * (-1);
coord.EW = "W";
}
return coord;
},
});
L.control.mouseCoordinate = function (options) {
return new L.Control.mouseCoordinate(options);
};