]> scripts.mit.edu Git - www/ikiwiki.git/blobdiff - underlays/osm/ikiwiki/osm.js
make layers completely customizable
[www/ikiwiki.git] / underlays / osm / ikiwiki / osm.js
index d7e3d53f42e7c832423d21ea6b82b1305ddec22d..9547ee29c3e1fdf1677a531226f41d1ee8d9472f 100644 (file)
@@ -34,15 +34,55 @@ function mapsetup(divname, options) {
                        new OpenLayers.Control.Permalink(permalink)
                ],
                displayProjection: new OpenLayers.Projection("EPSG:4326"),
-               numZoomLevels: 18
+               maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
+               projection: "EPSG:900913",
+               units: "m",
+               maxResolution: 156543.0339,
+               numZoomLevels: 19
        });
 
+       for (x in options.layers_order) {
+               layer = options.layers_order[x];
+               console.log("setting up layer: " + layer + " with argument : " + options.layers[layer]);
+               if (layer.indexOf("Google") >= 0) {
+                       if (options.google_apikey && options.google_apikey != 'null') {
+                               var gtype = G_NORMAL_MAP;
+                               var gtext = "";
+                               if (options.layers[layer] == "Satellite") {
+                                       gtype = G_SATELLITE_MAP;
+                               } else if (options.layers[layer] == "Hybrid") {
+                                       gtype = G_HYBRID_MAP // the normal map overlaying the satellite photographs
+                               } else if (options.layers[layer] == "Physical") {
+                                       gtype = G_PHYSICAL_MAP // terrain information
+                               }
+                               // this nightmare is possible through http://docs.openlayers.org/library/spherical_mercator.html
+                               googleLayer = new OpenLayers.Layer.Google(
+                                       "Google " + options.layers[layer],
+                                       {type: gtype,
+                                        'sphericalMercator': true,
+                                        'maxExtent': new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
+                                        projection: new OpenLayers.Projection("EPSG:3857")}
+                               );
+                               map.addLayer(googleLayer);
+                       } else {
+                               console.log("no API key defined for Google layer, skipping");
+                       }
+               } else { // OSM
+                       if (options.layers[layer] != 1) {
+                               l = options.layers[layer];
+                               fqdn = l.split("/")[2].split(".")
+                               text = fqdn[fqdn.length-2]
+                               map.addLayer(new OpenLayers.Layer.OSM("OpenStreetMap (" + text + ")", l));
+                       } else {
+                               map.addLayer(new OpenLayers.Layer.OSM("OpenStreetMap (Mapnik)"));
+                       }
+               }
+       }
 
-       map.addLayer(new OpenLayers.Layer.OSM());
        if (options.format == 'CSV') {
                pois = new OpenLayers.Layer.Text( "CSV",
                        { location: options.csvurl,
-                         projection: map.displayProjection
+                         projection: new OpenLayers.Projection("EPSG:4326")
                        });
        } else if (options.format == 'GeoJSON') {
                pois = new OpenLayers.Layer.Vector("GeoJSON", {
@@ -50,7 +90,8 @@ function mapsetup(divname, options) {
                                url: options.jsonurl,
                                format: new OpenLayers.Format.GeoJSON()
                        }),
-                       strategies: [new OpenLayers.Strategy.Fixed()]
+                       strategies: [new OpenLayers.Strategy.Fixed()],
+                       projection: new OpenLayers.Projection("EPSG:4326")
                });
        } else {
                pois = new OpenLayers.Layer.Vector("KML", {
@@ -61,7 +102,9 @@ function mapsetup(divname, options) {
                                        extractAttributes: true
                                })
                        }),
-               strategies: [new OpenLayers.Strategy.Fixed()]});
+                       strategies: [new OpenLayers.Strategy.Fixed()],
+                       projection: new OpenLayers.Projection("EPSG:4326")
+                });
        }
        map.addLayer(pois);
        select = new OpenLayers.Control.SelectFeature(pois);