Merge remote-tracking branch 'anarcat/osm_arbitrary_layers'
commit
cd755cacc6
|
@ -67,7 +67,20 @@ sub getsetup () {
|
|||
safe => 0,
|
||||
rebuild => 1,
|
||||
},
|
||||
|
||||
osm_layers => {
|
||||
type => "string",
|
||||
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,
|
||||
},
|
||||
osm_google_apikey => {
|
||||
type => "string",
|
||||
example => "",
|
||||
description => "Google maps API key, Google layer not used if missing, see https://code.google.com/apis/console/ to get an API key",
|
||||
safe => 1,
|
||||
rebuild => 1,
|
||||
},
|
||||
}
|
||||
|
||||
sub register_rendered_files {
|
||||
|
@ -137,6 +150,7 @@ sub preprocess {
|
|||
lat => $lat,
|
||||
lon => $lon,
|
||||
href => $href,
|
||||
google_apikey => $config{'osm_google_apikey'},
|
||||
};
|
||||
return "<div id=\"mapdiv-$name\"></div>";
|
||||
}
|
||||
|
@ -520,6 +534,7 @@ sub cgi($) {
|
|||
zoom => "urlParams['zoom']",
|
||||
fullscreen => 1,
|
||||
editable => 1,
|
||||
google_apikey => $config{'osm_google_apikey'},
|
||||
);
|
||||
print "</script>";
|
||||
print "</body></html>";
|
||||
|
@ -530,9 +545,13 @@ sub cgi($) {
|
|||
sub embed_map_code(;$) {
|
||||
my $page=shift;
|
||||
my $olurl = $config{osm_openlayers_url} || "http://www.openlayers.org/api/OpenLayers.js";
|
||||
return '<script src="'.$olurl.'" type="text/javascript" charset="utf-8"></script>'.
|
||||
my $code = '<script src="'.$olurl.'" type="text/javascript" charset="utf-8"></script>'."\n".
|
||||
'<script src="'.urlto("ikiwiki/osm.js", $page).
|
||||
'" type="text/javascript" charset="utf-8"></script>'."\n";
|
||||
if ($config{'osm_google_apikey'}) {
|
||||
$code .= '<script src="http://maps.google.com/maps?file=api&v=2&key='.$config{'osm_google_apikey'}.'&sensor=false" type="text/javascript" charset="utf-8"></script>';
|
||||
}
|
||||
return $code;
|
||||
}
|
||||
|
||||
sub map_setup_code($;@) {
|
||||
|
@ -540,6 +559,8 @@ sub map_setup_code($;@) {
|
|||
my $name=shift;
|
||||
my %options=@_;
|
||||
|
||||
my $mapurl = $config{osm_map_url};
|
||||
|
||||
eval q{use JSON};
|
||||
error $@ if $@;
|
||||
|
||||
|
@ -556,6 +577,11 @@ sub map_setup_code($;@) {
|
|||
$options{'kmlurl'} = urlto($map."/pois.kml");
|
||||
}
|
||||
|
||||
if ($mapurl) {
|
||||
$options{'mapurl'} = $mapurl;
|
||||
}
|
||||
$options{'layers'} = $config{osm_layers};
|
||||
|
||||
return "mapsetup('mapdiv-$name', " . to_json(\%options) . ");";
|
||||
}
|
||||
|
||||
|
|
|
@ -34,15 +34,50 @@ 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) {
|
||||
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;
|
||||
if (layer.indexOf("Satellite") >= 0) {
|
||||
gtype = G_SATELLITE_MAP;
|
||||
} else if (layer.indexOf("Hybrid") >= 0) {
|
||||
gtype = G_HYBRID_MAP // the normal map overlaying the satellite photographs
|
||||
} 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(
|
||||
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 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));
|
||||
}
|
||||
}
|
||||
|
||||
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 +85,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 +97,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);
|
||||
|
|
Loading…
Reference in New Issue