aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Plugin/osm.pm17
-rw-r--r--underlays/osm/ikiwiki/osm.js51
2 files changed, 50 insertions, 18 deletions
diff --git a/IkiWiki/Plugin/osm.pm b/IkiWiki/Plugin/osm.pm
index d86dbd66e..4c50fec53 100644
--- a/IkiWiki/Plugin/osm.pm
+++ b/IkiWiki/Plugin/osm.pm
@@ -67,10 +67,19 @@ sub getsetup () {
safe => 0,
rebuild => 1,
},
- osm_map_url => {
+ osm_layers => {
type => "string",
- example => "/tiles/\${z}/\${x}/\${y}.png",
- description => "Url to get map tiles from (if none specified, uses the openstreetmap server, see http://wiki.openstreetmap.org/wiki/Creating_your_own_tiles for more info on serving your own tiles)",
+ example => { OSM => 1,
+ Google => 'Hybrid',
+ },
+ description => "Layers to use in the map. If the value is 1, use the default for the map, otherwise the argument is a URL (for OSM layers, e.g. http://a.tile.stamen.com/toner/\${z}/\${x}/\${y}.png) or a type option for Google maps (Normal, Satellite, Hybrid or Physical).",
+ safe => 0,
+ rebuild => 1,
+ },
+ osm_layers_order => {
+ type => "string",
+ example => { 'OSM', 'Google' },
+ description => "Display order for the layers. The first layer is the default layer, must match exactly the left side of the osm_layers hash.",
safe => 0,
rebuild => 1,
},
@@ -580,6 +589,8 @@ sub map_setup_code($;@) {
if ($mapurl) {
$options{'mapurl'} = $mapurl;
}
+ $options{'layers'} = $config{osm_layers};
+ $options{'layers_order'} = $config{osm_layers_order};
return "mapsetup('mapdiv-$name', " . to_json(\%options) . ");";
}
diff --git a/underlays/osm/ikiwiki/osm.js b/underlays/osm/ikiwiki/osm.js
index 4f53b1dc8..9547ee29c 100644
--- a/underlays/osm/ikiwiki/osm.js
+++ b/underlays/osm/ikiwiki/osm.js
@@ -41,23 +41,44 @@ function mapsetup(divname, options) {
numZoomLevels: 19
});
- if (options.mapurl) {
- map.addLayer(new OpenLayers.Layer.OSM("OpenStreetMap (Local)", options.mapurl));
- } else {
- map.addLayer(new OpenLayers.Layer.OSM("OpenStreetMap (Mapnik)"));
+ 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)"));
+ }
+ }
}
- // this nightmare is possible through http://docs.openlayers.org/library/spherical_mercator.html
- if (options.google_apikey && options.google_apikey != 'null') {
- googleLayer = new OpenLayers.Layer.Google(
- "Google Hybrid",
- {type: G_HYBRID_MAP,
- 'sphericalMercator': true,
- 'maxExtent': new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
- projection: new OpenLayers.Projection("EPSG:3857")}
- );
- map.addLayer(googleLayer);
- }
if (options.format == 'CSV') {
pois = new OpenLayers.Layer.Text( "CSV",
{ location: options.csvurl,