make layers completely customizable
parent
2fb93db1af
commit
081fd38636
|
@ -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) . ");";
|
||||
}
|
||||
|
|
|
@ -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)"));
|
||||
}
|
||||
|
||||
// this nightmare is possible through http://docs.openlayers.org/library/spherical_mercator.html
|
||||
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 Hybrid",
|
||||
{type: G_HYBRID_MAP,
|
||||
"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)"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (options.format == 'CSV') {
|
||||
pois = new OpenLayers.Layer.Text( "CSV",
|
||||
{ location: options.csvurl,
|
||||
|
|
Loading…
Reference in New Issue