summaryrefslogtreecommitdiffhomepage
path: root/modules/freifunk/htdocs/luci-static/resources/osm.js
diff options
context:
space:
mode:
Diffstat (limited to 'modules/freifunk/htdocs/luci-static/resources/osm.js')
-rw-r--r--modules/freifunk/htdocs/luci-static/resources/osm.js130
1 files changed, 130 insertions, 0 deletions
diff --git a/modules/freifunk/htdocs/luci-static/resources/osm.js b/modules/freifunk/htdocs/luci-static/resources/osm.js
new file mode 100644
index 000000000..4138ef6ad
--- /dev/null
+++ b/modules/freifunk/htdocs/luci-static/resources/osm.js
@@ -0,0 +1,130 @@
+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.MouseDefaults(),
+ 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();
+}