/* BRouter web - web client for BRouter bike routing engine Licensed under the MIT license. */ (function() { var map, layersControl; function initMap() { var osmAttribution = '© OpenStreetMap contributors'; var osm = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: 'tiles ' + osmAttribution }); var osmde = L.tileLayer('http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', { maxZoom: 19, attribution: 'tiles by openstreetmap.de ' + osmAttribution }); var topo = L.tileLayer('http://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', { minZoom: 5, maxZoom: 15, 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', { maxZoom: 18, attribution: thunderforestAttribution }); var outdoors = L.tileLayer('http://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png', { maxZoom: 18, attribution: thunderforestAttribution }); var cycling = L.tileLayer('http://tile.waymarkedtrails.org/cycling/{z}/{x}/{y}.png', { maxZoom: 19, 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', { maxZoom: 19, opacity: 0.7, attribution: 'Hiking © Waymarked Trails ' + '(CC-BY-SA 3.0 DE)' }); map = new L.Map('map', { layers: [osm], center: new L.LatLng(50.99, 9.86), zoom: 6 }); map.attributionControl.addAttribution( 'BRouter © Arndt Brenschede, ' + 'routing + map data © OpenStreetMap contributors ' + '(ODbL)'); layersControl = L.control.layers({ 'OpenStreetMap': osm, 'OpenStreetMap.de': osmde, 'OpenTopoMap': topo, 'OpenCycleMap (Thunderf.)': cycle, 'Outdoors (Thunderforest)': outdoors }, { 'Cycling (Waymarked Trails)': cycling, 'Hiking (Waymarked Trails)': hiking }).addTo(map); map.addControl(new BR.Search()); } function initApp() { var router, routing, routesLayer, routingOptions, nogos, stats, elevation, download, profile, leftPaneId = 'leftpane', saveWarningShown = false; // left sidebar as additional control position map._controlCorners[leftPaneId] = L.DomUtil.create('div', 'leaflet-' + leftPaneId, map._controlContainer); router = L.bRouter(); //brouterCgi dummyRouter function updateRoute(evt) { router.setOptions(evt.options); routing.rerouteAllSegments(onUpdate); } routingOptions = new BR.RoutingOptions(); routingOptions.on('update', updateRoute); nogos = new BR.NogoAreas(); nogos.on('update', updateRoute); stats = new BR.TrackStats(); download = new BR.Download(); elevation = new BR.Elevation(); profile = new BR.Profile(); profile.on('update', function(evt) { BR.message.hideError(); var profileId = routingOptions.getCustomProfile(); router.uploadProfile(profileId, evt.profileText, function(err, profile) { if (!err) { routingOptions.setCustomProfile(profile); if (!saveWarningShown) { BR.message.showWarning('Note: Uploaded custom profiles are only cached temporarily on the server.' + '
Please save your edits to your local PC.'); saveWarningShown = true; } } else { BR.message.showError(err); if (profile) { routingOptions.setCustomProfile(profile, true); router.setOptions(routingOptions.getOptions()); } } }); }); profile.on('clear', function(evt) { BR.message.hideError(); routingOptions.setCustomProfile(null); }); routing = new BR.Routing({routing: { router: L.bind(router.getRouteSegment, router) }}); routing.on('routing:routeWaypointEnd', onUpdate); function onUpdate() { var track = routing.toPolyline(), latLngs = routing.getWaypoints(), urls = {}; elevation.update(track); stats.update(track); if (latLngs.length > 1) { urls.gpx = router.getUrl(latLngs, 'gpx'); urls.kml = router.getUrl(latLngs, 'kml'); urls.csv = router.getUrl(latLngs, 'csv'); } download.update(urls); }; map.addControl(new BR.Control({ heading: '', divId: 'header' })); routingOptions.addTo(map); stats.addTo(map); download.addTo(map); elevation.addTo(map); profile.addTo(map); nogos.addTo(map); routing.addTo(map); // initial option settings (after controls are added and initialized with onAdd, before permalink) router.setOptions(nogos.getOptions()); router.setOptions(routingOptions.getOptions()); map.addControl(new L.Control.Permalink({ text: 'Permalink', position: 'bottomright', layers: layersControl, routingOptions: routingOptions, nogos: nogos, router: router, routing: routing })); } initMap(); initApp(); })();