From 6f4b1f9aaedacfdb851449d654333e172c7c943c Mon Sep 17 00:00:00 2001 From: Holger Bruch Date: Sun, 9 Jun 2019 05:50:17 +0200 Subject: [PATCH 1/4] Add roadClasses option to support generation of tiles including road class Other --- README.md | 12 +++++-- .../tools/builder/ProcessPBF.java | 36 +++++++++++++------ 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 521e8ee..e086935 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,15 @@ Support for non-OSM data sources has been moved to the [sharedstreets-conflator] **Example use** -`java -jar ./sharedstreets-builder-0.1-preview.jar --input data/[osm_input_file].pbf --output ./[tile_output_directory] +`java -jar build/libs/sharedstreets-builder-0.3.1.jar --input data/[osm_input_file].pbf --output ./[tile_output_directory] +` + +**Filtered Road Classes** + +Since v0.3 this tool generates tiles with hierarchically filtered road classes. Tiles with e.g. suffix `.2.pbf only contain road classes Motorway (0), Trunk (1) and Primary (2). +Per default, tiles up to road class Unclassified (6) are generated. To create tiles up to road class Other (8), you may specify an optional `roadClasses` argument, providing the comma separated road classes tiles should be generated for: + +`java -jar build/libs/sharedstreets-builder-0.3.1.jar --input data/[osm_input_file].pbf --output ./[tile_output_directory] --roadClasses 0,1,2,4,6,8 ` **Notes** @@ -20,4 +28,4 @@ The builder application is built on Apache Flink. If memory requirements exceed - [*v0.1:*](https://github.com/sharedstreets/sharedstreets-builder/releases/tag/0.1-preview) OSM support - *v0.2:* Add OSM metadata support for support ways per [#9](https://github.com/sharedstreets/sharedstreets-builder/issues/9) -- [*v0.3:*](https://github.com/sharedstreets/sharedstreets-builder/releases/tag/0.3) add heirarchical filterfing for roadClass per [sharedstreets-ref-system/#20](https://github.com/sharedstreets/sharedstreets-ref-system/issues/20#issuecomment-381010861) +- [*v0.3:*](https://github.com/sharedstreets/sharedstreets-builder/releases/tag/0.3) add hierarchical filtering for roadClass per [sharedstreets-ref-system/#20](https://github.com/sharedstreets/sharedstreets-ref-system/issues/20#issuecomment-381010861) diff --git a/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java b/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java index dfd908d..42754c3 100644 --- a/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java +++ b/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java @@ -24,7 +24,7 @@ import java.io.File; import java.util.ArrayList; - +import java.util.Comparator; public class ProcessPBF { @@ -58,6 +58,11 @@ public static void main(String[] args) throws Exception { .withArgName("Z-LEVEL") .create() ); + options.addOption( OptionBuilder.withLongOpt( "roadClasses" ) + .withDescription( "road classes (default '6,4,2,1,0')" ) + .hasArg() + .withArgName("ROAD-CLASSES") + .create() ); String inputFile = ""; @@ -65,6 +70,9 @@ public static void main(String[] args) throws Exception { Integer zLevel = 12 ; + String roadClasses = "6,4,2,1,0"; + ArrayList filteredClasses = new ArrayList<>(); + try { // parse the command line arguments CommandLine line = parser.parse( options, args ); @@ -82,6 +90,22 @@ public static void main(String[] args) throws Exception { if(line.hasOption("zlevel")){ zLevel = Integer.parseInt(line.getOptionValue("zlevel")); } + + if(line.hasOption("roadClasses")){ + roadClasses = line.getOptionValue("roadClasses"); + } + + // list of way classes for export tiles (will be sorted to be in sequential order from least to most filtered) + for (String roadClass : roadClasses.split(",")) { + int roadClassOrdinal = Integer.parseInt(roadClass); + filteredClasses.add(Way.ROAD_CLASS.values()[roadClassOrdinal]); + } + filteredClasses.sort(new Comparator() { + @Override + public int compare(Way.ROAD_CLASS o1, Way.ROAD_CLASS o2) { + return o2.compareTo(o1); + } + }); } catch( Exception exp ) { System.out.println( "Unexpected exception:" + exp.getMessage() ); @@ -102,7 +126,7 @@ public static void main(String[] args) throws Exception { File directory = new File(outputPath); if(directory.exists()) { - System.out.println( "Output directory already exists: " + outputPath); + System.out.println("Output directory already exists: " + outputPath); return; } @@ -111,12 +135,6 @@ public static void main(String[] args) throws Exception { // load osm data from PBF input OSMDataStream dataStream = new OSMDataStream(inputFile, env); - // list of way classes for export tiles (must be in sequential order from least to most filtered) - ArrayList filteredClasses = new ArrayList<>(); - filteredClasses.add(Way.ROAD_CLASS.ClassUnclassified); - filteredClasses.add(Way.ROAD_CLASS.ClassTertiary); - filteredClasses.add(Way.ROAD_CLASS.ClassPrimary); - filteredClasses.add(Way.ROAD_CLASS.ClassMotorway); for(Way.ROAD_CLASS filteredClass : filteredClasses) { @@ -141,5 +159,3 @@ public static void main(String[] args) throws Exception { } } - - From 28d357676ad37bdab636d5ca2534c6f2d32fbeb9 Mon Sep 17 00:00:00 2001 From: Holger Bruch Date: Sun, 9 Jun 2019 05:51:21 +0200 Subject: [PATCH 2/4] Remove unused imports --- .../java/io/sharedstreets/tools/builder/ProcessPBF.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java b/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java index 42754c3..6eb346c 100644 --- a/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java +++ b/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java @@ -1,8 +1,6 @@ package io.sharedstreets.tools.builder; -import io.sharedstreets.data.SharedStreetsGeometry; import io.sharedstreets.tools.builder.osm.model.Way; -import io.sharedstreets.tools.builder.tiles.JSONTileOutputFormat; import io.sharedstreets.tools.builder.tiles.ProtoTileOutputFormat; import io.sharedstreets.tools.builder.tiles.TilableData; import io.sharedstreets.tools.builder.transforms.Intersections; @@ -11,13 +9,8 @@ import io.sharedstreets.tools.builder.transforms.SharedStreetData; import io.sharedstreets.tools.builder.util.geo.TileId; import org.apache.commons.cli.*; -import org.apache.flink.api.common.functions.FilterFunction; -import org.apache.flink.api.common.functions.MapFunction; -import org.apache.flink.api.common.functions.ReduceFunction; -import org.apache.flink.api.java.DataSet; import org.apache.flink.api.java.ExecutionEnvironment; -import org.apache.flink.api.java.tuple.Tuple1; import org.apache.flink.api.java.tuple.Tuple2; import org.slf4j.LoggerFactory; import org.slf4j.Logger; From d39998e81e4a8801cdd47d1583032ab2fdd3693f Mon Sep 17 00:00:00 2001 From: Holger Bruch Date: Sun, 9 Jun 2019 05:56:46 +0200 Subject: [PATCH 3/4] Replace deprecated OptionBuilder by Option --- .../tools/builder/ProcessPBF.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java b/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java index 6eb346c..5205172 100644 --- a/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java +++ b/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java @@ -33,29 +33,29 @@ public static void main(String[] args) throws Exception { // create the Options Options options = new Options(); - options.addOption( OptionBuilder.withLongOpt( "input" ) - .withDescription( "path to input OSM PBF file" ) + options.addOption( Option.builder().longOpt( "input" ) + .desc( "path to input OSM PBF file" ) .hasArg() - .withArgName("INPUT-FILE") - .create() ); + .argName("INPUT-FILE") + .build() ); - options.addOption( OptionBuilder.withLongOpt( "output" ) - .withDescription( "path to output directory (will be created)" ) + options.addOption( Option.builder().longOpt( "output" ) + .desc( "path to output directory (will be created)" ) .hasArg() - .withArgName("OUTPUT-DIR") - .create() ); + .argName("OUTPUT-DIR") + .build() ); - options.addOption( OptionBuilder.withLongOpt( "zlevel" ) - .withDescription( "tile z-level (default 12)" ) + options.addOption( Option.builder().longOpt( "zlevel" ) + .desc( "tile z-level (default 12)" ) .hasArg() - .withArgName("Z-LEVEL") - .create() ); + .argName("Z-LEVEL") + .build() ); - options.addOption( OptionBuilder.withLongOpt( "roadClasses" ) - .withDescription( "road classes (default '6,4,2,1,0')" ) + options.addOption( Option.builder().longOpt( "roadClasses" ) + .desc( "road classes (default '6,4,2,1,0')" ) .hasArg() - .withArgName("ROAD-CLASSES") - .create() ); + .argName("ROAD-CLASSES") + .build() ); String inputFile = ""; From 74d3fe48c7cd195cf6c1bcaa4b564849e9964341 Mon Sep 17 00:00:00 2001 From: Holger Bruch Date: Sun, 9 Jun 2019 05:58:19 +0200 Subject: [PATCH 4/4] Make input option required --- src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java b/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java index 5205172..a5bb969 100644 --- a/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java +++ b/src/main/java/io/sharedstreets/tools/builder/ProcessPBF.java @@ -36,6 +36,7 @@ public static void main(String[] args) throws Exception { options.addOption( Option.builder().longOpt( "input" ) .desc( "path to input OSM PBF file" ) .hasArg() + .required() .argName("INPUT-FILE") .build() );