(function(){
// Global array to track dynamically added dashed layers.
window.customDashedLayers = window.customDashedLayers || [];
// Global object to track event attachments.
window.layerEventsAttached = window.layerEventsAttached || {};
// ----------------- Adding Layers for gb25_v2_track -----------------
// GeoJSON URL for surface
var urlSurface_gb25_v2_track_1 = './application/helpers/prefetch.surface.php?r=gb25_v2_track.geojson&light='+slowMobileConnection+'&fingerprint=GtcAeqzOjIKkOA2SGFMf6pK55TJChcbE_mod_1746543669';
// Add GeoJSON Source if it doesn't already exist.
if (!map.getSource('surface_gb25_v2_track')) {
map.addSource('surface_gb25_v2_track', {
type: 'geojson',
data: urlSurface_gb25_v2_track_1 });
}
// ----------------- Shadow Layer -----------------
var shadowLayerId_gb25_v2_track = 'surface_gb25_v2_track_1';
if (!map.getLayer(shadowLayerId_gb25_v2_track)) {
map.addLayer({
"id": shadowLayerId_gb25_v2_track,
"type": "line",
"source": "surface_gb25_v2_track",
"layout": {
"line-join": "round",
"line-cap": "butt"
},
"paint": {
"line-color": "rgba(255, 255, 255, 0.6)",
"line-width": 6
}
});
}
// ----------------- Track Layer -----------------
var trackLayerId_gb25_v2_track = 'surface_gb25_v2_track_2';
if (!map.getLayer(trackLayerId_gb25_v2_track)) {
map.addLayer({
"id": trackLayerId_gb25_v2_track,
"type": "line",
"source": "surface_gb25_v2_track",
"layout": {
"line-join": "round",
"line-cap": "butt"
},
"paint": {
"line-color": "#551a8b",
"line-width": 4
}
});
}
// ----------------- Default Dashed Layer -----------------
var dashedLayerId_gb25_v2_track_3_default = 'dashed_gb25_v2_track_3_default';
if (!map.getLayer(dashedLayerId_gb25_v2_track_3_default)) {
map.addLayer({
"id": dashedLayerId_gb25_v2_track_3_default,
"type": "line",
"source": "surface_gb25_v2_track",
"layout": {
"line-join": "round",
"line-cap": "round"
},
"paint": {
"line-color":"#ffffff",
"line-width": 3,
"line-dasharray": [1, 6, 1, 6]
},
"filter": ["any",["!has","tracktype"],["all",["!=","tracktype","Grade 1"],["!=","tracktype","Grade 2"],["!=","tracktype","Grade 3"],["!=","tracktype","Grade 4"],["!=","tracktype","Grade 5"]]] });
window.customDashedLayers.push({
id: dashedLayerId_gb25_v2_track_3_default
});
}
// ----------------- Dashed Layers for All Grades -----------------
var dashedLayerId_gb25_v2_track_4_Grade_1 = 'dashed_gb25_v2_track_4_Grade_1';
if (!map.getLayer(dashedLayerId_gb25_v2_track_4_Grade_1)) {
map.addLayer({
"id": dashedLayerId_gb25_v2_track_4_Grade_1,
"type": "line",
"source": "surface_gb25_v2_track",
"layout": {
"line-join": "round",
"line-cap": "round"
},
"paint": {
"line-color": "#ffffff",
"line-width": 3,
"line-dasharray": [1, 6]
},
"filter": ["==", "tracktype", "Grade 1"]
});
window.customDashedLayers.push({
id: dashedLayerId_gb25_v2_track_4_Grade_1 });
}
var dashedLayerId_gb25_v2_track_5_Grade_2 = 'dashed_gb25_v2_track_5_Grade_2';
if (!map.getLayer(dashedLayerId_gb25_v2_track_5_Grade_2)) {
map.addLayer({
"id": dashedLayerId_gb25_v2_track_5_Grade_2,
"type": "line",
"source": "surface_gb25_v2_track",
"layout": {
"line-join": "round",
"line-cap": "round"
},
"paint": {
"line-color": "#ffffff",
"line-width": 3,
"line-dasharray": [1, 6]
},
"filter": ["==", "tracktype", "Grade 2"]
});
window.customDashedLayers.push({
id: dashedLayerId_gb25_v2_track_5_Grade_2 });
}
var dashedLayerId_gb25_v2_track_6_Grade_3 = 'dashed_gb25_v2_track_6_Grade_3';
if (!map.getLayer(dashedLayerId_gb25_v2_track_6_Grade_3)) {
map.addLayer({
"id": dashedLayerId_gb25_v2_track_6_Grade_3,
"type": "line",
"source": "surface_gb25_v2_track",
"layout": {
"line-join": "round",
"line-cap": "round"
},
"paint": {
"line-color": "#ffffff",
"line-width": 3,
"line-dasharray": [1, 6]
},
"filter": ["==", "tracktype", "Grade 3"]
});
window.customDashedLayers.push({
id: dashedLayerId_gb25_v2_track_6_Grade_3 });
}
var dashedLayerId_gb25_v2_track_7_Grade_4 = 'dashed_gb25_v2_track_7_Grade_4';
if (!map.getLayer(dashedLayerId_gb25_v2_track_7_Grade_4)) {
map.addLayer({
"id": dashedLayerId_gb25_v2_track_7_Grade_4,
"type": "line",
"source": "surface_gb25_v2_track",
"layout": {
"line-join": "round",
"line-cap": "round"
},
"paint": {
"line-color": "#ffffff",
"line-width": 3,
"line-dasharray": [1, 6]
},
"filter": ["==", "tracktype", "Grade 4"]
});
window.customDashedLayers.push({
id: dashedLayerId_gb25_v2_track_7_Grade_4 });
}
var dashedLayerId_gb25_v2_track_8_Grade_5 = 'dashed_gb25_v2_track_8_Grade_5';
if (!map.getLayer(dashedLayerId_gb25_v2_track_8_Grade_5)) {
map.addLayer({
"id": dashedLayerId_gb25_v2_track_8_Grade_5,
"type": "line",
"source": "surface_gb25_v2_track",
"layout": {
"line-join": "round",
"line-cap": "round"
},
"paint": {
"line-color": "#ffffff",
"line-width": 3,
"line-dasharray": [1, 6]
},
"filter": ["==", "tracktype", "Grade 5"]
});
window.customDashedLayers.push({
id: dashedLayerId_gb25_v2_track_8_Grade_5 });
}
// ----------------- Hover Events for Shadow Layer -----------------
if (!window.layerEventsAttached[shadowLayerId_gb25_v2_track]) {
var previousShadowId_gb25_v2_track = null;
map.on('mouseenter', shadowLayerId_gb25_v2_track, function(e) {
var properties = e.features[0].properties;
var featureId = properties.id || "";
if (featureId === previousShadowId_gb25_v2_track) return;
map.setPaintProperty(shadowLayerId_gb25_v2_track, 'line-width', ['match', ['get', 'id'], featureId, 10, 6]);
previousShadowId_gb25_v2_track = featureId;
});
map.on('mouseleave', shadowLayerId_gb25_v2_track, function() {
if (previousShadowId_gb25_v2_track !== null) {
map.setPaintProperty(shadowLayerId_gb25_v2_track, 'line-width', ['match', ['get', 'id'], previousShadowId_gb25_v2_track, 6, 6]);
previousShadowId_gb25_v2_track = null;
}
});
window.layerEventsAttached[shadowLayerId_gb25_v2_track] = true;
}
// ----------------- Hover Events for Track Layer -----------------
if (!window.layerEventsAttached[trackLayerId_gb25_v2_track]) {
var previousTrackId_gb25_v2_track = null;
map.on('mouseenter', trackLayerId_gb25_v2_track, function(e) {
var properties = e.features[0].properties;
var coordinates = e.lngLat;
var featureId = properties.id || "";
if (featureId === previousTrackId_gb25_v2_track) return;
map.setPaintProperty(trackLayerId_gb25_v2_track, 'line-width', ['match', ['get', 'id'], featureId, 6, 4]);
var content = '';
if (properties.type === 'unclassified') {
properties.surface = 'Unpaved';
properties.type = '';
}
var contentParts = [];
if (properties.name) {
contentParts.push("Name: " + properties.name + "");
}
if (properties.surface) {
contentParts.push("Surface: " + properties.surface + "");
}
if (properties.type) {
contentParts.push("Type: " + properties.type + "");
}
if (properties.tracktype) {
contentParts.push("Track Type: " + properties.tracktype + "");
}
if (contentParts.length > 0) {
content = contentParts.join("
");
}
if(content) {
content += "
Length: " + writeDistance(properties.segmentLength, distanceNotation) + " " + distanceLabel + "";
}
if (content) {
updateSurfaceTooltip(content, coordinates);
}
previousTrackId_gb25_v2_track = featureId;
});
map.on('mouseleave', trackLayerId_gb25_v2_track, function () {
if (previousTrackId_gb25_v2_track !== null) {
map.setPaintProperty(trackLayerId_gb25_v2_track, 'line-width', ['match', ['get', 'id'], previousTrackId_gb25_v2_track, 4, 4]);
previousTrackId_gb25_v2_track = null;
}
hideSurfaceTooltip();
});
window.layerEventsAttached[trackLayerId_gb25_v2_track] = true;
}
map.on('dragstart', function () {
hideSurfaceTooltip();
});
})();
(function(){
// Global array to track dynamically added dashed layers.
window.customDashedLayers = window.customDashedLayers || [];
// Global object to track event attachments.
window.layerEventsAttached = window.layerEventsAttached || {};
// ----------------- Adding Layers for gb25_330v2_track -----------------
// GeoJSON URL for surface
var urlSurface_gb25_330v2_track_9 = './application/helpers/prefetch.surface.php?r=gb25_330v2_track.geojson&light='+slowMobileConnection+'&fingerprint=GtcAeqzOjIKkOA2SGFMf6pK55TJChcbE_mod_1746533606';
// Add GeoJSON Source if it doesn't already exist.
if (!map.getSource('surface_gb25_330v2_track')) {
map.addSource('surface_gb25_330v2_track', {
type: 'geojson',
data: urlSurface_gb25_330v2_track_9 });
}
// ----------------- Shadow Layer -----------------
var shadowLayerId_gb25_330v2_track = 'surface_gb25_330v2_track_9';
if (!map.getLayer(shadowLayerId_gb25_330v2_track)) {
map.addLayer({
"id": shadowLayerId_gb25_330v2_track,
"type": "line",
"source": "surface_gb25_330v2_track",
"layout": {
"line-join": "round",
"line-cap": "butt"
},
"paint": {
"line-color": "rgba(255, 255, 255, 0.6)",
"line-width": 6
}
});
}
// ----------------- Track Layer -----------------
var trackLayerId_gb25_330v2_track = 'surface_gb25_330v2_track_10';
if (!map.getLayer(trackLayerId_gb25_330v2_track)) {
map.addLayer({
"id": trackLayerId_gb25_330v2_track,
"type": "line",
"source": "surface_gb25_330v2_track",
"layout": {
"line-join": "round",
"line-cap": "butt"
},
"paint": {
"line-color": "#bf0000",
"line-width": 4
}
});
}
// ----------------- Default Dashed Layer -----------------
var dashedLayerId_gb25_330v2_track_11_default = 'dashed_gb25_330v2_track_11_default';
if (!map.getLayer(dashedLayerId_gb25_330v2_track_11_default)) {
map.addLayer({
"id": dashedLayerId_gb25_330v2_track_11_default,
"type": "line",
"source": "surface_gb25_330v2_track",
"layout": {
"line-join": "round",
"line-cap": "round"
},
"paint": {
"line-color":"#ffffff",
"line-width": 3,
"line-dasharray": [1, 6, 1, 6]
},
"filter": ["any",["!has","tracktype"],["all",["!=","tracktype","Grade 1"],["!=","tracktype","Grade 2"],["!=","tracktype","Grade 3"],["!=","tracktype","Grade 4"],["!=","tracktype","Grade 5"]]] });
window.customDashedLayers.push({
id: dashedLayerId_gb25_330v2_track_11_default
});
}
// ----------------- Dashed Layers for All Grades -----------------
var dashedLayerId_gb25_330v2_track_12_Grade_1 = 'dashed_gb25_330v2_track_12_Grade_1';
if (!map.getLayer(dashedLayerId_gb25_330v2_track_12_Grade_1)) {
map.addLayer({
"id": dashedLayerId_gb25_330v2_track_12_Grade_1,
"type": "line",
"source": "surface_gb25_330v2_track",
"layout": {
"line-join": "round",
"line-cap": "round"
},
"paint": {
"line-color": "#ffffff",
"line-width": 3,
"line-dasharray": [1, 6]
},
"filter": ["==", "tracktype", "Grade 1"]
});
window.customDashedLayers.push({
id: dashedLayerId_gb25_330v2_track_12_Grade_1 });
}
var dashedLayerId_gb25_330v2_track_13_Grade_2 = 'dashed_gb25_330v2_track_13_Grade_2';
if (!map.getLayer(dashedLayerId_gb25_330v2_track_13_Grade_2)) {
map.addLayer({
"id": dashedLayerId_gb25_330v2_track_13_Grade_2,
"type": "line",
"source": "surface_gb25_330v2_track",
"layout": {
"line-join": "round",
"line-cap": "round"
},
"paint": {
"line-color": "#ffffff",
"line-width": 3,
"line-dasharray": [1, 6]
},
"filter": ["==", "tracktype", "Grade 2"]
});
window.customDashedLayers.push({
id: dashedLayerId_gb25_330v2_track_13_Grade_2 });
}
var dashedLayerId_gb25_330v2_track_14_Grade_3 = 'dashed_gb25_330v2_track_14_Grade_3';
if (!map.getLayer(dashedLayerId_gb25_330v2_track_14_Grade_3)) {
map.addLayer({
"id": dashedLayerId_gb25_330v2_track_14_Grade_3,
"type": "line",
"source": "surface_gb25_330v2_track",
"layout": {
"line-join": "round",
"line-cap": "round"
},
"paint": {
"line-color": "#ffffff",
"line-width": 3,
"line-dasharray": [1, 6]
},
"filter": ["==", "tracktype", "Grade 3"]
});
window.customDashedLayers.push({
id: dashedLayerId_gb25_330v2_track_14_Grade_3 });
}
var dashedLayerId_gb25_330v2_track_15_Grade_4 = 'dashed_gb25_330v2_track_15_Grade_4';
if (!map.getLayer(dashedLayerId_gb25_330v2_track_15_Grade_4)) {
map.addLayer({
"id": dashedLayerId_gb25_330v2_track_15_Grade_4,
"type": "line",
"source": "surface_gb25_330v2_track",
"layout": {
"line-join": "round",
"line-cap": "round"
},
"paint": {
"line-color": "#ffffff",
"line-width": 3,
"line-dasharray": [1, 6]
},
"filter": ["==", "tracktype", "Grade 4"]
});
window.customDashedLayers.push({
id: dashedLayerId_gb25_330v2_track_15_Grade_4 });
}
var dashedLayerId_gb25_330v2_track_16_Grade_5 = 'dashed_gb25_330v2_track_16_Grade_5';
if (!map.getLayer(dashedLayerId_gb25_330v2_track_16_Grade_5)) {
map.addLayer({
"id": dashedLayerId_gb25_330v2_track_16_Grade_5,
"type": "line",
"source": "surface_gb25_330v2_track",
"layout": {
"line-join": "round",
"line-cap": "round"
},
"paint": {
"line-color": "#ffffff",
"line-width": 3,
"line-dasharray": [1, 6]
},
"filter": ["==", "tracktype", "Grade 5"]
});
window.customDashedLayers.push({
id: dashedLayerId_gb25_330v2_track_16_Grade_5 });
}
// ----------------- Hover Events for Shadow Layer -----------------
if (!window.layerEventsAttached[shadowLayerId_gb25_330v2_track]) {
var previousShadowId_gb25_330v2_track = null;
map.on('mouseenter', shadowLayerId_gb25_330v2_track, function(e) {
var properties = e.features[0].properties;
var featureId = properties.id || "";
if (featureId === previousShadowId_gb25_330v2_track) return;
map.setPaintProperty(shadowLayerId_gb25_330v2_track, 'line-width', ['match', ['get', 'id'], featureId, 10, 6]);
previousShadowId_gb25_330v2_track = featureId;
});
map.on('mouseleave', shadowLayerId_gb25_330v2_track, function() {
if (previousShadowId_gb25_330v2_track !== null) {
map.setPaintProperty(shadowLayerId_gb25_330v2_track, 'line-width', ['match', ['get', 'id'], previousShadowId_gb25_330v2_track, 6, 6]);
previousShadowId_gb25_330v2_track = null;
}
});
window.layerEventsAttached[shadowLayerId_gb25_330v2_track] = true;
}
// ----------------- Hover Events for Track Layer -----------------
if (!window.layerEventsAttached[trackLayerId_gb25_330v2_track]) {
var previousTrackId_gb25_330v2_track = null;
map.on('mouseenter', trackLayerId_gb25_330v2_track, function(e) {
var properties = e.features[0].properties;
var coordinates = e.lngLat;
var featureId = properties.id || "";
if (featureId === previousTrackId_gb25_330v2_track) return;
map.setPaintProperty(trackLayerId_gb25_330v2_track, 'line-width', ['match', ['get', 'id'], featureId, 6, 4]);
var content = '';
if (properties.type === 'unclassified') {
properties.surface = 'Unpaved';
properties.type = '';
}
var contentParts = [];
if (properties.name) {
contentParts.push("Name: " + properties.name + "");
}
if (properties.surface) {
contentParts.push("Surface: " + properties.surface + "");
}
if (properties.type) {
contentParts.push("Type: " + properties.type + "");
}
if (properties.tracktype) {
contentParts.push("Track Type: " + properties.tracktype + "");
}
if (contentParts.length > 0) {
content = contentParts.join("
");
}
if(content) {
content += "
Length: " + writeDistance(properties.segmentLength, distanceNotation) + " " + distanceLabel + "";
}
if (content) {
updateSurfaceTooltip(content, coordinates);
}
previousTrackId_gb25_330v2_track = featureId;
});
map.on('mouseleave', trackLayerId_gb25_330v2_track, function () {
if (previousTrackId_gb25_330v2_track !== null) {
map.setPaintProperty(trackLayerId_gb25_330v2_track, 'line-width', ['match', ['get', 'id'], previousTrackId_gb25_330v2_track, 4, 4]);
previousTrackId_gb25_330v2_track = null;
}
hideSurfaceTooltip();
});
window.layerEventsAttached[trackLayerId_gb25_330v2_track] = true;
}
map.on('dragstart', function () {
hideSurfaceTooltip();
});
})();