Fix turn lanes

This commit is contained in:
Victor Shcherb 2016-06-15 00:59:00 +02:00
parent 0927e79974
commit ad4d02eddd
2 changed files with 23 additions and 9 deletions

View file

@ -492,6 +492,7 @@ public class RouteDataObject {
public String toString() { public String toString() {
String name = getName(); String name = getName();
String rf = getRef(); String rf = getRef();
return MessageFormat.format("Road id {0} name {1} ref {2}", getId()+"", name == null ? "" : name, rf == null ? "" : rf); return MessageFormat.format("Road id {0} name {1} ref {2}", (getId() / 64) + "", name == null ? "" : name,
rf == null ? "" : rf);
} }
} }

View file

@ -596,9 +596,20 @@ public class RouteResultPreparation {
active.activeStartIndex = active.activeStartIndex + target.activeStartIndex; active.activeStartIndex = active.activeStartIndex + target.activeStartIndex;
changed = true; changed = true;
} else { } else {
// cause the next-turn goes forward exclude left most and right most lane
if(active.activeStartIndex == 0) {
active.activeStartIndex ++;
active.activeLen--;
}
if(active.activeEndIndex == active.originalLanes.length - 1) {
active.activeEndIndex --;
active.activeLen--;
}
float ratio = (active.activeLen - target.activeLen) / 2f; float ratio = (active.activeLen - target.activeLen) / 2f;
active.activeEndIndex = (int) Math.ceil(active.activeEndIndex - ratio); if(ratio > 0) {
active.activeStartIndex = (int) Math.floor(active.activeStartIndex + ratio); active.activeEndIndex = (int) Math.ceil(active.activeEndIndex - ratio);
active.activeStartIndex = (int) Math.floor(active.activeStartIndex + ratio);
}
changed = true; changed = true;
} }
} }
@ -750,26 +761,28 @@ public class RouteResultPreparation {
// but is allowed and being used here. This section adds in that indicator. The same applies for where leftSide is true. // but is allowed and being used here. This section adds in that indicator. The same applies for where leftSide is true.
boolean leftTurn = TurnType.isLeftTurn(mainTurnType); boolean leftTurn = TurnType.isLeftTurn(mainTurnType);
int ind = leftTurn? 0 : lanesArray.length - 1; int ind = leftTurn? 0 : lanesArray.length - 1;
final int tt = TurnType.getPrimaryTurn(lanesArray[ind]); int primaryTurn = TurnType.getPrimaryTurn(lanesArray[ind]);
final int st = TurnType.getSecondaryTurn(lanesArray[ind]); final int st = TurnType.getSecondaryTurn(lanesArray[ind]);
if (leftTurn) { if (leftTurn) {
if (!TurnType.isLeftTurn(tt)) { if (!TurnType.isLeftTurn(primaryTurn)) {
// This was just to make sure that there's no bad data. // This was just to make sure that there's no bad data.
TurnType.setPrimaryTurnAndReset(lanesArray, ind, TurnType.TL); TurnType.setPrimaryTurnAndReset(lanesArray, ind, TurnType.TL);
TurnType.setSecondaryTurn(lanesArray, ind, tt); TurnType.setSecondaryTurn(lanesArray, ind, primaryTurn);
TurnType.setTertiaryTurn(lanesArray, ind, st); TurnType.setTertiaryTurn(lanesArray, ind, st);
primaryTurn = TurnType.TL;
lanesArray[ind] |= 1; lanesArray[ind] |= 1;
} }
} else { } else {
if (!TurnType.isRightTurn(tt)) { if (!TurnType.isRightTurn(primaryTurn)) {
// This was just to make sure that there's no bad data. // This was just to make sure that there's no bad data.
TurnType.setPrimaryTurnAndReset(lanesArray, ind, TurnType.TR); TurnType.setPrimaryTurnAndReset(lanesArray, ind, TurnType.TR);
TurnType.setSecondaryTurn(lanesArray, ind, tt); TurnType.setSecondaryTurn(lanesArray, ind, primaryTurn);
TurnType.setTertiaryTurn(lanesArray, ind, st); TurnType.setTertiaryTurn(lanesArray, ind, st);
primaryTurn = TurnType.TR;
lanesArray[ind] |= 1; lanesArray[ind] |= 1;
} }
} }
setAllowedLanes(tt, lanesArray); setAllowedLanes(primaryTurn, lanesArray);
} }
return lanesArray; return lanesArray;
} }