From 89fab33f9c3624fa223ef3f6abb15a2658adb8fb Mon Sep 17 00:00:00 2001 From: Bryce Cogswell Date: Sun, 28 Jun 2020 20:09:34 -0700 Subject: [PATCH] When reversing a way also reverse direction=forward/backward tags on nodes --- src/Shared/OsmMapData+Edit.m | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/Shared/OsmMapData+Edit.m b/src/Shared/OsmMapData+Edit.m index 9ade65285..c93550723 100644 --- a/src/Shared/OsmMapData+Edit.m +++ b/src/Shared/OsmMapData+Edit.m @@ -600,6 +600,10 @@ - (EditAction)canReverseWay:(OsmWay *)way error:(NSString **)error @"east" : @"west", @"west" : @"east" }; + NSDictionary * nodeReversals = @{ + @"forward" : @"backward", + @"backward" : @"forward", + }; return ^{ [self registerUndoCommentString:NSLocalizedString(@"Reverse",nil)]; @@ -613,14 +617,25 @@ - (EditAction)canReverseWay:(OsmWay *)way error:(NSString **)error [self deleteNodeInWayUnsafe:way index:way.nodes.count-1 preserveNode:NO]; } - // reverse tags - __block NSMutableDictionary * newTags = [NSMutableDictionary new]; + // reverse tags on way + __block NSMutableDictionary * newWayTags = [NSMutableDictionary new]; [way.tags enumerateKeysAndObjectsUsingBlock:^(NSString * k, NSString * v, BOOL *stop) { k = reverseKey(k); v = reverseValue(k, v); - [newTags setObject:v forKey:k]; + [newWayTags setObject:v forKey:k]; }]; - [self setTags:newTags forObject:way]; + [self setTags:newWayTags forObject:way]; + + // reverse direction tags on nodes in way + for ( OsmNode * node in way.nodes ) { + NSString * value = node.tags[@"direction"]; + NSString * replacement = nodeReversals[ value ]; + if ( replacement ) { + NSMutableDictionary * nodeTags = [node.tags mutableCopy]; + nodeTags[ @"direction" ] = replacement; + [self setTags:nodeTags forObject:node]; + } + } // reverse roles in relations the way belongs to for ( OsmRelation * relation in way.parentRelations ) {