diff --git a/mapbuilder/Dockerfile b/mapbuilder/Dockerfile index 7e5c62c60c36de9894fb8464329953aa31033a86..c425e1f22ca8352c7ead3f63d59bb9c18d6e50fb 100644 --- a/mapbuilder/Dockerfile +++ b/mapbuilder/Dockerfile @@ -1,10 +1,11 @@ -FROM eclipse-temurin:17-jdk-alpine +FROM eclipse-temurin:19-jdk-alpine ADD target/*-jar-with-dependencies.jar app.jar +COPY src/main/resources/config.properties /data/configuration/config.properties # Add the cron job # Calculate the map each day at 00:00 # For testing: set it to * * * * * to run it each minute -RUN echo "0 0 * * * java -jar /app.jar" >> /var/spool/cron/crontabs/root +RUN echo "0 0 * * * java -jar -Xmx10g /app.jar" >> /var/spool/cron/crontabs/root # Start the cron deamon CMD crond -f \ No newline at end of file diff --git a/mapbuilder/pom.xml b/mapbuilder/pom.xml index 009f9a842adc75e58d41f509ad270b2f3ba4b0b5..6217efb53b2ca18d4282d1cfb482f18331854715 100644 --- a/mapbuilder/pom.xml +++ b/mapbuilder/pom.xml @@ -24,11 +24,6 @@ <version>4.11</version> <scope>test</scope> </dependency> - <dependency> - <groupId>com.google.protobuf</groupId> - <artifactId>protobuf-java</artifactId> - <version>3.21.12</version> - </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> @@ -42,7 +37,7 @@ <dependency> <groupId>de.fuberlin.navigator</groupId> <artifactId>proto</artifactId> - <version>1.00.003</version> + <version>1.00.05</version> </dependency> </dependencies> diff --git a/mapbuilder/src/main/java/map/builder/App.java b/mapbuilder/src/main/java/map/builder/App.java index 8a12e73cb0407e7fdd6dc20147332c01b7f260ee..3aaccbd7a1eef288158de1e884b86ad28c7fa5a5 100644 --- a/mapbuilder/src/main/java/map/builder/App.java +++ b/mapbuilder/src/main/java/map/builder/App.java @@ -2,6 +2,7 @@ package map.builder; import java.io.IOException; +import map.builder.utilities.Config; import org.json.JSONArray; import de.fuberlin.navigator.protos.map_builder.RoadNetwork; @@ -10,8 +11,13 @@ import map.builder.osm.OSMParser; import map.builder.utilities.BoundingBox; import map.builder.utilities.FileHandler; +import static map.builder.utilities.Config.ROAD_NETWORK_OUTPUT_PATH; + public class App { public static void main(String[] args) throws IOException { + System.out.println("Map builder started!"); + Config.load(); + RoadNetwork.Builder roadNetworkBuilder = RoadNetwork.newBuilder(); OSMParser parser = new OSMParser(roadNetworkBuilder); @@ -23,19 +29,11 @@ public class App { float maxLon = 14.330334220133722f; */ - // smaller BBox inside Cottbus, better for the debug tool - float minLat = 51.764092326645475f; - float minLon = 14.310615062713623f; - float maxLat = 51.766591637718435f; - float maxLon = 14.314413070678711f; - - // BBox around Cottbus - /* - float minLat = 51.714692361306376f; - float minLon = 14.26197052001953f; - float maxLat = 51.79290380494767f; - float maxLon = 14.415779113769531f; - */ + // BBox around central and south Brandenburg + float minLat = 51.968768f; + float minLon = 12.144459f; + float maxLat = 52.674160f; + float maxLon = 15.016778f; BoundingBox bbox = new BoundingBox(minLat, minLon, maxLat, maxLon); @@ -43,13 +41,15 @@ public class App { JSONArray roads = OSMFetcher.fetchNodesAndWays(bbox); OSMFetcher.dumpJsonData(roads, "test_data.json"); + System.out.println("Starting to parse."); parser.parseTurnRestrictions(restrictions); parser.parseRoads(roads); + System.out.println("Parsed road network."); RoadNetwork roadNetwork = roadNetworkBuilder.build(); System.out.println("Turn restrictions count: " + roadNetwork.getTurnRestrictionsCount()); System.out.println("Nodes count: " + roadNetwork.getNodesCount()); System.out.println("Segments count: " + roadNetwork.getSegmentsCount()); - FileHandler.saveToFile(roadNetwork, "./roadnetwork_sample.proto"); + FileHandler.saveToFile(roadNetwork, ROAD_NETWORK_OUTPUT_PATH); } } diff --git a/mapbuilder/src/main/java/map/builder/osm/OSMFetcher.java b/mapbuilder/src/main/java/map/builder/osm/OSMFetcher.java index 8634ebb1a23fc7c12d9eb0edceccce7acb7c5e69..bc7726908a700b6335ce971476a8c35d71f4a582 100644 --- a/mapbuilder/src/main/java/map/builder/osm/OSMFetcher.java +++ b/mapbuilder/src/main/java/map/builder/osm/OSMFetcher.java @@ -24,11 +24,19 @@ public class OSMFetcher { } public static JSONArray fetchTurnRestrictions(BoundingBox boundingBox) throws IOException { - return OSMFetcher.runQueryForBBox(OSMFetcher.relationQuery, boundingBox); + System.out.println("Start to fetch turn restrictions."); + JSONArray jsonArray = OSMFetcher.runQueryForBBox(OSMFetcher.relationQuery, boundingBox); + System.out.println("Turn restrictions fetched."); + + return jsonArray; } public static JSONArray fetchNodesAndWays(BoundingBox boundingBox) throws IOException { - return OSMFetcher.runQueryForBBox(OSMFetcher.nodeQuery, boundingBox); + System.out.println("Start to fetch nodes and ways."); + JSONArray jsonArray = OSMFetcher.runQueryForBBox(OSMFetcher.nodeQuery, boundingBox); + System.out.println("Nodes and ways fetched."); + + return jsonArray; } private static JSONArray runQueryForBBox(String query, BoundingBox bbox) throws IOException { diff --git a/mapbuilder/src/main/java/map/builder/osm/OSMParser.java b/mapbuilder/src/main/java/map/builder/osm/OSMParser.java index bf8b7822a2a5a100c79871e60e809c295f7e5d86..09a1235c2944e463f926b021e1003fe2e618454b 100644 --- a/mapbuilder/src/main/java/map/builder/osm/OSMParser.java +++ b/mapbuilder/src/main/java/map/builder/osm/OSMParser.java @@ -85,10 +85,12 @@ public class OSMParser { boolean oneWay = this.isOneWay(element); int maxSpeed = SegmentUtils.getMaxSpeed(element); + /* System.out.printf("Max speed: %d \n", maxSpeed); System.out.printf("Way id: %d, Start node id : %d, End node id: %d \n", osmId, startNodeId, endNodeId); + */ - long internalId = this.roadNetworkBuilder.getSegmentsCount(); + int internalId = this.roadNetworkBuilder.getSegmentsCount(); Segment segment = Segment.newBuilder() .setOsmId(osmId) diff --git a/mapbuilder/src/main/java/map/builder/utilities/Config.java b/mapbuilder/src/main/java/map/builder/utilities/Config.java new file mode 100644 index 0000000000000000000000000000000000000000..a8bfe433f1c99260abbdfff19a81d4b72f0d353b --- /dev/null +++ b/mapbuilder/src/main/java/map/builder/utilities/Config.java @@ -0,0 +1,37 @@ +package map.builder.utilities; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Properties; + +public class Config { + + private Config() { + } + + private static Properties props = new Properties(); + + public static String ROAD_NETWORK_OUTPUT_PATH = "roadnetwork.proto"; + + public static void load() { + //The config is used for running the application in a Docker container + String configFilePath = "/data/configuration/config.properties"; + + try (FileInputStream is = new FileInputStream(configFilePath)){ + props.load(is); + + ROAD_NETWORK_OUTPUT_PATH = props.getProperty("ROAD_NETWORK_OUTPUT_PATH", ROAD_NETWORK_OUTPUT_PATH); + System.out.println("Config loaded."); + } catch (FileNotFoundException e) { + // Either way the Docker image was build wrong or this is not + // run in a Docker environment + System.out.println("No config file found. Using default settings!"); + } catch (IOException e) { + // Something else went wrong, but we will + // not let this escalate + e.printStackTrace(); + } + + } +} diff --git a/mapbuilder/src/main/resources/config.properties b/mapbuilder/src/main/resources/config.properties new file mode 100644 index 0000000000000000000000000000000000000000..639d82dd25eeb130babc43a9f4e0bc455c39cdcd --- /dev/null +++ b/mapbuilder/src/main/resources/config.properties @@ -0,0 +1,2 @@ +# Standard config for Docker +ROAD_NETWORK_OUTPUT_PATH = /data/road_network/roadnetwork.proto \ No newline at end of file