From 51797bcf6ef39bddbe04526cf2e14c40a50d0960 Mon Sep 17 00:00:00 2001 From: Mike Barry Date: Thu, 15 Jul 2021 07:03:14 -0400 Subject: [PATCH] skip unused sources --- .../com/onthegomap/flatmap/FlatMapRunner.java | 22 ++++++++++++++----- .../java/com/onthegomap/flatmap/Profile.java | 4 ++++ .../openmaptiles/OpenMapTilesProfile.java | 11 ++++++++++ 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/com/onthegomap/flatmap/FlatMapRunner.java b/core/src/main/java/com/onthegomap/flatmap/FlatMapRunner.java index 06628f60..974b2755 100644 --- a/core/src/main/java/com/onthegomap/flatmap/FlatMapRunner.java +++ b/core/src/main/java/com/onthegomap/flatmap/FlatMapRunner.java @@ -61,31 +61,41 @@ public class FlatMapRunner { stageDescriptions .put(name + "_pass1", "Pre-process OpenStreetMap input (store node locations then relation members)"); stageDescriptions.put(name + "_pass2", "Process OpenStreetMap nodes, ways, then relations"); - return addStage(name, () -> { + return addStage(name, ifSourceUsed(name, () -> { try (var osmReader = new OpenStreetMapReader(name, thisInputFile, nodeLocations, profile, stats)) { osmReader.pass1(config); osmReader.pass2(featureMap, config); } - }); + })); } public FlatMapRunner addShapefileSource(String name, Path defaultPath) { Path path = arguments.inputFile(name, name + " shapefile", defaultPath); return addStage(name, "Process features in " + path, - () -> ShapefileReader.process(name, path, featureMap, config, profile, stats)); + ifSourceUsed(name, () -> ShapefileReader.process(name, path, featureMap, config, profile, stats))); + } + + private Worker.RunnableThatThrows ifSourceUsed(String name, Worker.RunnableThatThrows task) { + return () -> { + if (profile.caresAboutSource(name)) { + task.run(); + } else { + LOGGER.info("[" + name + "] skipping since profile does not use it"); + } + }; } public FlatMapRunner addShapefileSource(String projection, String name, Path defaultPath) { Path path = arguments.inputFile(name, name + " shapefile", defaultPath); return addStage(name, "Process features in " + path, - () -> ShapefileReader.process(projection, name, path, featureMap, config, profile, stats)); + ifSourceUsed(name, () -> ShapefileReader.process(projection, name, path, featureMap, config, profile, stats))); } public FlatMapRunner addNaturalEarthSource(String name, Path defaultPath) { Path path = arguments.inputFile(name, name + " sqlite db", defaultPath); - return addStage(name, "Process features in " + path, () -> NaturalEarthReader - .process(name, path, tmpDir.resolve("natearth.sqlite"), featureMap, config, profile, stats)); + return addStage(name, "Process features in " + path, ifSourceUsed(name, () -> NaturalEarthReader + .process(name, path, tmpDir.resolve("natearth.sqlite"), featureMap, config, profile, stats))); } public FlatMapRunner addStage(String name, String description, Worker.RunnableThatThrows task) { diff --git a/core/src/main/java/com/onthegomap/flatmap/Profile.java b/core/src/main/java/com/onthegomap/flatmap/Profile.java index aedc4b98..593d2539 100644 --- a/core/src/main/java/com/onthegomap/flatmap/Profile.java +++ b/core/src/main/java/com/onthegomap/flatmap/Profile.java @@ -49,6 +49,10 @@ public interface Profile { Consumer next) { } + default boolean caresAboutSource(String name) { + return true; + } + class NullProfile implements Profile { @Override diff --git a/openmaptiles/src/main/java/com/onthegomap/flatmap/openmaptiles/OpenMapTilesProfile.java b/openmaptiles/src/main/java/com/onthegomap/flatmap/openmaptiles/OpenMapTilesProfile.java index 70a7e258..a3ed0b45 100644 --- a/openmaptiles/src/main/java/com/onthegomap/flatmap/openmaptiles/OpenMapTilesProfile.java +++ b/openmaptiles/src/main/java/com/onthegomap/flatmap/openmaptiles/OpenMapTilesProfile.java @@ -217,6 +217,17 @@ public class OpenMapTilesProfile implements Profile { } } + @Override + public boolean caresAboutSource(String name) { + return switch (name) { + case NATURAL_EARTH_SOURCE -> !naturalEarthProcessors.isEmpty(); + case WATER_POLYGON_SOURCE -> !osmWaterProcessors.isEmpty(); + case OSM_SOURCE -> !osmAllProcessors.isEmpty() || !osmDispatchMap.isEmpty(); + case LAKE_CENTERLINE_SOURCE -> !lakeCenterlineProcessors.isEmpty(); + default -> true; + }; + } + public interface NaturalEarthProcessor { void processNaturalEarth(String table, SourceFeature feature, FeatureCollector features);