Reverse degree and compass values on direction tags when reversing points

This commit is contained in:
Quincy Morgan
2019-09-17 16:43:55 -04:00
parent 8b1c9fe323
commit c80c72ca78
+31 -5
View File
@@ -53,6 +53,17 @@ export function actionReverse(entityID, options) {
'-1': 'yes'
};
var compassReplacements = {
N: 'S',
NE: 'SW',
E: 'W',
SE: 'NW',
S: 'N',
SW: 'NE',
W: 'E',
NW: 'SE'
};
function reverseKey(key) {
for (var i = 0; i < keyReplacements.length; ++i) {
@@ -65,19 +76,34 @@ export function actionReverse(entityID, options) {
}
function reverseValue(key, value) {
function reverseValue(key, value, includeAbsolute) {
if (ignoreKey.test(key)) return value;
// Turn lanes are left/right to key (not way) direction - #5674
if (turn_lanes.test(key)) {
return value;
} else if (key === 'incline' && numeric.test(value)) {
return value.replace(numeric, function(_, sign) { return sign === '-' ? '' : '-'; });
} else if (options && options.reverseOneway && key === 'oneway') {
return onewayReplacements[value] || value;
} else {
return valueReplacements[value] || value;
} else if (includeAbsolute && key.endsWith('direction')) {
if (compassReplacements[value]) return compassReplacements[value];
var degrees = parseFloat(value);
if (degrees && !isNaN(degrees)) {
if (degrees < 180) {
degrees += 180;
} else {
degrees -= 180;
}
return degrees.toString();
}
}
return valueReplacements[value] || value;
}
@@ -89,7 +115,7 @@ export function actionReverse(entityID, options) {
var tags = {};
for (var key in node.tags) {
tags[reverseKey(key)] = reverseValue(key, node.tags[key]);
tags[reverseKey(key)] = reverseValue(key, node.tags[key], node.id === entityID);
}
graph = graph.replace(node.update({tags: tags}));
}
@@ -136,7 +162,7 @@ export function actionReverse(entityID, options) {
for (var key in entity.tags) {
var value = entity.tags[key];
if (reverseKey(key) !== key || reverseValue(key, value) !== value) {
if (reverseKey(key) !== key || reverseValue(key, value, true) !== value) {
return false;
}
}