I use Leaflet to display tracks described in XML file on OpenStreetMap background. Some of my XML files contains several tracks, example Multi tracks. Is it possible to display each track with a different color ?
This is the HTML code I use to display the map : getUrlParameter('map') gives the XML file URL; getUrlParameter('Lon') & 'Lon' gives a marker coordinates. Each track color should either be specified in the XML for each track or choosen automatically sequentially among a limited number of colors i.e. black, grey, blue, lighe blue, red then again black ...
<!DOCTYPE html>
<html>
<head>
<title>Open Street Map</title>
<meta charset="utf-8" >
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" >
<script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script>
<link rel="stylesheet" href="src/Leaflet.GraphicScale.min.css" >
<link rel="stylesheet" href="src/stylesheet.css" >
</head>
<body>
<div id="map"></div>
<script src="https://api.mapbox.com/mapbox.js/plugins/leaflet-omnivore/v0.2.0/leaflet-omnivore.min.js"></script>
<script src="src/Leaflet.GraphicScale.min.js"></script>
<script>
function getUrlParameter(name) {
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
var results = regex.exec(location.search);
return (results === null)? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
};
</script>
<script>
var blauwIcon = L.icon({
iconUrl: 'Point.png',
iconSize: [27, 32], // size of the icon
iconAnchor: [13, 32], // point of the icon which will correspond to marker's location
popupAnchor: [0, -30] // point from which the popup should open relative to the iconAnchor
});
var Lon = getUrlParameter('Lon')
var Lat = getUrlParameter('Lat')
var starts = new L.LayerGroup();
L.marker([Lat,Lon], {icon: blauwIcon}).bindPopup(Lat+'<br>'+Lon).addTo(starts);
var customLayer = L.geoJson(null, {
style: function(feature) {
return { color: '#f00' };
}
});
var zomer = new L.LayerGroup();
var runLayer = omnivore.gpx("../"+getUrlParameter('map'))
.on('ready', function() {
map.fitBounds(runLayer.getBounds());
})
.addTo(zomer);
var osmLink = '<a href="https://openstreetmap.org">OpenStreetMap</a>'
;
var osmUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
osmAttrib = '© ' + osmLink + ' Contributors'
;
var mbAttr = 'Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors, ' +
'<a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
'Imagery © <a href="https://mapbox.com">Mapbox</a>',
mbUrl = 'https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=TOKEN;
var osmMap = L.tileLayer(osmUrl, {attribution: osmAttrib}),
satellite = L.tileLayer(mbUrl, {id: 'mapbox.satellite', attribution: mbAttr});
var Stamen_Terrain = L.tileLayer('https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}.{ext}', {
attribution: 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> — Map data © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
subdomains: 'abcd',
ext: 'png'
});
var standard = L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', {
attribution: 'Map data: © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>, <a href="http://viewfinderpanoramas.org">SRTM</a> | Map style: © <a href="https://opentopomap.org">OpenTopoMap</a> (<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>)',
maxZoom: 18
});
var map = L.map('map', {
layers: [osmMap, starts, zomer],
})
.setView([49.21, 4.2], 8);
var baseLayers = {
"OpenStreetMap": osmMap,
"OpenTopoMap": standard,
"3D map" : Stamen_Terrain,
"satellite": satellite,
};
var overlays = {
"Startpunten zomer": starts,
"zomerwandelingen" : zomer
};
L.control.layers(baseLayers).addTo(map);
var graphicScale = L.control.graphicScale({
position: 'bottomright',
fill: 'hollow',
}).addTo(map);
</script>
</body>
</html>