/** * 根据新产生的Block边界Node分割道路,维护原来路网关系 新产生道路splitRoad * * @param road 原道路 * @param index Node产生所在原道路中的位置 * @param splitPoint Node具体位置坐标点 */ private RoadNew createSplitRoad( RoadNew road, int Indexfrom, int indexTo, List<ShpPoint> points, ShpPoint headerSplitPoint, ShpPoint splitPoint, ShpPoint nodePoint) { // 新建Block边界Node NodeNew blockNode = new NodeNew(); blockNode.point = nodePoint; // 原始坐标 // 创建新的道路形状点 List<ShpPoint> splitPoints = new ArrayList<ShpPoint>( points.subList(Indexfrom, indexTo)); // 避免ConcurrentModificationException if (headerSplitPoint != null) { splitPoints.add(0, ShpPoint.valueOf(headerSplitPoint)); } splitPoints.add(ShpPoint.valueOf(splitPoint)); RoadNew splitRoad = new RoadNew(); splitRoad.copy(road); splitRoad.coordinate = splitPoints; // 第一个开始点有价值 splitRoad.startAngle30m = road.startAngle30m; splitRoad.startAngle60m = road.startAngle60m; // 在合并Rout时需要判断角度 splitRoad.endAngle30m = -90; splitRoad.endAngle60m = -90; road.startAngle30m = 90; road.startAngle60m = 90; // 建立,维护拓扑关系 splitRoad.startNode = road.startNode; road.startNode.roads.add(splitRoad); road.startNode.roads.remove(road); blockNode.roads.add(splitRoad); blockNode.roads.add(road); // road.startNode = splitRoad.endNode = blockNode; road.startNode = blockNode; splitRoad.endNode = blockNode; if (road.fow == defineFOW.JunctionLink) { road.endNode.intersection.allNodes.add(blockNode); blockNode.intersection = road.endNode.intersection; } this.nodeList.add(blockNode); return splitRoad; }