Merge pull request #460 from mjaschen/fix/github-438

Normalize `surface` and `smoothness` variants
This commit is contained in:
Norbert Renner 2021-11-22 21:29:03 +01:00 committed by GitHub
commit e822a97ed0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -142,7 +142,8 @@ BR.TrackAnalysis = L.Class.extend({
var wayTags = segments[segmentIndex].feature.properties.messages[messageIndex][9].split(' ');
for (var wayTagIndex = 0; wayTagIndex < wayTags.length; wayTagIndex++) {
var wayTagParts = wayTags[wayTagIndex].split('=');
switch (wayTagParts[0]) {
var tagName = this.normalizeTagName(wayTagParts[0]);
switch (tagName) {
case 'highway':
var highwayType = wayTagParts[1];
var trackType = '';
@ -167,10 +168,10 @@ BR.TrackAnalysis = L.Class.extend({
break;
case 'surface':
case 'smoothness':
if (typeof analysis[wayTagParts[0]][wayTagParts[1]] === 'undefined') {
analysis[wayTagParts[0]][wayTagParts[1]] = {
if (typeof analysis[tagName][wayTagParts[1]] === 'undefined') {
analysis[tagName][wayTagParts[1]] = {
formatted_name: i18next.t(
'sidebar.analysis.data.' + wayTagParts[0] + '.' + wayTagParts[1],
'sidebar.analysis.data.' + tagName + '.' + wayTagParts[1],
wayTagParts[1]
),
name: wayTagParts[1],
@ -178,7 +179,7 @@ BR.TrackAnalysis = L.Class.extend({
distance: 0.0,
};
}
analysis[wayTagParts[0]][wayTagParts[1]].distance += parseFloat(
analysis[tagName][wayTagParts[1]].distance += parseFloat(
segments[segmentIndex].feature.properties.messages[messageIndex][3]
);
break;
@ -190,6 +191,31 @@ BR.TrackAnalysis = L.Class.extend({
return this.sortAnalysisData(analysis);
},
/**
* Normalize the tag name.
*
* Motivation: The `surface` tag comes in different variations,
* e.g. `surface`, `cycleway:surface` etc. We're only interested
* in the main tag so all other variations are normalized.
*
* @param {string} tagName
* @returns {string}
*/
normalizeTagName: function (tagName) {
// we assume that a tag belongs to the category `surface`,
// if that string is contained anywhere in the tag name:
if (tagName.indexOf('surface') !== -1) {
return 'surface';
}
// the same applies to `smoothness`
if (tagName.indexOf('smoothness') !== -1) {
return 'smoothness';
}
return tagName;
},
/**
* Transform analysis data for each type into an array, sort it
* by distance descending and convert it back to an object.
@ -474,22 +500,31 @@ BR.TrackAnalysis = L.Class.extend({
return parsed.highway === dataName;
case 'surface':
if (dataName === 'internal-unknown' && typeof parsed.surface !== 'string') {
return true;
}
return typeof parsed.surface === 'string' && parsed.surface === dataName;
return this.singleWayTagMatchesData('surface', parsed, dataName);
case 'smoothness':
if (dataName === 'internal-unknown' && typeof parsed.smoothness !== 'string') {
return true;
}
return typeof parsed.smoothness === 'string' && parsed.smoothness === dataName;
return this.singleWayTagMatchesData('smoothness', parsed, dataName);
}
return false;
},
singleWayTagMatchesData: function (category, parsedData, lookupValue) {
var foundValue = null;
for (var iterationKey in parsedData) {
if (iterationKey.indexOf(category) !== -1) {
foundValue = parsedData[iterationKey];
break;
}
}
if (lookupValue === 'internal-unknown' && foundValue === null) {
return true;
}
return foundValue === lookupValue;
},
/**
* Transform a way tags string into an object, for example:
*