From acc4d7d7d65ed9519fa9b5fca7c878f3e9a31451 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Antoine=20Beaupr=C3=A9?= Date: Thu, 9 Aug 2012 01:07:20 -0400 Subject: [PATCH] osm: add optional google maps support for google maps to work, an API key needs to be added to the configuration --- IkiWiki/Plugin/osm.pm | 16 ++++++++++++++-- underlays/osm/ikiwiki/osm.js | 15 +++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/IkiWiki/Plugin/osm.pm b/IkiWiki/Plugin/osm.pm index 21d1dce3f..d86dbd66e 100644 --- a/IkiWiki/Plugin/osm.pm +++ b/IkiWiki/Plugin/osm.pm @@ -74,7 +74,13 @@ sub getsetup () { 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 { @@ -144,6 +150,7 @@ sub preprocess { lat => $lat, lon => $lon, href => $href, + google_apikey => $config{'osm_google_apikey'}, }; return "
"; } @@ -527,6 +534,7 @@ sub cgi($) { zoom => "urlParams['zoom']", fullscreen => 1, editable => 1, + google_apikey => $config{'osm_google_apikey'}, ); print ""; print ""; @@ -537,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 ''. + my $code = ''."\n". ''."\n"; + if ($config{'osm_google_apikey'}) { + $code .= ''; + } + return $code; } sub map_setup_code($;@) { diff --git a/underlays/osm/ikiwiki/osm.js b/underlays/osm/ikiwiki/osm.js index 388d625f1..9269bd899 100644 --- a/underlays/osm/ikiwiki/osm.js +++ b/underlays/osm/ikiwiki/osm.js @@ -34,6 +34,10 @@ function mapsetup(divname, options) { new OpenLayers.Control.Permalink(permalink) ], displayProjection: new OpenLayers.Projection("EPSG:4326"), + maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34), + projection: "EPSG:900913", + units: "m", + maxResolution: 156543.0339, numZoomLevels: 18 }); @@ -44,6 +48,17 @@ function mapsetup(divname, options) { map.addLayer(new OpenLayers.Layer.OSM()); } + // 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, -- 2.26.2