|
@@ -26,31 +26,13 @@ export default class RoadService {
|
|
|
|
|
|
let edgePoints;
|
|
|
if (road.way == Constant.oneWay) {
|
|
|
- edgePoints = mathUtil.RectangleVertex(
|
|
|
- startPoint,
|
|
|
- endPoint,
|
|
|
- road.singleRoadWidth
|
|
|
- );
|
|
|
+ edgePoints = mathUtil.RectangleVertex(startPoint, endPoint, road.singleRoadWidth);
|
|
|
} else {
|
|
|
- edgePoints = mathUtil.RectangleVertex(
|
|
|
- startPoint,
|
|
|
- endPoint,
|
|
|
- road.leftWidth + road.rightWidth + road.midDivide.midDivideWidth
|
|
|
- );
|
|
|
+ edgePoints = mathUtil.RectangleVertex(startPoint, endPoint, road.leftWidth + road.rightWidth + road.midDivide.midDivideWidth);
|
|
|
}
|
|
|
- let leftEdge = edgeService.create(
|
|
|
- edgePoints.leftEdgeStart,
|
|
|
- edgePoints.leftEdgeEnd,
|
|
|
- null,
|
|
|
- vectorId
|
|
|
- );
|
|
|
-
|
|
|
- let rightEdge = edgeService.create(
|
|
|
- edgePoints.rightEdgeStart,
|
|
|
- edgePoints.rightEdgeEnd,
|
|
|
- null,
|
|
|
- vectorId
|
|
|
- );
|
|
|
+ let leftEdge = edgeService.create(edgePoints.leftEdgeStart, edgePoints.leftEdgeEnd, null, vectorId);
|
|
|
+
|
|
|
+ let rightEdge = edgeService.create(edgePoints.rightEdgeStart, edgePoints.rightEdgeEnd, null, vectorId);
|
|
|
|
|
|
road.setLeftEdge(leftEdge.vectorId);
|
|
|
road.setRightEdge(rightEdge.vectorId);
|
|
@@ -99,31 +81,13 @@ export default class RoadService {
|
|
|
|
|
|
let edgePoints;
|
|
|
if (newRoad.way == Constant.oneWay) {
|
|
|
- edgePoints = mathUtil.RectangleVertex(
|
|
|
- newStartPoint,
|
|
|
- newEndPoint,
|
|
|
- road.singleRoadWidth
|
|
|
- );
|
|
|
+ edgePoints = mathUtil.RectangleVertex(newStartPoint, newEndPoint, road.singleRoadWidth);
|
|
|
} else {
|
|
|
- edgePoints = mathUtil.RectangleVertex(
|
|
|
- newStartPoint,
|
|
|
- newEndPoint,
|
|
|
- road.leftWidth + road.rightWidth + road.midDivide.midDivideWidth
|
|
|
- );
|
|
|
+ edgePoints = mathUtil.RectangleVertex(newStartPoint, newEndPoint, road.leftWidth + road.rightWidth + road.midDivide.midDivideWidth);
|
|
|
}
|
|
|
- let leftEdge = edgeService.create(
|
|
|
- edgePoints.leftEdgeStart,
|
|
|
- edgePoints.leftEdgeEnd,
|
|
|
- null,
|
|
|
- vectorId
|
|
|
- );
|
|
|
-
|
|
|
- let rightEdge = edgeService.create(
|
|
|
- edgePoints.rightEdgeStart,
|
|
|
- edgePoints.rightEdgeEnd,
|
|
|
- null,
|
|
|
- vectorId
|
|
|
- );
|
|
|
+ let leftEdge = edgeService.create(edgePoints.leftEdgeStart, edgePoints.leftEdgeEnd, null, vectorId);
|
|
|
+
|
|
|
+ let rightEdge = edgeService.create(edgePoints.rightEdgeStart, edgePoints.rightEdgeEnd, null, vectorId);
|
|
|
|
|
|
newRoad.setLeftEdge(leftEdge.vectorId);
|
|
|
newRoad.setRightEdge(rightEdge.vectorId);
|
|
@@ -151,9 +115,11 @@ export default class RoadService {
|
|
|
newRoad.rightDrivewayCount = road.rightDrivewayCount;
|
|
|
if (oldLeftEdge.roadSide) {
|
|
|
leftEdge.initRoadSide();
|
|
|
+ leftEdge.setRoadSideWidth(oldLeftEdge.roadSide.width);
|
|
|
}
|
|
|
if (oldRightEdge.roadSide) {
|
|
|
rightEdge.initRoadSide();
|
|
|
+ rightEdge.setRoadSideWidth(oldLeftEdge.roadSide.width);
|
|
|
}
|
|
|
this.setLanes(newRoad.vectorId);
|
|
|
this.initRoadWidthTipsPos(newRoad);
|
|
@@ -174,10 +140,7 @@ export default class RoadService {
|
|
|
const startPoint = dataService.getRoadPoint(road.startId);
|
|
|
const endPoint = dataService.getRoadPoint(road.endId);
|
|
|
const point = dataService.getRoadPoint(pointId);
|
|
|
- if (
|
|
|
- mathUtil.getDistance(startPoint, point) < Constant.minAdsorbPix ||
|
|
|
- mathUtil.getDistance(endPoint, point) < Constant.minAdsorbPix
|
|
|
- ) {
|
|
|
+ if (mathUtil.getDistance(startPoint, point) < Constant.minAdsorbPix || mathUtil.getDistance(endPoint, point) < Constant.minAdsorbPix) {
|
|
|
}
|
|
|
|
|
|
let leftEdge = dataService.getRoadEdge(road.leftEdgeId);
|
|
@@ -235,11 +198,7 @@ export default class RoadService {
|
|
|
crossPointService.replaceEdgeId(cpt, road.leftEdgeId, newRoad.leftEdgeId);
|
|
|
|
|
|
cpt = dataService.getCrossPointForEdgeId(road.rightEdgeId, "end");
|
|
|
- crossPointService.replaceEdgeId(
|
|
|
- cpt,
|
|
|
- road.rightEdgeId,
|
|
|
- newRoad.rightEdgeId
|
|
|
- );
|
|
|
+ crossPointService.replaceEdgeId(cpt, road.rightEdgeId, newRoad.rightEdgeId);
|
|
|
|
|
|
let newRoadLeftEdge = dataService.getRoadEdge(newRoad.leftEdgeId);
|
|
|
mathUtil.clonePoint(newRoadLeftEdge.end, oldLeftEdgeEndPoint);
|
|
@@ -256,11 +215,7 @@ export default class RoadService {
|
|
|
crossPointService.replaceEdgeId(cpt, road.leftEdgeId, newRoad.leftEdgeId);
|
|
|
|
|
|
cpt = dataService.getCrossPointForEdgeId(road.rightEdgeId, "start");
|
|
|
- crossPointService.replaceEdgeId(
|
|
|
- cpt,
|
|
|
- road.rightEdgeId,
|
|
|
- newRoad.rightEdgeId
|
|
|
- );
|
|
|
+ crossPointService.replaceEdgeId(cpt, road.rightEdgeId, newRoad.rightEdgeId);
|
|
|
|
|
|
let newRoadLeftEdge = dataService.getRoadEdge(newRoad.leftEdgeId);
|
|
|
mathUtil.clonePoint(newRoadLeftEdge.start, oldLeftEdgeStartPoint);
|
|
@@ -323,12 +278,7 @@ export default class RoadService {
|
|
|
const road1 = dataService.getRoad(id1);
|
|
|
const road2 = dataService.getRoad(id2);
|
|
|
|
|
|
- if (
|
|
|
- road1 == null ||
|
|
|
- road2 == null ||
|
|
|
- typeof road1 === "undefined" ||
|
|
|
- typeof road2 === "undefined"
|
|
|
- ) {
|
|
|
+ if (road1 == null || road2 == null || typeof road1 === "undefined" || typeof road2 === "undefined") {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
@@ -379,12 +329,7 @@ export default class RoadService {
|
|
|
const road1 = dataService.getRoad(id1);
|
|
|
const road2 = dataService.getRoad(id2);
|
|
|
|
|
|
- if (
|
|
|
- road1 == null ||
|
|
|
- road2 == null ||
|
|
|
- typeof road1 === "undefined" ||
|
|
|
- typeof road2 === "undefined"
|
|
|
- ) {
|
|
|
+ if (road1 == null || road2 == null || typeof road1 === "undefined" || typeof road2 === "undefined") {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
@@ -439,12 +384,7 @@ export default class RoadService {
|
|
|
const road1 = dataService.getRoad(id1);
|
|
|
const road2 = dataService.getRoad(id2);
|
|
|
|
|
|
- if (
|
|
|
- road1 == null ||
|
|
|
- road2 == null ||
|
|
|
- typeof road1 === "undefined" ||
|
|
|
- typeof road2 === "undefined"
|
|
|
- ) {
|
|
|
+ if (road1 == null || road2 == null || typeof road1 === "undefined" || typeof road2 === "undefined") {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
@@ -483,9 +423,7 @@ export default class RoadService {
|
|
|
_start1.y = start1.y + end2.y - end1.y;
|
|
|
return mathUtil.Angle(end2, _start1, start2);
|
|
|
} else {
|
|
|
- console.error(
|
|
|
- "RoadService.AngleForRoad3************************************1"
|
|
|
- );
|
|
|
+ console.error("RoadService.AngleForRoad3************************************1");
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
@@ -563,9 +501,7 @@ export default class RoadService {
|
|
|
|
|
|
return result;
|
|
|
} else {
|
|
|
- console.error(
|
|
|
- "roadIdForMinAngle*********************************************************"
|
|
|
- );
|
|
|
+ console.error("roadIdForMinAngle*********************************************************");
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
@@ -574,12 +510,7 @@ export default class RoadService {
|
|
|
let road1 = dataService.getRoad(roadId1);
|
|
|
let road2 = dataService.getRoad(roadId2);
|
|
|
|
|
|
- if (
|
|
|
- road1.startId == road2.startId ||
|
|
|
- road1.startId == road2.endId ||
|
|
|
- road1.endId == road2.startId ||
|
|
|
- road1.endId == road2.endId
|
|
|
- ) {
|
|
|
+ if (road1.startId == road2.startId || road1.startId == road2.endId || road1.endId == road2.startId || road1.endId == road2.endId) {
|
|
|
return true;
|
|
|
} else {
|
|
|
return false;
|
|
@@ -601,9 +532,7 @@ export default class RoadService {
|
|
|
} else if (road.endId == pointId) {
|
|
|
return "end";
|
|
|
} else {
|
|
|
- console.error(
|
|
|
- "RoadService.getDirction*******************************************************************************************"
|
|
|
- );
|
|
|
+ console.error("RoadService.getDirction*******************************************************************************************");
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
@@ -617,10 +546,7 @@ export default class RoadService {
|
|
|
return;
|
|
|
} else if (Object.keys(parent).length > 2) {
|
|
|
const info = this.roadIdForMinAngle(pointId, roadId);
|
|
|
- edgeService.updateSingleEdgeForTwoRoad(
|
|
|
- info.min0.roadId,
|
|
|
- info.min1.roadId
|
|
|
- );
|
|
|
+ edgeService.updateSingleEdgeForTwoRoad(info.min0.roadId, info.min1.roadId);
|
|
|
}
|
|
|
|
|
|
// 第一步先断开链接
|
|
@@ -657,10 +583,7 @@ export default class RoadService {
|
|
|
|
|
|
setRoadInfo(vectorInfo) {
|
|
|
const road = dataService.getRoad(vectorInfo.roadId);
|
|
|
- if (
|
|
|
- vectorInfo.hasOwnProperty("edgeId") &&
|
|
|
- vectorInfo.hasOwnProperty("dir")
|
|
|
- ) {
|
|
|
+ if (vectorInfo.hasOwnProperty("edgeId") && vectorInfo.hasOwnProperty("dir")) {
|
|
|
if (vectorInfo.dir == "left") {
|
|
|
road.leftEdgeId = vectorInfo.edgeId;
|
|
|
} else if (vectorInfo.dir == "right") {
|
|
@@ -668,10 +591,7 @@ export default class RoadService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (
|
|
|
- vectorInfo.hasOwnProperty("pointId") &&
|
|
|
- vectorInfo.hasOwnProperty("dir")
|
|
|
- ) {
|
|
|
+ if (vectorInfo.hasOwnProperty("pointId") && vectorInfo.hasOwnProperty("dir")) {
|
|
|
if (vectorInfo.dir == "start") {
|
|
|
road.startId = vectorInfo.pointId;
|
|
|
} else if (vectorInfo.dir == "end") {
|
|
@@ -684,12 +604,7 @@ export default class RoadService {
|
|
|
let road1 = dataService.getRoad(id1);
|
|
|
let road2 = dataService.getRoad(id2);
|
|
|
|
|
|
- if (
|
|
|
- road1 == null ||
|
|
|
- road2 == null ||
|
|
|
- typeof road1 == "undefined" ||
|
|
|
- typeof road2 == "undefined"
|
|
|
- ) {
|
|
|
+ if (road1 == null || road2 == null || typeof road1 == "undefined" || typeof road2 == "undefined") {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
@@ -812,9 +727,7 @@ export default class RoadService {
|
|
|
|
|
|
return result;
|
|
|
} else {
|
|
|
- console.error(
|
|
|
- "roadIdForMinAngle*********************************************************"
|
|
|
- );
|
|
|
+ console.error("roadIdForMinAngle*********************************************************");
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
@@ -826,9 +739,7 @@ export default class RoadService {
|
|
|
} else if (road.endId == pointId) {
|
|
|
return "end";
|
|
|
} else {
|
|
|
- console.error(
|
|
|
- "getDirction*******************************************************************************************"
|
|
|
- );
|
|
|
+ console.error("getDirction*******************************************************************************************");
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
@@ -906,9 +817,7 @@ export default class RoadService {
|
|
|
|
|
|
return result;
|
|
|
} else {
|
|
|
- console.error(
|
|
|
- "roadIdForMinAngle*********************************************************"
|
|
|
- );
|
|
|
+ console.error("roadIdForMinAngle*********************************************************");
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
@@ -986,40 +895,25 @@ export default class RoadService {
|
|
|
if (road.way == Constant.twoWay) {
|
|
|
//更新车道的起点和终点,因为车道的起点和终点的位置与中间隔离栏一致
|
|
|
for (let i = 0; i < road.leftLanes.length; ++i) {
|
|
|
- line = mathUtil.createLine1(
|
|
|
- road.leftLanes[i].start,
|
|
|
- road.leftLanes[i].end
|
|
|
- );
|
|
|
+ line = mathUtil.createLine1(road.leftLanes[i].start, road.leftLanes[i].end);
|
|
|
join = mathUtil.getJoinLinePoint(laneStart, line);
|
|
|
mathUtil.clonePoint(road.leftLanes[i].start, join);
|
|
|
}
|
|
|
for (let i = 0; i < road.rightLanes.length; ++i) {
|
|
|
- line = mathUtil.createLine1(
|
|
|
- road.rightLanes[i].start,
|
|
|
- road.rightLanes[i].end
|
|
|
- );
|
|
|
+ line = mathUtil.createLine1(road.rightLanes[i].start, road.rightLanes[i].end);
|
|
|
join = mathUtil.getJoinLinePoint(laneStart, line);
|
|
|
mathUtil.clonePoint(road.rightLanes[i].start, join);
|
|
|
}
|
|
|
- line = mathUtil.createLine1(
|
|
|
- road.midDivide.leftMidDivide.start,
|
|
|
- road.midDivide.leftMidDivide.end
|
|
|
- );
|
|
|
+ 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
|
|
|
- );
|
|
|
+ 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 line = mathUtil.createLine1(road.singleLanes[i].start, road.singleLanes[i].end);
|
|
|
const join = mathUtil.getJoinLinePoint(laneStart, line);
|
|
|
mathUtil.clonePoint(road.singleLanes[i].start, join);
|
|
|
}
|
|
@@ -1046,40 +940,25 @@ export default class RoadService {
|
|
|
if (road.way == Constant.twoWay) {
|
|
|
//更新车道的起点和终点,因为车道的起点和终点的位置与中间隔离栏一致
|
|
|
for (let i = 0; i < road.leftLanes.length; ++i) {
|
|
|
- line = mathUtil.createLine1(
|
|
|
- road.leftLanes[i].start,
|
|
|
- road.leftLanes[i].end
|
|
|
- );
|
|
|
+ line = mathUtil.createLine1(road.leftLanes[i].start, road.leftLanes[i].end);
|
|
|
join = mathUtil.getJoinLinePoint(laneEnd, line);
|
|
|
mathUtil.clonePoint(road.leftLanes[i].end, join);
|
|
|
}
|
|
|
for (let i = 0; i < road.rightLanes.length; ++i) {
|
|
|
- line = mathUtil.createLine1(
|
|
|
- road.rightLanes[i].start,
|
|
|
- road.rightLanes[i].end
|
|
|
- );
|
|
|
+ line = mathUtil.createLine1(road.rightLanes[i].start, road.rightLanes[i].end);
|
|
|
join = mathUtil.getJoinLinePoint(laneEnd, line);
|
|
|
mathUtil.clonePoint(road.rightLanes[i].end, join);
|
|
|
}
|
|
|
- line = mathUtil.createLine1(
|
|
|
- road.midDivide.leftMidDivide.start,
|
|
|
- road.midDivide.leftMidDivide.end
|
|
|
- );
|
|
|
+ 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
|
|
|
- );
|
|
|
+ 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 line = mathUtil.createLine1(road.singleLanes[i].start, road.singleLanes[i].end);
|
|
|
const join = mathUtil.getJoinLinePoint(laneEnd, line);
|
|
|
mathUtil.clonePoint(road.singleLanes[i].end, join);
|
|
|
}
|
|
@@ -1150,10 +1029,8 @@ export default class RoadService {
|
|
|
|
|
|
const leftCount = road.leftDrivewayCount;
|
|
|
const rightCount = road.rightDrivewayCount;
|
|
|
- const leftRatio =
|
|
|
- road.leftWidth / (road.leftWidth + road.midDivide.midDivideWidth / 2);
|
|
|
- const rightRatio =
|
|
|
- road.rightWidth / (road.rightWidth + road.midDivide.midDivideWidth / 2);
|
|
|
+ const leftRatio = road.leftWidth / (road.leftWidth + road.midDivide.midDivideWidth / 2);
|
|
|
+ const rightRatio = road.rightWidth / (road.rightWidth + road.midDivide.midDivideWidth / 2);
|
|
|
|
|
|
let leftdx1 = ((leftEdge.start.x - startPoint.x) * leftRatio) / leftCount;
|
|
|
let leftdy1 = ((leftEdge.start.y - startPoint.y) * leftRatio) / leftCount;
|
|
@@ -1161,10 +1038,8 @@ export default class RoadService {
|
|
|
let leftdx2 = ((leftEdge.end.x - endPoint.x) * leftRatio) / leftCount;
|
|
|
let leftdy2 = ((leftEdge.end.y - endPoint.y) * leftRatio) / leftCount;
|
|
|
|
|
|
- let rightdx1 =
|
|
|
- ((rightEdge.start.x - startPoint.x) * rightRatio) / rightCount;
|
|
|
- let rightdy1 =
|
|
|
- ((rightEdge.start.y - startPoint.y) * rightRatio) / rightCount;
|
|
|
+ let rightdx1 = ((rightEdge.start.x - startPoint.x) * rightRatio) / rightCount;
|
|
|
+ let rightdy1 = ((rightEdge.start.y - startPoint.y) * rightRatio) / rightCount;
|
|
|
|
|
|
let rightdx2 = ((rightEdge.end.x - endPoint.x) * rightRatio) / rightCount;
|
|
|
let rightdy2 = ((rightEdge.end.y - endPoint.y) * rightRatio) / rightCount;
|
|
@@ -1225,10 +1100,8 @@ export default class RoadService {
|
|
|
|
|
|
if (dir2 == "start" || !dir2) {
|
|
|
road.rightLanes[i].start = {};
|
|
|
- road.rightLanes[i].start.x =
|
|
|
- startPoint.x + middx1 + rightdx1 * (i + 1);
|
|
|
- road.rightLanes[i].start.y =
|
|
|
- startPoint.y + middy1 + rightdy1 * (i + 1);
|
|
|
+ road.rightLanes[i].start.x = 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;
|
|
@@ -1288,19 +1161,7 @@ export default class RoadService {
|
|
|
//需要考虑车道个数是0(左或者右)的情况
|
|
|
//单向车道不考虑dir,即:均匀的增加或者删除车道
|
|
|
updateForAddSubtractLanesCount(roadId, newCount, dir) {
|
|
|
- let dx1,
|
|
|
- dy1,
|
|
|
- dx2,
|
|
|
- dy2,
|
|
|
- oldCount,
|
|
|
- edgeStartPosition,
|
|
|
- edgeEndPosition,
|
|
|
- leftRatio,
|
|
|
- rightRatio,
|
|
|
- middx1,
|
|
|
- middy1,
|
|
|
- middx2,
|
|
|
- middy2;
|
|
|
+ let dx1, dy1, dx2, dy2, oldCount, edgeStartPosition, edgeEndPosition, leftRatio, rightRatio, middx1, middy1, middx2, middy2;
|
|
|
let road = dataService.getRoad(roadId);
|
|
|
|
|
|
if (newCount < 1) {
|
|
@@ -1313,10 +1174,8 @@ export default class RoadService {
|
|
|
let rightEdge = dataService.getRoadEdge(road.rightEdgeId);
|
|
|
|
|
|
if (road.way == Constant.twoWay) {
|
|
|
- leftRatio =
|
|
|
- road.leftWidth / (road.leftWidth + road.midDivide.midDivideWidth / 2);
|
|
|
- rightRatio =
|
|
|
- road.rightWidth / (road.rightWidth + road.midDivide.midDivideWidth / 2);
|
|
|
+ leftRatio = road.leftWidth / (road.leftWidth + road.midDivide.midDivideWidth / 2);
|
|
|
+ rightRatio = road.rightWidth / (road.rightWidth + road.midDivide.midDivideWidth / 2);
|
|
|
if (dir == "left") {
|
|
|
oldCount = road.leftDrivewayCount;
|
|
|
if (oldCount != 0) {
|
|
@@ -1382,18 +1241,10 @@ export default class RoadService {
|
|
|
let line = this.getMidLine(road);
|
|
|
if (dir == "left") {
|
|
|
let join = mathUtil.getJoinLinePoint(leftEdge.start, line);
|
|
|
- road.setWidth(
|
|
|
- mathUtil.getDistance(leftEdge.start, join) -
|
|
|
- road.midDivide.midDivideWidth / 2,
|
|
|
- dir
|
|
|
- );
|
|
|
+ road.setWidth(mathUtil.getDistance(leftEdge.start, join) - road.midDivide.midDivideWidth / 2, dir);
|
|
|
} else if (dir == "right") {
|
|
|
let join = mathUtil.getJoinLinePoint(rightEdge.start, line);
|
|
|
- road.setWidth(
|
|
|
- mathUtil.getDistance(rightEdge.start, join) -
|
|
|
- road.midDivide.midDivideWidth / 2,
|
|
|
- dir
|
|
|
- );
|
|
|
+ road.setWidth(mathUtil.getDistance(rightEdge.start, join) - road.midDivide.midDivideWidth / 2, dir);
|
|
|
}
|
|
|
} else if (road.way == Constant.oneWay) {
|
|
|
oldCount = road.singleRoadDrivewayCount;
|
|
@@ -1459,50 +1310,26 @@ export default class RoadService {
|
|
|
road.setWidth(newWidth * 2);
|
|
|
} else if (road.way == Constant.twoWay) {
|
|
|
if (dir == "left") {
|
|
|
- edgePoints = mathUtil.RectangleVertex(
|
|
|
- startPoint,
|
|
|
- endPoint,
|
|
|
- newWidth + road.midDivide.midDivideWidth / 2
|
|
|
- );
|
|
|
+ edgePoints = mathUtil.RectangleVertex(startPoint, endPoint, newWidth + road.midDivide.midDivideWidth / 2);
|
|
|
mathUtil.clonePoint(leftEdge.start, edgePoints.leftEdgeStart);
|
|
|
mathUtil.clonePoint(leftEdge.end, edgePoints.leftEdgeEnd);
|
|
|
road.setWidth(newWidth, dir);
|
|
|
} else if (dir == "right") {
|
|
|
- edgePoints = mathUtil.RectangleVertex(
|
|
|
- startPoint,
|
|
|
- endPoint,
|
|
|
- newWidth + road.midDivide.midDivideWidth / 2
|
|
|
- );
|
|
|
+ edgePoints = mathUtil.RectangleVertex(startPoint, endPoint, newWidth + road.midDivide.midDivideWidth / 2);
|
|
|
mathUtil.clonePoint(rightEdge.start, edgePoints.rightEdgeStart);
|
|
|
mathUtil.clonePoint(rightEdge.end, edgePoints.rightEdgeEnd);
|
|
|
road.setWidth(newWidth, dir);
|
|
|
}
|
|
|
//左右两边的edge同时变宽或者变窄
|
|
|
else {
|
|
|
- edgePoints = mathUtil.RectangleVertex(
|
|
|
- startPoint,
|
|
|
- endPoint,
|
|
|
- (newWidth * road.leftWidth) / (road.leftWidth + road.rightWidth) +
|
|
|
- road.midDivide.midDivideWidth / 2
|
|
|
- );
|
|
|
+ edgePoints = mathUtil.RectangleVertex(startPoint, endPoint, (newWidth * road.leftWidth) / (road.leftWidth + road.rightWidth) + road.midDivide.midDivideWidth / 2);
|
|
|
mathUtil.clonePoint(leftEdge.start, edgePoints.leftEdgeStart);
|
|
|
mathUtil.clonePoint(leftEdge.end, edgePoints.leftEdgeEnd);
|
|
|
- road.setWidth(
|
|
|
- (newWidth * road.leftWidth) / (road.leftWidth + road.rightWidth),
|
|
|
- "left"
|
|
|
- );
|
|
|
- edgePoints = mathUtil.RectangleVertex(
|
|
|
- startPoint,
|
|
|
- endPoint,
|
|
|
- (newWidth * road.rightWidth) / (road.leftWidth + road.rightWidth) +
|
|
|
- road.midDivide.midDivideWidth / 2
|
|
|
- );
|
|
|
+ road.setWidth((newWidth * road.leftWidth) / (road.leftWidth + road.rightWidth), "left");
|
|
|
+ edgePoints = mathUtil.RectangleVertex(startPoint, endPoint, (newWidth * road.rightWidth) / (road.leftWidth + road.rightWidth) + road.midDivide.midDivideWidth / 2);
|
|
|
mathUtil.clonePoint(rightEdge.start, edgePoints.rightEdgeStart);
|
|
|
mathUtil.clonePoint(rightEdge.end, edgePoints.rightEdgeEnd);
|
|
|
- road.setWidth(
|
|
|
- (newWidth * road.rightWidth) / (road.leftWidth + road.rightWidth),
|
|
|
- "right"
|
|
|
- );
|
|
|
+ road.setWidth((newWidth * road.rightWidth) / (road.leftWidth + road.rightWidth), "right");
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1524,46 +1351,50 @@ export default class RoadService {
|
|
|
rightLine.setWeight(rightEdge.getWeight());
|
|
|
if (road.way == Constant.oneWay) {
|
|
|
for (let i = 0; i < road.singleLanes.length; ++i) {
|
|
|
- let laneLine = lineService.create(
|
|
|
- road.singleLanes[i].start,
|
|
|
- road.singleLanes[i].end
|
|
|
- );
|
|
|
+ let laneLine = lineService.create(road.singleLanes[i].start, road.singleLanes[i].end);
|
|
|
laneLine.setStyle(VectorStyle.SingleDashedLine);
|
|
|
}
|
|
|
} else if (road.way == Constant.twoWay) {
|
|
|
for (let i = 0; i < road.leftLanes.length; ++i) {
|
|
|
- let laneLine = lineService.create(
|
|
|
- road.leftLanes[i].start,
|
|
|
- road.leftLanes[i].end
|
|
|
- );
|
|
|
+ let laneLine = lineService.create(road.leftLanes[i].start, road.leftLanes[i].end);
|
|
|
laneLine.setStyle(VectorStyle.SingleDashedLine);
|
|
|
}
|
|
|
for (let i = 0; i < road.rightLanes.length; ++i) {
|
|
|
- let laneLine = lineService.create(
|
|
|
- road.rightLanes[i].start,
|
|
|
- road.rightLanes[i].end
|
|
|
- );
|
|
|
+ let laneLine = lineService.create(road.rightLanes[i].start, road.rightLanes[i].end);
|
|
|
laneLine.setStyle(VectorStyle.SingleDashedLine);
|
|
|
}
|
|
|
- lineService.create(
|
|
|
- road.midDivide.leftMidDivide.start,
|
|
|
- road.midDivide.leftMidDivide.end
|
|
|
- );
|
|
|
- lineService.create(
|
|
|
- road.midDivide.rightMidDivide.start,
|
|
|
- road.midDivide.rightMidDivide.end
|
|
|
- );
|
|
|
+ lineService.create(road.midDivide.leftMidDivide.start, road.midDivide.leftMidDivide.end);
|
|
|
+ lineService.create(road.midDivide.rightMidDivide.start, road.midDivide.rightMidDivide.end);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
initRoadWidthTipsPos(road) {
|
|
|
let leftEdge = dataService.getRoadEdge(road.leftEdgeId);
|
|
|
let rightEdge = dataService.getRoadEdge(road.rightEdgeId);
|
|
|
- let leftEdgePoint = mathUtil.getLinePointPos(leftEdge.start, leftEdge.end);
|
|
|
- let rightEdgePoint = mathUtil.getLinePointPos(
|
|
|
- rightEdge.start,
|
|
|
- rightEdge.end
|
|
|
- );
|
|
|
+ // let leftEdgePoint = mathUtil.getLinePointPos(leftEdge.start, leftEdge.end);
|
|
|
+
|
|
|
+ let roadStartPoint = dataService.getRoadPoint(road.startId);
|
|
|
+ let roadEndPoint = dataService.getRoadPoint(road.endId);
|
|
|
+ let roadInfo = {
|
|
|
+ start: {
|
|
|
+ x: roadStartPoint.x,
|
|
|
+ y: roadStartPoint.y,
|
|
|
+ },
|
|
|
+ end: {
|
|
|
+ x: roadEndPoint.x,
|
|
|
+ y: roadEndPoint.y,
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ // let roadLine = mathUtil.createLine1(road.startId, road.endId);
|
|
|
+ let roadLineCrossPoint = mathUtil.getLinePointPos(roadInfo.start, roadInfo.end);
|
|
|
+
|
|
|
+ let leftEdgeLine = mathUtil.createLine1(leftEdge.start, leftEdge.end);
|
|
|
+ let rightEdgeLine = mathUtil.createLine1(rightEdge.start, rightEdge.end);
|
|
|
+ let leftEdgePoint = mathUtil.getJoinLinePoint(roadLineCrossPoint, leftEdgeLine);
|
|
|
+ let rightEdgePoint = mathUtil.getJoinLinePoint(roadLineCrossPoint, rightEdgeLine);
|
|
|
+
|
|
|
+ // let rightEdgePoint = mathUtil.getLinePointPos(rightEdge.start, rightEdge.end);
|
|
|
let edgeLine = mathUtil.createLine1(leftEdgePoint, rightEdgePoint);
|
|
|
let roadWidthTipsPos = [];
|
|
|
if (road.way == Constant.oneWay) {
|
|
@@ -1572,76 +1403,97 @@ export default class RoadService {
|
|
|
//单向多车道
|
|
|
let crossList = [];
|
|
|
for (let i = 0; i < road.singleLanes.length; i++) {
|
|
|
- let crossLine = mathUtil.createLine1(
|
|
|
- road.singleLanes[i].start,
|
|
|
- road.singleLanes[i].end
|
|
|
- );
|
|
|
- let crossPoint = mathUtil.getIntersectionPoint(edgeLine, crossLine);
|
|
|
- crossList.push(crossPoint);
|
|
|
+ let crossLine = mathUtil.createLine1(road.singleLanes[i].start, road.singleLanes[i].end);
|
|
|
+ // let crossPoint = mathUtil.getIntersectionPoint(edgeLine, crossLine);
|
|
|
+ // crossList.push(crossPoint);
|
|
|
+ crossList.push(crossLine);
|
|
|
}
|
|
|
for (let i = 0; i < crossList.length; i++) {
|
|
|
if (i == 0) {
|
|
|
//第一个位置
|
|
|
- roadWidthTipsPos.push({ start: rightEdgePoint, end: crossList[i] });
|
|
|
+ // roadWidthTipsPos.push({ start: rightEdgePoint, end: crossList[i] });
|
|
|
+ roadWidthTipsPos.push({ start: rightEdgePoint, end: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i]) });
|
|
|
} else {
|
|
|
//以此类推
|
|
|
+
|
|
|
+ let middleEdgePoint1 = mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i - 1]);
|
|
|
+ let middleEdgePoint2 = mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i]);
|
|
|
+ // roadWidthTipsPos.push({
|
|
|
+ // start: crossList[i - 1],
|
|
|
+ // end: crossList[i],
|
|
|
+ // });
|
|
|
+ console.error(middleEdgePoint1);
|
|
|
roadWidthTipsPos.push({
|
|
|
- start: crossList[i - 1],
|
|
|
- end: crossList[i],
|
|
|
+ start: middleEdgePoint1,
|
|
|
+ end: middleEdgePoint2,
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
//最后一个位置
|
|
|
+ // roadWidthTipsPos.push({
|
|
|
+ // start: crossList[crossList.length - 1],
|
|
|
+ // end: leftEdgePoint,
|
|
|
+ // });
|
|
|
+ let a = mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[crossList.length - 1]);
|
|
|
roadWidthTipsPos.push({
|
|
|
- start: crossList[crossList.length - 1],
|
|
|
+ start: a,
|
|
|
end: leftEdgePoint,
|
|
|
});
|
|
|
road.setRoadWidthTipsPos(roadWidthTipsPos);
|
|
|
} else {
|
|
|
- //单向单车道
|
|
|
+ //单向单车道
|
|
|
+
|
|
|
roadWidthTipsPos.push({ start: leftEdgePoint, end: rightEdgePoint });
|
|
|
road.setRoadWidthTipsPos(roadWidthTipsPos);
|
|
|
}
|
|
|
} else if (road.way == Constant.twoWay) {
|
|
|
//双单车道
|
|
|
- let leftMidDividePoint = mathUtil.getLinePointPos(
|
|
|
- road.midDivide.leftMidDivide.start,
|
|
|
- road.midDivide.leftMidDivide.end
|
|
|
- );
|
|
|
- let rightMidDividePoint = mathUtil.getLinePointPos(
|
|
|
- road.midDivide.rightMidDivide.start,
|
|
|
- road.midDivide.rightMidDivide.end
|
|
|
- );
|
|
|
+ // let leftMidDividePoint = mathUtil.getLinePointPos(road.midDivide.leftMidDivide.start, road.midDivide.leftMidDivide.end);
|
|
|
+ // let rightMidDividePoint = mathUtil.getLinePointPos(road.midDivide.rightMidDivide.start, road.midDivide.rightMidDivide.end);
|
|
|
+
|
|
|
+ let leftMidDivideLine = mathUtil.createLine1(road.midDivide.leftMidDivide.start, road.midDivide.leftMidDivide.end);
|
|
|
+ let rightMidDividePointLine = mathUtil.createLine1(road.midDivide.rightMidDivide.start, road.midDivide.rightMidDivide.end);
|
|
|
+ let leftMidDividePoint = mathUtil.getJoinLinePoint(roadLineCrossPoint, leftMidDivideLine);
|
|
|
+ let rightMidDividePoint = mathUtil.getJoinLinePoint(roadLineCrossPoint, rightMidDividePointLine);
|
|
|
|
|
|
// leftLanes,rightLanes
|
|
|
if (road.leftLanes.length) {
|
|
|
let crossList = [];
|
|
|
for (let i = 0; i < road.leftLanes.length; i++) {
|
|
|
- let crossLine = mathUtil.createLine1(
|
|
|
- road.leftLanes[i].start,
|
|
|
- road.leftLanes[i].end
|
|
|
- );
|
|
|
- let crossPoint = mathUtil.getIntersectionPoint(edgeLine, crossLine);
|
|
|
- crossList.push(crossPoint);
|
|
|
+ let crossLine = mathUtil.createLine1(road.leftLanes[i].start, road.leftLanes[i].end);
|
|
|
+ // let crossPoint = mathUtil.getIntersectionPoint(edgeLine, crossLine);
|
|
|
+ // crossList.push(crossPoint);
|
|
|
+
|
|
|
+ crossList.push(crossLine);
|
|
|
}
|
|
|
for (let i = 0; i < crossList.length; i++) {
|
|
|
if (i == 0) {
|
|
|
//第一个位置
|
|
|
- roadWidthTipsPos.push({
|
|
|
- start: leftMidDividePoint,
|
|
|
- end: crossList[i],
|
|
|
- });
|
|
|
+ // roadWidthTipsPos.push({
|
|
|
+ // start: leftMidDividePoint,
|
|
|
+ // end: crossList[i],
|
|
|
+ // });
|
|
|
+
|
|
|
+ roadWidthTipsPos.push({ start: leftMidDividePoint, end: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i]) });
|
|
|
} else {
|
|
|
//以此类推
|
|
|
+ // roadWidthTipsPos.push({
|
|
|
+ // start: crossList[i - 1],
|
|
|
+ // end: crossList[i],
|
|
|
+ // });
|
|
|
roadWidthTipsPos.push({
|
|
|
- start: crossList[i - 1],
|
|
|
- end: crossList[i],
|
|
|
+ start: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i - 1]),
|
|
|
+ end: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i]),
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
//最后一个位置
|
|
|
+ // roadWidthTipsPos.push({
|
|
|
+ // start: crossList[crossList.length - 1],
|
|
|
+ // end: leftEdgePoint,
|
|
|
+ // });
|
|
|
roadWidthTipsPos.push({
|
|
|
- start: crossList[crossList.length - 1],
|
|
|
+ start: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[crossList.length - 1]),
|
|
|
end: leftEdgePoint,
|
|
|
});
|
|
|
road.setRoadWidthTipsPos(roadWidthTipsPos);
|
|
@@ -1655,33 +1507,43 @@ export default class RoadService {
|
|
|
if (road.rightLanes.length) {
|
|
|
let crossList = [];
|
|
|
for (let i = 0; i < road.rightLanes.length; i++) {
|
|
|
- let crossLine = mathUtil.createLine1(
|
|
|
- road.rightLanes[i].start,
|
|
|
- road.rightLanes[i].end
|
|
|
- );
|
|
|
- let crossPoint = mathUtil.getIntersectionPoint(edgeLine, crossLine);
|
|
|
- crossList.push(crossPoint);
|
|
|
+ let crossLine = mathUtil.createLine1(road.rightLanes[i].start, road.rightLanes[i].end);
|
|
|
+ // let crossPoint = mathUtil.getIntersectionPoint(edgeLine, crossLine);
|
|
|
+ // crossList.push(crossPoint);
|
|
|
+ crossList.push(crossLine);
|
|
|
}
|
|
|
for (let i = 0; i < crossList.length; i++) {
|
|
|
if (i == 0) {
|
|
|
//第一个位置
|
|
|
- roadWidthTipsPos.push({
|
|
|
- start: rightMidDividePoint,
|
|
|
- end: crossList[i],
|
|
|
- });
|
|
|
+ // roadWidthTipsPos.push({
|
|
|
+ // start: rightMidDividePoint,
|
|
|
+ // end: crossList[i],
|
|
|
+ // });
|
|
|
+
|
|
|
+ roadWidthTipsPos.push({ start: rightMidDividePoint, end: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i]) });
|
|
|
} else {
|
|
|
//以此类推
|
|
|
+ // roadWidthTipsPos.push({
|
|
|
+ // start: crossList[i - 1],
|
|
|
+ // end: crossList[i],
|
|
|
+ // });
|
|
|
+
|
|
|
roadWidthTipsPos.push({
|
|
|
- start: crossList[i - 1],
|
|
|
- end: crossList[i],
|
|
|
+ start: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i - 1]),
|
|
|
+ end: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i]),
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
//最后一个位置
|
|
|
+ // roadWidthTipsPos.push({
|
|
|
+ // start: crossList[crossList.length - 1],
|
|
|
+ // end: rightEdgePoint,
|
|
|
+ // });
|
|
|
roadWidthTipsPos.push({
|
|
|
- start: crossList[crossList.length - 1],
|
|
|
+ start: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[crossList.length - 1]),
|
|
|
end: rightEdgePoint,
|
|
|
});
|
|
|
+
|
|
|
road.setRoadWidthTipsPos(roadWidthTipsPos);
|
|
|
} else {
|
|
|
roadWidthTipsPos.push({
|