(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(); }); })();