make layers an array

this simplifies the code, make the configuration more intuitive, at
the cost of making the labels on the layers automatically generated
and therefore less customizable
master
Antoine Beaupré 2012-08-25 08:53:30 -04:00
parent c7070ddd48
commit 636e04a13a
2 changed files with 14 additions and 29 deletions

View File

@ -69,17 +69,8 @@ sub getsetup () {
},
osm_layers => {
type => "string",
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.",
example => { 'OSM', 'GoogleSattelite' },
description => "Layers to use in the map. Can be either the 'OSM' string or a type option for Google maps (GoogleNormal, GoogleSatellite, GoogleHybrid or GooglePhysical). It can also be an arbitrary URL in a syntax acceptable for OpenLayers.Layer.OSM.url parameter.",
safe => 0,
rebuild => 1,
},
@ -590,7 +581,6 @@ sub map_setup_code($;@) {
$options{'mapurl'} = $mapurl;
}
$options{'layers'} = $config{osm_layers};
$options{'layers_order'} = $config{osm_layers_order};
return "mapsetup('mapdiv-$name', " . to_json(\%options) . ");";
}

View File

@ -41,23 +41,22 @@ function mapsetup(divname, options) {
numZoomLevels: 19
});
for (x in options.layers_order) {
layer = options.layers_order[x];
console.log("setting up layer: " + layer + " with argument : " + options.layers[layer]);
for (x in options.layers) {
layer = options.layers[x];
console.log("setting up layer: " + 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") {
if (layer.indexOf("Satellite") >= 0) {
gtype = G_SATELLITE_MAP;
} else if (options.layers[layer] == "Hybrid") {
} else if (layer.indexOf("Hybrid") >= 0) {
gtype = G_HYBRID_MAP // the normal map overlaying the satellite photographs
} else if (options.layers[layer] == "Physical") {
} else if (layer.indexOf("Physical") >= 0) {
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] + ")",
layer,
{type: gtype,
'sphericalMercator': true,
'maxExtent': new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
@ -67,15 +66,11 @@ function mapsetup(divname, options) {
} 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] + "." + fqdn[fqdn.length-1];
map.addLayer(new OpenLayers.Layer.OSM(layer + " (" + text + ")", l));
} else {
map.addLayer(new OpenLayers.Layer.OSM(layer + " (Mapnik)"));
}
} else if (layer == 'OSM') { // OSM default layer
map.addLayer(new OpenLayers.Layer.OSM("OSM (Mapnik)"));
} else { // assumed to be a URL
text = layer.match(/([^.\/]*\.[^.\/]*(\/[^\$]*)?)\/.*$/i) // take the first two parts of the FQDN and everything before the first $
map.addLayer(new OpenLayers.Layer.OSM("OSM (" + text[1] + ")", layer));
}
}