From b7b95b853be34d6ff35358cd3ec7f2b39e5111ce Mon Sep 17 00:00:00 2001 From: kraleva <viktoriakraleva@gmail.com> Date: Fri, 31 Mar 2023 17:22:25 +0200 Subject: [PATCH] Add working LCC --- mapbuilder/src/main/java/map/builder/App.java | 13 +++--- .../osm/OSMConnectedComponentParser.java | 40 ++++++++----------- .../main/java/map/builder/osm/OSMParser.java | 28 +++++++------ 3 files changed, 37 insertions(+), 44 deletions(-) diff --git a/mapbuilder/src/main/java/map/builder/App.java b/mapbuilder/src/main/java/map/builder/App.java index b472731..7e73608 100644 --- a/mapbuilder/src/main/java/map/builder/App.java +++ b/mapbuilder/src/main/java/map/builder/App.java @@ -16,7 +16,7 @@ import map.builder.utilities.FileHandler; public class App { public static void main(String[] args) throws IOException { RoadNetwork.Builder roadNetworkBuilder = RoadNetwork.newBuilder(); - OSMParser parser = new OSMParser(roadNetworkBuilder); + OSMParser parser = new OSMParser(); // A small BBox inside Cottbus /* @@ -53,21 +53,20 @@ public class App { restrictions = null; roads = null; bbox = null; - parser = null; // create the nodes graph in order to run LCC on it ConnectedComponentGraph graph = new ConnectedComponentGraph(); - OSMConnectedComponentParser.addNodes(roadNetworkBuilder, graph); - OSMConnectedComponentParser.addEdges(roadNetworkBuilder, graph); + OSMConnectedComponentParser.addNodes(parser.nodes, graph); + OSMConnectedComponentParser.addEdges(parser.segments, graph); ArrayList<Long> component = graph.getSCCs(); - System.out.println(component.toString()); // cleanup graph = null; - OSMConnectedComponentParser.cleanUp(roadNetworkBuilder, component); + OSMConnectedComponentParser.cleanUp(parser.nodes, parser.segments, component); - RoadNetwork roadNetwork = roadNetworkBuilder.build(); + RoadNetwork roadNetwork = roadNetworkBuilder.putAllNodes(parser.nodes).putAllSegments(parser.segments) + .addAllTurnRestrictions(parser.restrictions).build(); System.out.println("Turn restrictions count: " + roadNetwork.getTurnRestrictionsCount()); System.out.println("Nodes count: " + roadNetwork.getNodesCount()); System.out.println("Segments count: " + roadNetwork.getSegmentsCount()); diff --git a/mapbuilder/src/main/java/map/builder/osm/OSMConnectedComponentParser.java b/mapbuilder/src/main/java/map/builder/osm/OSMConnectedComponentParser.java index 0632f01..d66ab80 100644 --- a/mapbuilder/src/main/java/map/builder/osm/OSMConnectedComponentParser.java +++ b/mapbuilder/src/main/java/map/builder/osm/OSMConnectedComponentParser.java @@ -1,25 +1,24 @@ package map.builder.osm; import java.util.ArrayList; -import java.util.Iterator; +import java.util.Collections; import java.util.Map; import de.fuberlin.navigator.protos.map_builder.Node; -import de.fuberlin.navigator.protos.map_builder.RoadNetwork; import de.fuberlin.navigator.protos.map_builder.Segment; import map.builder.utilities.ConnectedComponentGraph; public class OSMConnectedComponentParser { - public static void addNodes(RoadNetwork.Builder roadnetwowrBuilder, ConnectedComponentGraph graph) { - for (Long nodeId : roadnetwowrBuilder.getNodesMap().keySet()) { + public static void addNodes(Map<Long, Node> nodesMap, ConnectedComponentGraph graph) { + for (Long nodeId : nodesMap.keySet()) { graph.addNode(nodeId); } } - public static void addEdges(RoadNetwork.Builder roadnetworkbuilder, ConnectedComponentGraph graph) { - for (Long edgeId : roadnetworkbuilder.getSegmentsMap().keySet()) { - Segment segment = roadnetworkbuilder.getSegmentsMap().get(edgeId); + public static void addEdges(Map<Long, Segment> segmentsMap, ConnectedComponentGraph graph) { + for (Long edgeId : segmentsMap.keySet()) { + Segment segment = segmentsMap.get(edgeId); Long startNode = segment.getStartNode(); Long endNode = segment.getEndNode(); graph.addEdge(startNode, endNode); @@ -29,26 +28,19 @@ public class OSMConnectedComponentParser { } } - public static void cleanUp(RoadNetwork.Builder roadNetworkBuilder, ArrayList<Long> component) { - Map<Long, Node> nodesMap = roadNetworkBuilder.getNodesMap(); - for (Iterator<Long> iterator = nodesMap.keySet().iterator(); iterator.hasNext();) { - Long key = iterator.next(); - System.out.println(component.contains(key)); - if (!component.contains(key)) { - iterator.remove(); - ; - } - } - Map<Long, Segment> segmentsMap = roadNetworkBuilder.getSegmentsMap(); - for (Iterator<Long> iterator = segmentsMap.keySet().iterator(); iterator.hasNext();) { - Long key = iterator.next(); - Long startNodeID = segmentsMap.get(key).getStartNode(); - Long endNodeID = segmentsMap.get(key).getEndNode(); + public static void cleanUp(Map<Long, Node> nodesMap, Map<Long, Segment> segmentsMap, ArrayList<Long> component) { + nodesMap.keySet().retainAll(Collections.unmodifiableCollection(component)); + + ArrayList<Long> segmentIDsToRemove = new ArrayList<Long>(); + for (Long key : segmentsMap.keySet()) { + Segment segment = segmentsMap.get(key); + Long startNodeID = segment.getStartNode(); + Long endNodeID = segment.getEndNode(); if ((!component.contains(startNodeID)) && (!component.contains(endNodeID))) { - iterator.remove(); - ; + segmentIDsToRemove.add(key); } } + segmentsMap.keySet().removeAll(segmentIDsToRemove); } } \ No newline at end of file diff --git a/mapbuilder/src/main/java/map/builder/osm/OSMParser.java b/mapbuilder/src/main/java/map/builder/osm/OSMParser.java index b30da2f..9621b07 100644 --- a/mapbuilder/src/main/java/map/builder/osm/OSMParser.java +++ b/mapbuilder/src/main/java/map/builder/osm/OSMParser.java @@ -9,18 +9,20 @@ import org.json.JSONObject; import de.fuberlin.navigator.protos.map_builder.Coordinates; import de.fuberlin.navigator.protos.map_builder.Node; import de.fuberlin.navigator.protos.map_builder.Restriction; -import de.fuberlin.navigator.protos.map_builder.RoadNetwork; import de.fuberlin.navigator.protos.map_builder.Segment; import map.builder.utilities.ComputationalUtils; public class OSMParser { private final Coordinates.Builder coordinatesBuilder; private final HashMap<Long, Node> nodesDump; - public RoadNetwork.Builder roadNetworkBuilder; - public OSMParser(RoadNetwork.Builder roadNetworkBuilder) { - this.roadNetworkBuilder = roadNetworkBuilder; + // maps to put the entries + public HashMap<Long, Node> nodes = new HashMap<Long, Node>(); + public HashMap<Long, Segment> segments = new HashMap<Long, Segment>(); + public ArrayList<Restriction> restrictions = new ArrayList<Restriction>(); + + public OSMParser() { this.coordinatesBuilder = Coordinates.newBuilder(); this.nodesDump = new HashMap<>(); } @@ -85,10 +87,10 @@ public class OSMParser { System.out.printf("Max speed: %d \n", maxSpeed); System.out.printf("Way id: %d, Start node id : %d, End node id: %d \n", osmId, - this.roadNetworkBuilder.getNodesMap().get(startNodeId).getId(), - this.roadNetworkBuilder.getNodesMap().get(endNodeId).getId()); + this.nodes.get(startNodeId).getId(), + this.nodes.get(endNodeId).getId()); - long internalId = this.roadNetworkBuilder.getSegmentsCount(); + long internalId = this.segments.size(); Segment segment = Segment.newBuilder() .setOsmId(osmId) @@ -102,7 +104,7 @@ public class OSMParser { .setLength(this.computeSegmentLength(line)) .build(); - this.roadNetworkBuilder.putSegments(internalId, segment); + this.segments.put(internalId, segment); } private boolean isOneWay(JSONObject element) { @@ -113,7 +115,7 @@ public class OSMParser { private void moveNodeToProto(Node node) { long osmId = node.getOsmId(); - this.roadNetworkBuilder.putNodes(node.getOsmId(), node); + this.nodes.put(osmId, node); } private void createNode(JSONObject element) { @@ -121,7 +123,7 @@ public class OSMParser { long osmId = element.getLong(OSMKey.id.name()); Node node = Node.newBuilder() - .setId(this.roadNetworkBuilder.getNodesCount() + this.nodesDump.size()) + .setId(this.nodes.size() + this.nodesDump.size()) .setOsmId(osmId) .setPosition(position) .build(); @@ -181,8 +183,8 @@ public class OSMParser { return node; } - if (this.roadNetworkBuilder.getNodesMap().containsKey(osmId)) { - return this.roadNetworkBuilder.getNodesMap().get(osmId); + if (this.nodes.containsKey(osmId)) { + return this.nodes.get(osmId); } throw new NullPointerException("Node with id " + osmId + " not found!"); @@ -221,7 +223,7 @@ public class OSMParser { } } Restriction restriction = Restriction.newBuilder().setFromId(from).setToId(to).build(); - this.roadNetworkBuilder.addTurnRestrictions(restriction); + this.restrictions.add(restriction); } } -- GitLab