|
@@ -854,18 +854,16 @@ export default class RoadService {
|
|
|
const distance1 = mathUtil.getDistance(startJoin1, mid);
|
|
|
const distance2 = mathUtil.getDistance(startJoin2, mid);
|
|
|
|
|
|
- if (road.midDivide == null) {
|
|
|
- road.midDivide = {};
|
|
|
- }
|
|
|
+ let laneStart, laneEnd, line, join;
|
|
|
|
|
|
if (!dir || dir == "start") {
|
|
|
if (distance1 > distance2) {
|
|
|
- road.midDivide.start = {
|
|
|
+ laneStart = {
|
|
|
x: startJoin2.x,
|
|
|
y: startJoin2.y,
|
|
|
};
|
|
|
} else {
|
|
|
- road.midDivide.start = {
|
|
|
+ laneStart = {
|
|
|
x: startJoin1.x,
|
|
|
y: startJoin1.y,
|
|
|
};
|
|
@@ -874,28 +872,41 @@ export default class RoadService {
|
|
|
if (road.way == Constant.twoWay) {
|
|
|
//更新车道的起点和终点,因为车道的起点和终点的位置与中间隔离栏一致
|
|
|
for (let i = 0; i < road.leftLanes.length; ++i) {
|
|
|
- const line = mathUtil.createLine1(
|
|
|
+ line = mathUtil.createLine1(
|
|
|
road.leftLanes[i].start,
|
|
|
road.leftLanes[i].end
|
|
|
);
|
|
|
- const join = mathUtil.getJoinLinePoint(road.midDivide.start, line);
|
|
|
+ join = mathUtil.getJoinLinePoint(laneStart, line);
|
|
|
mathUtil.clonePoint(road.leftLanes[i].start, join);
|
|
|
}
|
|
|
for (let i = 0; i < road.rightLanes.length; ++i) {
|
|
|
- const line = mathUtil.createLine1(
|
|
|
+ line = mathUtil.createLine1(
|
|
|
road.rightLanes[i].start,
|
|
|
road.rightLanes[i].end
|
|
|
);
|
|
|
- const join = mathUtil.getJoinLinePoint(road.midDivide.start, line);
|
|
|
+ join = mathUtil.getJoinLinePoint(laneStart, line);
|
|
|
mathUtil.clonePoint(road.rightLanes[i].start, join);
|
|
|
}
|
|
|
+ line = mathUtil.createLine1(
|
|
|
+ road.midDivide.leftMidDivide.start,
|
|
|
+ road.midDivide.leftMidDivide.end
|
|
|
+ );
|
|
|
+ join = mathUtil.getJoinLinePoint(laneStart, line);
|
|
|
+ mathUtil.clonePoint(road.midDivide.leftMidDivide.start, join);
|
|
|
+
|
|
|
+ line = mathUtil.createLine1(
|
|
|
+ road.midDivide.rightMidDivide.start,
|
|
|
+ road.midDivide.rightMidDivide.end
|
|
|
+ );
|
|
|
+ join = mathUtil.getJoinLinePoint(laneStart, line);
|
|
|
+ mathUtil.clonePoint(road.midDivide.rightMidDivide.start, join);
|
|
|
} else if (road.way == Constant.oneWay) {
|
|
|
for (let i = 0; i < road.singleLanes.length; ++i) {
|
|
|
const line = mathUtil.createLine1(
|
|
|
road.singleLanes[i].start,
|
|
|
road.singleLanes[i].end
|
|
|
);
|
|
|
- const join = mathUtil.getJoinLinePoint(road.midDivide.start, line);
|
|
|
+ const join = mathUtil.getJoinLinePoint(laneStart, line);
|
|
|
mathUtil.clonePoint(road.singleLanes[i].start, join);
|
|
|
}
|
|
|
}
|
|
@@ -907,12 +918,12 @@ export default class RoadService {
|
|
|
const distance4 = mathUtil.getDistance(endJoin2, mid);
|
|
|
if (!dir || dir == "end") {
|
|
|
if (distance3 > distance4) {
|
|
|
- road.midDivide.end = {
|
|
|
+ laneEnd = {
|
|
|
x: endJoin2.x,
|
|
|
y: endJoin2.y,
|
|
|
};
|
|
|
} else {
|
|
|
- road.midDivide.end = {
|
|
|
+ laneEnd = {
|
|
|
x: endJoin1.x,
|
|
|
y: endJoin1.y,
|
|
|
};
|
|
@@ -921,28 +932,41 @@ export default class RoadService {
|
|
|
if (road.way == Constant.twoWay) {
|
|
|
//更新车道的起点和终点,因为车道的起点和终点的位置与中间隔离栏一致
|
|
|
for (let i = 0; i < road.leftLanes.length; ++i) {
|
|
|
- const line = mathUtil.createLine1(
|
|
|
+ line = mathUtil.createLine1(
|
|
|
road.leftLanes[i].start,
|
|
|
road.leftLanes[i].end
|
|
|
);
|
|
|
- const join = mathUtil.getJoinLinePoint(road.midDivide.end, line);
|
|
|
+ join = mathUtil.getJoinLinePoint(laneEnd, line);
|
|
|
mathUtil.clonePoint(road.leftLanes[i].end, join);
|
|
|
}
|
|
|
for (let i = 0; i < road.rightLanes.length; ++i) {
|
|
|
- const line = mathUtil.createLine1(
|
|
|
+ line = mathUtil.createLine1(
|
|
|
road.rightLanes[i].start,
|
|
|
road.rightLanes[i].end
|
|
|
);
|
|
|
- const join = mathUtil.getJoinLinePoint(road.midDivide.end, line);
|
|
|
+ join = mathUtil.getJoinLinePoint(laneEnd, line);
|
|
|
mathUtil.clonePoint(road.rightLanes[i].end, join);
|
|
|
}
|
|
|
+ line = mathUtil.createLine1(
|
|
|
+ road.midDivide.leftMidDivide.start,
|
|
|
+ road.midDivide.leftMidDivide.end
|
|
|
+ );
|
|
|
+ join = mathUtil.getJoinLinePoint(laneEnd, line);
|
|
|
+ mathUtil.clonePoint(road.midDivide.leftMidDivide.end, join);
|
|
|
+
|
|
|
+ line = mathUtil.createLine1(
|
|
|
+ road.midDivide.rightMidDivide.start,
|
|
|
+ road.midDivide.rightMidDivide.end
|
|
|
+ );
|
|
|
+ join = mathUtil.getJoinLinePoint(laneEnd, line);
|
|
|
+ mathUtil.clonePoint(road.midDivide.rightMidDivide.end, join);
|
|
|
} else if (road.way == Constant.oneWay) {
|
|
|
for (let i = 0; i < road.singleLanes.length; ++i) {
|
|
|
const line = mathUtil.createLine1(
|
|
|
road.singleLanes[i].start,
|
|
|
road.singleLanes[i].end
|
|
|
);
|
|
|
- const join = mathUtil.getJoinLinePoint(road.midDivide.end, line);
|
|
|
+ const join = mathUtil.getJoinLinePoint(laneEnd, line);
|
|
|
mathUtil.clonePoint(road.singleLanes[i].end, join);
|
|
|
}
|
|
|
}
|
|
@@ -999,6 +1023,14 @@ export default class RoadService {
|
|
|
let endPoint = dataService.getRoadPoint(road.endId);
|
|
|
let leftEdge = dataService.getRoadEdge(road.leftEdgeId);
|
|
|
let rightEdge = dataService.getRoadEdge(road.rightEdgeId);
|
|
|
+
|
|
|
+ if (!road.midDivide) {
|
|
|
+ road.midDivide = {
|
|
|
+ leftMidDivide: {},
|
|
|
+ rightMidDivide: {},
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
const leftCount = road.leftDrivewayCount;
|
|
|
const rightCount = road.rightDrivewayCount;
|
|
|
const leftRatio =
|
|
@@ -1034,12 +1066,20 @@ export default class RoadService {
|
|
|
road.leftLanes[i].start = {};
|
|
|
road.leftLanes[i].start.x = startPoint.x + middx1 + leftdx1 * (i + 1);
|
|
|
road.leftLanes[i].start.y = startPoint.y + middy1 + leftdy1 * (i + 1);
|
|
|
+
|
|
|
+ road.midDivide.leftMidDivide.start = {};
|
|
|
+ road.midDivide.leftMidDivide.start.x = startPoint.x + middx1;
|
|
|
+ road.midDivide.leftMidDivide.start.y = startPoint.y + middy1;
|
|
|
}
|
|
|
|
|
|
if (dir2 == "end" || !dir2) {
|
|
|
road.leftLanes[i].end = {};
|
|
|
road.leftLanes[i].end.x = endPoint.x + middx2 + leftdx2 * (i + 1);
|
|
|
road.leftLanes[i].end.y = endPoint.y + middy2 + leftdy2 * (i + 1);
|
|
|
+
|
|
|
+ road.midDivide.leftMidDivide.end = {};
|
|
|
+ road.midDivide.leftMidDivide.end.x = endPoint.x + middx2;
|
|
|
+ road.midDivide.leftMidDivide.end.y = endPoint.y + middy2;
|
|
|
}
|
|
|
}
|
|
|
road.leftLanes.splice(leftCount - 1);
|
|
@@ -1061,12 +1101,20 @@ export default class RoadService {
|
|
|
startPoint.x + middx1 + rightdx1 * (i + 1);
|
|
|
road.rightLanes[i].start.y =
|
|
|
startPoint.y + middy1 + rightdy1 * (i + 1);
|
|
|
+
|
|
|
+ road.midDivide.rightMidDivide.start = {};
|
|
|
+ road.midDivide.rightMidDivide.start.x = startPoint.x + middx1;
|
|
|
+ road.midDivide.rightMidDivide.start.y = startPoint.y + middy1;
|
|
|
}
|
|
|
|
|
|
if (dir2 == "end" || !dir2) {
|
|
|
road.rightLanes[i].end = {};
|
|
|
road.rightLanes[i].end.x = endPoint.x + middx2 + rightdx2 * (i + 1);
|
|
|
road.rightLanes[i].end.y = endPoint.y + middy2 + rightdy2 * (i + 1);
|
|
|
+
|
|
|
+ road.midDivide.rightMidDivide.end = {};
|
|
|
+ road.midDivide.rightMidDivide.end.x = endPoint.x + middx2;
|
|
|
+ road.midDivide.rightMidDivide.end.y = endPoint.y + middy2;
|
|
|
}
|
|
|
}
|
|
|
road.rightLanes.splice(rightCount - 1);
|