/** * handle the crossroads... * * @param wayList */ private void handleCrossRoads(List<Way> wayList) { int z = 0; List<Way> splittedWay = new ArrayList<Way>(); for (Waypoint waypoint : allWaypoints.values()) { if (waypoint.getAddedWays().size() > 1) { for (Way way : waypoint.getAddedWays()) { if (way.getStart() == waypoint || way.getEnd() == waypoint) { z++; } else { way.addSplitPoint(waypoint); if (!splittedWay.contains(way)) { splittedWay.add(way); } } } } } for (Way way : splittedWay) { effectiveWayList.remove(way); int start = 0; int end = 0; long generatedKey = 0; List<Waypoint> splitWaypointList = sortWaypoints(way.getWaypointList(), way.getSplitPointList()); for (Waypoint waypoint : splitWaypointList) { end = way.getWaypointList().indexOf(waypoint); if (end < start) { int temp = end; end = start; start = temp; } List<Waypoint> newWaypoints = getWaypointSubset(start, end, way.getWaypointList()); Way newWay = new Way(); newWay.setStatus(WayStatusEnum.undefined); generatedKey = way.getWayID() + 1; while (allWays.containsKey(generatedKey)) { generatedKey++; } newWay.setWayID(generatedKey); newWay.setName(way.getWayID() + "Part" + start + "-" + end); Waypoint startPoint = newWaypoints.get(0); Waypoint endPoint = waypoint; newWay.setStart(startPoint); newWay.setEnd(endPoint); newWay.setWaypointList(newWaypoints); effectiveWayList.add(newWay); allWays.put(newWay.getWayID(), newWay); start = end; } if (end != way.getWaypointList().size() - 1) { end = way.getWaypointList().size() - 1; List<Waypoint> newWaypoints = getWaypointSubset(start, end, way.getWaypointList()); Way newWay = new Way(); newWay.setStatus(WayStatusEnum.undefined); newWay.setName(way.getWayID() + "Part" + start + "-" + end); while (allWays.containsKey(generatedKey)) { generatedKey++; } newWay.setWayID(generatedKey); start = 0; end = newWaypoints.size() - 1; Waypoint startPoint = newWaypoints.get(start); Waypoint endPoint = newWaypoints.get(end); newWay.setStart(startPoint); newWay.setEnd(endPoint); newWay.setWaypointList(newWaypoints); effectiveWayList.add(newWay); allWays.put(newWay.getWayID(), newWay); } } }