diff --git a/gulpfile.js b/gulpfile.js index a4dad77..1a89936 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -22,6 +22,7 @@ var paths = { '!**/url-search-params/**/*.js' ]).concat([ 'js/Util.js', + 'js/Map.js', 'js/router/BRouter.js', 'js/plugin/*.js', 'js/control/*.js', diff --git a/js/Map.js b/js/Map.js new file mode 100644 index 0000000..5243f80 --- /dev/null +++ b/js/Map.js @@ -0,0 +1,126 @@ +BR.Map = { + + initMap: function() { + var map, + layersControl; + + L.Icon.Default.imagePath = 'dist/images'; + + var osmAttribution = '© OpenStreetMap contributors'; + var maxZoom = 19; + + var osm = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + maxZoom: maxZoom, + attribution: 'tiles ' + osmAttribution + }); + + var osmde = L.tileLayer('http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', { + maxNativeZoom: 18, + maxZoom: maxZoom, + attribution: 'tiles by openstreetmap.de ' + osmAttribution + }); + + var topo = L.tileLayer('http://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', { + maxNativeZoom: 17, + maxZoom: maxZoom, + attribution: 'tiles © OpenTopoMap, CC-BY-SA' + + ', SRTM' + }); + + var thunderforestAttribution = 'tiles © Thunderforest ' + + '(CC-BY-SA 2.0)'; + var cycle = L.tileLayer('http://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}.png', { + maxNativeZoom: 18, + maxZoom: maxZoom, + attribution: thunderforestAttribution + }); + var outdoors = L.tileLayer('http://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png', { + maxNativeZoom: 18, + maxZoom: maxZoom, + attribution: thunderforestAttribution + }); + + var cycling = L.tileLayer('http://tile.waymarkedtrails.org/cycling/{z}/{x}/{y}.png', { + maxNativeZoom: 18, + maxZoom: maxZoom, + opacity: 0.7, + attribution: 'Cycling © Waymarked Trails ' + + '(CC-BY-SA 3.0 DE)' + }); + var hiking = L.tileLayer('http://tile.waymarkedtrails.org/hiking/{z}/{x}/{y}.png', { + maxNativeZoom: 18, + maxZoom: maxZoom, + opacity: 0.7, + attribution: 'Hiking © Waymarked Trails ' + + '(CC-BY-SA 3.0 DE)' + }); + + // COPYING: Please get your own Bing maps key at http://www.microsoft.com/maps/default.aspx + var bing = new BR.BingLayer(); + BR.Util.get(BR.conf.bingKeyUrl, function (err, key) { + if (err) { + layersControl.removeLayer(bing); + return; + } + + bing._key = key; + bing.loadMetadata(); + }); + + map = new L.Map('map', { + worldCopyJump: true + }); + if (!map.restoreView()) { + map.setView([50.99, 9.86], 6); + } + map.attributionControl.addAttribution( + 'BRouter © Arndt Brenschede, ' + + 'routing + map data © OpenStreetMap contributors ' + + '(ODbL)'); + + var baseLayers = { + 'OpenStreetMap': osm, + 'OpenStreetMap.de': osmde, + 'OpenTopoMap': topo, + 'OpenCycleMap (Thunderf.)': cycle, + 'Outdoors (Thunderforest)': outdoors, + 'Bing Aerial': bing + }; + var overlays = { + 'Cycling (Waymarked Trails)': cycling, + 'Hiking (Waymarked Trails)': hiking + }; + + if (BR.conf.clearBaseLayers) { + baseLayers = {}; + } + for (i in BR.conf.baseLayers) { + if (BR.conf.baseLayers.hasOwnProperty(i)) { + baseLayers[i] = L.tileLayer(BR.conf.baseLayers[i]); + } + } + + for (i in BR.conf.overlays) { + if (BR.conf.overlays.hasOwnProperty(i)) { + overlays[i] = L.tileLayer(BR.conf.overlays[i]); + } + } + // after applying custom base layer configurations, add first base layer to map + var firstLayer = baseLayers[Object.keys(baseLayers)[0]]; + if (firstLayer) { + map.addLayer(firstLayer); + } + + layersControl = L.control.layers(baseLayers, overlays).addTo(map); + + // expose map instance for console debugging + BR.debug = BR.debug || {}; + BR.debug.map = map; + + return { + map: map, + layersControl: layersControl + }; + } + +}; \ No newline at end of file diff --git a/js/index.js b/js/index.js index 0f0d560..61569fd 100644 --- a/js/index.js +++ b/js/index.js @@ -6,126 +6,12 @@ (function() { - var map, - layersControl; + var mapContext; - function initMap() { - L.Icon.Default.imagePath = 'dist/images'; - - var osmAttribution = '© OpenStreetMap contributors'; - var maxZoom = 19; - - var osm = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { - maxZoom: maxZoom, - attribution: 'tiles ' + osmAttribution - }); - - var osmde = L.tileLayer('http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', { - maxNativeZoom: 18, - maxZoom: maxZoom, - attribution: 'tiles by openstreetmap.de ' + osmAttribution - }); - - var topo = L.tileLayer('http://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', { - maxNativeZoom: 17, - maxZoom: maxZoom, - attribution: 'tiles © OpenTopoMap, CC-BY-SA' - + ', SRTM' - }); - - var thunderforestAttribution = 'tiles © Thunderforest ' - + '(CC-BY-SA 2.0)'; - var cycle = L.tileLayer('http://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}.png', { - maxNativeZoom: 18, - maxZoom: maxZoom, - attribution: thunderforestAttribution - }); - var outdoors = L.tileLayer('http://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png', { - maxNativeZoom: 18, - maxZoom: maxZoom, - attribution: thunderforestAttribution - }); - - var cycling = L.tileLayer('http://tile.waymarkedtrails.org/cycling/{z}/{x}/{y}.png', { - maxNativeZoom: 18, - maxZoom: maxZoom, - opacity: 0.7, - attribution: 'Cycling © Waymarked Trails ' - + '(CC-BY-SA 3.0 DE)' - }); - var hiking = L.tileLayer('http://tile.waymarkedtrails.org/hiking/{z}/{x}/{y}.png', { - maxNativeZoom: 18, - maxZoom: maxZoom, - opacity: 0.7, - attribution: 'Hiking © Waymarked Trails ' - + '(CC-BY-SA 3.0 DE)' - }); - - // COPYING: Please get your own Bing maps key at http://www.microsoft.com/maps/default.aspx - var bing = new BR.BingLayer(); - BR.Util.get(BR.conf.bingKeyUrl, function (err, key) { - if (err) { - layersControl.removeLayer(bing); - return; - } - - bing._key = key; - bing.loadMetadata(); - }); - - map = new L.Map('map', { - worldCopyJump: true - }); - if (!map.restoreView()) { - map.setView([50.99, 9.86], 6); - } - map.attributionControl.addAttribution( - 'BRouter © Arndt Brenschede, ' - + 'routing + map data © OpenStreetMap contributors ' - + '(ODbL)'); - - var baseLayers = { - 'OpenStreetMap': osm, - 'OpenStreetMap.de': osmde, - 'OpenTopoMap': topo, - 'OpenCycleMap (Thunderf.)': cycle, - 'Outdoors (Thunderforest)': outdoors, - 'Bing Aerial': bing - }; - var overlays = { - 'Cycling (Waymarked Trails)': cycling, - 'Hiking (Waymarked Trails)': hiking - }; - - if (BR.conf.clearBaseLayers) { - baseLayers = {}; - } - for (i in BR.conf.baseLayers) { - if (BR.conf.baseLayers.hasOwnProperty(i)) { - baseLayers[i] = L.tileLayer(BR.conf.baseLayers[i]); - } - } - - for (i in BR.conf.overlays) { - if (BR.conf.overlays.hasOwnProperty(i)) { - overlays[i] = L.tileLayer(BR.conf.overlays[i]); - } - } - // after applying custom base layer configurations, add first base layer to map - var firstLayer = baseLayers[Object.keys(baseLayers)[0]]; - if (firstLayer) { - map.addLayer(firstLayer); - } - - layersControl = L.control.layers(baseLayers, overlays).addTo(map); - - // expose map instance for console debugging - BR.debug = BR.debug || {}; - BR.debug.map = map; - } - - function initApp() { - var search, + function initApp(mapContext) { + var map = mapContext.map, + layersControl = mapContext.layersControl, + search, router, routing, routesLayer, @@ -394,7 +280,7 @@ L.control.scale().addTo(map); } - initMap(); - initApp(); + mapContext = BR.Map.initMap(); + initApp(mapContext); })();