-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathwillimantic2019.html
More file actions
129 lines (112 loc) · 5.56 KB
/
willimantic2019.html
File metadata and controls
129 lines (112 loc) · 5.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<!DOCTYPE html>
<html>
<head>
<title>ECG Willimantic 2019</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf-8">
<link rel="shortcut icon" href="favicon.ico">
<!-- load Bootstrap CSS for mobile devices -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Load Leaflet. See updates at https://leafletjs.com/download.html -->
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.5.1/dist/leaflet.css"
integrity="sha512-xwE/Az9zrjBIphAcBb3F6JVqxf46+CDLwfLMHloNu6KEQCAWi6HcDUbeOfBIptF7tcCzusKFjFw2yuvEpDL9wQ=="
crossorigin=""/>
<script src="https://unpkg.com/leaflet@1.5.1/dist/leaflet.js"
integrity="sha512-GffPMF3RvMeYyc1LWMHtK8EbPv0iNZ8/oTtHPx9/cc2ILxQ+u905qIwdpULaqDkyBKgOaB57QTMg7ztg8Jm2Og=="
crossorigin=""></script>
<!-- load jQuery -->
<script
src="https://code.jquery.com/jquery-3.4.0.min.js"
integrity="sha256-BJeo0qm959uMBGb65z40ejJYGSgR7REI4+CW1fNKwOg="
crossorigin="anonymous"></script>
<!-- Load Esri Leaflet -->
<script src="https://cdn.jsdelivr.net/leaflet.esri/2.0.2/esri-leaflet.js"></script>
<!-- load Font-Awesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
<!-- load Leaflet.locatecontrol -->
<script src="https://cdn.jsdelivr.net/leaflet.locatecontrol/0.52.0/L.Control.Locate.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/leaflet.locatecontrol/0.52.0/L.Control.Locate.min.css"/>
<!-- load Leaflet-plugins to read GPX and KML -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-plugins/1.9.0/layer/vector/GPX.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-plugins/1.9.0/layer/vector/KML.min.js"></script>
<!-- load distance markers with geometry from local directory; see also style.css -->
<!-- <script src="src/leaflet.geometryutil.js" type="text/javascript"></script>
<script src="src/leaflet-distance-marker.js" type="text/javascript"></script> -->
<!-- load Leaflet.SlideMenu from local directory -->
<link rel="stylesheet" href="src/L.Control.SlideMenu.css" />
<script src="src/L.Control.SlideMenu.js"></script>
<!-- load custom css -->
<link rel="stylesheet" href="style.css"/>
</head>
<body>
<div id="map"></div>
<script>
var map = L.map('map', {
center: [41.718, -72.25],
zoom: 15,
zoomControl: false, // add later to reposition
scrollWheelZoom: false
});
map.attributionControl
.setPrefix("View <a href='http://github.com/jackdougherty/bikemapcode' target='_blank'> code on GitHub</a> with <a href='http://leafletjs.com' title='A JS library for interactive maps'>Leaflet</a> | <a href='https://jackdougherty.github.io/bikemapcode/routes/ecg-willimantic-new.gpx' target='_blank'>Download new route GPX</a>");
var controlLayers = L.control.layers( null, null, {
position: "topleft",
collapsed: false
}).addTo(map);
new L.control.zoom({position: "topleft",}).addTo(map);
L.control.scale().addTo(map);
// slide menu contents and position
var contents = '<h4>BikeMapCode</h4>';
contents += '<h5>Mobile-friendly web maps<br>with open-source templates</h5>';
contents += '<p>Link to <a href="https://github.com/JackDougherty/bikemapcode">code and instructions on GitHub</a></p>';
contents += '<img src="images/BikeMapCodeKey.png" alt="BikeMapCode key" width="196" height="299">';
contents += '<p>Distributed as-is with no warranty</p>';
contents += '<p>Stop your bike in a safe place before using</p>';
contents += '<p>Requires internet access to view maps and location</p>';
contents += '<p>Allow smartphone browser to show your location<br> - iPhone > Settings > Privacy > Location Services (On) > Safari (While Using)<br> - Android (to come)</p>';
contents += '<p>Click OK if browser asks permission to show your location</p>';
contents += '<img src="images/AllowCurrentLocation.png" alt="Allow Current Location screen" width="200" height="123">';
contents += '<h5>Open Cycle Map layer legend</h5>';
contents += '<img src="images/OpenCycleMapKey.png" alt="OpenCycleMap key" width="290" height="438">';
var slideMenu = L.control.slideMenu('', {position: 'topright', width: '300px', height: '100%', delay: '1'}).addTo(map);
slideMenu.setContents(contents);
// insert map title at top of layer control
$('<h6 id="mapTitle">ECG Willimantic 2019</h6>').insertBefore('div.leaflet-control-layers-base');
// BASELAYERS
var EsriStreets = L.tileLayer('http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}', {
attribution: 'Tiles © Esri'
}).addTo(map);
// OVERLAYS
var ecgCurrent = new L.GPX("routes/ecg-willimantic-2019-09.gpx", {
color: 'blue',
}).addTo(map);
controlLayers.addOverlay(ecgCurrent, 'ECG current route <i class="color-line bg-blue"></i>');
var ecgNew = new L.GPX("routes/ecg-willimantic-new.gpx", {
color: 'red',
}).addTo(map);
controlLayers.addOverlay(ecgNew, 'ECG new route <i class="color-line bg-red"></i>');
// Thanks @ilyankou for gatherBounds function; update layer names
function gatherBounds() {
var checkedLayers = [];
var allLayers = [
ecgCurrent,
ecgNew
];
for (l in allLayers) {
if (map.hasLayer(allLayers[l])) {
checkedLayers.push(allLayers[l]);
}
}
if (checkedLayers.length > 0) {
map.fitBounds(L.featureGroup(checkedLayers).getBounds());
}
}
map.on('layeradd', function() {
gatherBounds();
});
map.on('layerremove', function() {
gatherBounds();
});
</script>
</body>
</html>