Added hotline based route overlay

Added a overlay which reflects the quality of the route based on either:
* cost
* altitude
* incline
This commit is contained in:
Unknown 2019-10-01 15:46:09 +02:00 committed by Matzepan
parent 90dfa5b7f3
commit 9eeca7e2d5
7 changed files with 269 additions and 1 deletions

View file

@ -154,7 +154,7 @@ L.BRouter = L.Class.extend({
try {
geojson = JSON.parse(xhr.responseText);
layer = L.geoJSON(geojson).getLayers()[0];
layer = this._assignFeatures(L.geoJSON(geojson).getLayers()[0]);
return cb(null, layer);
} catch (e) {
@ -190,6 +190,55 @@ L.BRouter = L.Class.extend({
xhr.send(profileText);
},
_assignFeatures: function(segment) {
if (segment.feature.properties.messages) {
let featureMessages = segment.feature.properties.messages,
segmentLatLngs = segment.getLatLngs(),
segmentLength = segmentLatLngs.length,
featureSegmentIndex = 0;
for (let mi = 1; mi < featureMessages.length; mi++) {
var featureLatLng = this._getFeatureLatLng(featureMessages[mi]);
for (let fi = featureSegmentIndex; fi < segmentLength; fi++) {
let segmentLatLng = segmentLatLngs[fi],
featureMessage = featureMessages[mi];
segmentLatLng.feature = this._getFeature(featureMessage);
segmentLatLng.message = featureMessage;
if (featureLatLng.equals(segmentLatLngs[fi])) {
featureSegmentIndex = fi + 1;
break;
}
}
}
}
return segment;
},
_getFeature: function(featureMessage) {
//["Longitude", "Latitude", "Elevation", "Distance", "CostPerKm", "ElevCost", "TurnCost", "NodeCost", "InitialCost", "WayTags", "NodeTags"]
return {
cost: {
perKm: parseInt(featureMessage[4]),
elev: parseInt(featureMessage[5]),
turn: parseInt(featureMessage[6]),
node: parseInt(featureMessage[7]),
initial: parseInt(featureMessage[8])
},
wayTags: featureMessage[9],
nodeTags: featureMessage[10]
};
},
_getFeatureLatLng: function(message) {
var lon = message[0] / 1000000,
lat = message[1] / 1000000;
return L.latLng(lat, lon);
},
_handleProfileResponse: function(xhr, cb) {
var response;