SmartAudio/package/luci/luci-mod-freifunk/htdocs/luci-static/resources/osm.js

131 lines
3.5 KiB
JavaScript
Raw Normal View History

2018-07-13 01:31:50 +00:00
var map;
var layer_mapnik;
var layer_tah;
var layer_markers;
var PI = Math.PI;
var latfield = '';
var lonfield = '';
var latfield_id='';
var lonfield_id='';
var centerlon = 10;
var centerlat = 52;
var zoom = 6;
function lon2merc(lon) {
return 20037508.34 * lon / 180;
}
function lat2merc(lat) {
lat = Math.log(Math.tan( (90 + lat) * PI / 360)) / PI;
return 20037508.34 * lat;
}
function merc2lon(lon) {
return lon*180/20037508.34;
};
function merc2lat(lat) {
return Math.atan(Math.exp(lat*PI/20037508.34))*360/PI-90;
};
OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
defaultHandlerOptions: {
'single': true,
'double': false,
'pixelTolerance': 0,
'stopSingle': false,
'stopDouble': false
},
initialize: function(options) {
this.handlerOptions = OpenLayers.Util.extend(
{}, this.defaultHandlerOptions
);
OpenLayers.Control.prototype.initialize.apply(
this, arguments
);
this.handler = new OpenLayers.Handler.Click(
this, {
'click': this.trigger
}, this.handlerOptions
);
},
trigger: function(e) {
var lonlat = map.getLonLatFromViewPortPx(e.xy);
lat=merc2lat(lonlat.lat);
lon=merc2lon(lonlat.lon);
if(parent.document.getElementById(latfield_id)==null){
latfield=document.getElementById('osmlat');
}else{
latfield=parent.document.getElementById(latfield_id);
}
if(parent.document.getElementById(lonfield_id)==null){
lonfield=document.getElementById('osmlon');
}else{
lonfield=parent.document.getElementById(lonfield_id);
}
latfield.value = lat;
lonfield.value = lon;
}
});
function init(){
var field = window.name.substring(0, window.name.lastIndexOf("."));
if(parent.document.getElementById(field+".latfield")!=null){
latfield_id = parent.document.getElementById(field+".latfield").value;
document.getElementById('osm').style.display="none";
}
if(parent.document.getElementById(field+".lonfield")!=null){
lonfield_id = parent.document.getElementById(field+".lonfield").value;
}
if(parent.document.getElementById(field+".centerlat")!=null){
centerlat =parseFloat(parent.document.getElementById(field+".centerlat").value);
}
if(parent.document.getElementById(field+".centerlon")!=null){
centerlon = parseFloat(parent.document.getElementById(field+".centerlon").value);
}
if(parent.document.getElementById(field+".zoom")!=null){
zoom = parseFloat(parent.document.getElementById(field+".zoom").value);
}
}
function drawmap() {
OpenLayers.Lang.setCode('de');
mapdiv=document.getElementById('map');
mapdiv.style.height=window.innerHeight+"px";
mapdiv.style.width=window.innerWidth+"px";
map = new OpenLayers.Map('map', {
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326"),
controls: [
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar()],
maxExtent:
new OpenLayers.Bounds(-20037508.34,-20037508.34, 20037508.34, 20037508.34),
numZoomLevels: 18,
maxResolution: 156543,
units: 'meters'
});
layer_mapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
map.addLayers([layer_mapnik]);
var y =lat2merc(centerlat);
var x =lon2merc(centerlon);
map.setCenter(new OpenLayers.LonLat(x, y), zoom);
// Check for geolocation support
if(navigator.geolocation){
navigator.geolocation.getCurrentPosition(function(position){
var y =lat2merc(position.coords.latitude);
var x =lon2merc(position.coords.longitude);
map.setCenter(new OpenLayers.LonLat(x, y), '17');
});
}
var click = new OpenLayers.Control.Click();
map.addControl(click);
click.activate();
}