Interpolate cost by using max of neighbours
This commit is contained in:
parent
2f8ddfa9e7
commit
5dd801d714
1 changed files with 29 additions and 3 deletions
|
|
@ -497,7 +497,20 @@ BR.Routing = L.Routing.extend({
|
||||||
return stdPath;
|
return stdPath;
|
||||||
},
|
},
|
||||||
|
|
||||||
_interpolateBeelines(serialBeelines) {
|
_getCostFactor: function (line) {
|
||||||
|
let costFactor = null;
|
||||||
|
if (line) {
|
||||||
|
const props = line.feature.properties;
|
||||||
|
const length = props['track-length'];
|
||||||
|
const cost = props['cost'];
|
||||||
|
if (length) {
|
||||||
|
costFactor = cost / length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return costFactor;
|
||||||
|
},
|
||||||
|
|
||||||
|
_interpolateBeelines: function (serialBeelines, before, after) {
|
||||||
let altStart = serialBeelines[0].getLatLngs()[0].alt;
|
let altStart = serialBeelines[0].getLatLngs()[0].alt;
|
||||||
const altEnd = serialBeelines[serialBeelines.length - 1].getLatLngs()[1].alt ?? altStart;
|
const altEnd = serialBeelines[serialBeelines.length - 1].getLatLngs()[1].alt ?? altStart;
|
||||||
altStart ??= altEnd;
|
altStart ??= altEnd;
|
||||||
|
|
@ -511,6 +524,15 @@ BR.Routing = L.Routing.extend({
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let beforeCostFactor = this._getCostFactor(before);
|
||||||
|
let afterCostFactor = this._getCostFactor(after);
|
||||||
|
let costFactor;
|
||||||
|
if (beforeCostFactor != null && afterCostFactor != null) {
|
||||||
|
costFactor = Math.max(beforeCostFactor, afterCostFactor);
|
||||||
|
} else {
|
||||||
|
costFactor = beforeCostFactor ?? afterCostFactor ?? 0;
|
||||||
|
}
|
||||||
|
|
||||||
for (const beeline of serialBeelines) {
|
for (const beeline of serialBeelines) {
|
||||||
const props = beeline.feature.properties;
|
const props = beeline.feature.properties;
|
||||||
const distance = props['track-length'];
|
const distance = props['track-length'];
|
||||||
|
|
@ -528,6 +550,8 @@ BR.Routing = L.Routing.extend({
|
||||||
}
|
}
|
||||||
props['plain-ascend'] = Math.trunc(deltaHeight + 0.5);
|
props['plain-ascend'] = Math.trunc(deltaHeight + 0.5);
|
||||||
// do not set interpolated alt value, to explicitly show missing data, e.g. in height graph
|
// do not set interpolated alt value, to explicitly show missing data, e.g. in height graph
|
||||||
|
|
||||||
|
props['cost'] = Math.round(distance * costFactor);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -535,20 +559,22 @@ BR.Routing = L.Routing.extend({
|
||||||
L.Routing.prototype._updateBeelines.call(this);
|
L.Routing.prototype._updateBeelines.call(this);
|
||||||
|
|
||||||
let serialBeelines = [];
|
let serialBeelines = [];
|
||||||
|
let before = null;
|
||||||
|
|
||||||
this._eachSegment(function (m1, m2, line) {
|
this._eachSegment(function (m1, m2, line) {
|
||||||
if (line?._routing?.beeline) {
|
if (line?._routing?.beeline) {
|
||||||
serialBeelines.push(line);
|
serialBeelines.push(line);
|
||||||
} else {
|
} else {
|
||||||
if (serialBeelines.length > 0) {
|
if (serialBeelines.length > 0) {
|
||||||
this._interpolateBeelines(serialBeelines);
|
this._interpolateBeelines(serialBeelines, before, line);
|
||||||
}
|
}
|
||||||
|
before = line;
|
||||||
serialBeelines = [];
|
serialBeelines = [];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (serialBeelines.length > 0) {
|
if (serialBeelines.length > 0) {
|
||||||
this._interpolateBeelines(serialBeelines);
|
this._interpolateBeelines(serialBeelines, before, null);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue