You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@baremaps.apache.org by bc...@apache.org on 2022/12/22 23:40:41 UTC

[incubator-baremaps] 01/03: Split the coordinate and reference map builders

This is an automated email from the ASF dual-hosted git repository.

bchapuis pushed a commit to branch refactoring
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git

commit f5fd44cf33d23f6a8d2b0921cc38289805208d78
Author: Bertil Chapuis <bc...@gmail.com>
AuthorDate: Thu Dec 22 23:54:56 2022 +0100

    Split the coordinate and reference map builders
---
 .../java/org/apache/baremaps/database/ImportService.java | 16 ++++++++--------
 .../{CacheBuilder.java => CoordinateMapBuilder.java}     | 13 ++++---------
 .../{CacheBuilder.java => ReferenceMapBuilder.java}      | 16 ++++------------
 .../baremaps/openstreetmap/pbf/PbfBlockReader.java       |  7 +++++--
 4 files changed, 21 insertions(+), 31 deletions(-)

diff --git a/baremaps-core/src/main/java/org/apache/baremaps/database/ImportService.java b/baremaps-core/src/main/java/org/apache/baremaps/database/ImportService.java
index ab1b58ad..4df67cd3 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/database/ImportService.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/database/ImportService.java
@@ -23,10 +23,7 @@ import java.util.concurrent.Callable;
 import org.apache.baremaps.collection.LongDataMap;
 import org.apache.baremaps.database.repository.HeaderRepository;
 import org.apache.baremaps.database.repository.Repository;
-import org.apache.baremaps.openstreetmap.function.BlockEntitiesHandler;
-import org.apache.baremaps.openstreetmap.function.CacheBuilder;
-import org.apache.baremaps.openstreetmap.function.EntityGeometryBuilder;
-import org.apache.baremaps.openstreetmap.function.EntityProjectionTransformer;
+import org.apache.baremaps.openstreetmap.function.*;
 import org.apache.baremaps.openstreetmap.model.Node;
 import org.apache.baremaps.openstreetmap.model.Relation;
 import org.apache.baremaps.openstreetmap.model.Way;
@@ -60,12 +57,15 @@ public class ImportService implements Callable<Void> {
 
   @Override
   public Void call() throws Exception {
-    var cacheBuilder = new CacheBuilder(coordinateMap, referenceMap);
+    var coordinateMapBuilder = new CoordinateMapBuilder(coordinateMap);
+    var referenceMapBuilder = new ReferenceMapBuilder(referenceMap);
     var entityGeometryBuilder = new EntityGeometryBuilder(coordinateMap, referenceMap);
     var entityProjectionTransformer = new EntityProjectionTransformer(4326, databaseSrid);
-    var blockEntitiesHandler =
-        new BlockEntitiesHandler(entityGeometryBuilder.andThen(entityProjectionTransformer));
-    var blockMapper = consumeThenReturn(cacheBuilder.andThen(blockEntitiesHandler));
+    var entityHandler = entityGeometryBuilder.andThen(entityProjectionTransformer);
+    var blockEntitiesHandler = new BlockEntitiesHandler(entityHandler);
+    var blockHandler =
+        coordinateMapBuilder.andThen(referenceMapBuilder).andThen(blockEntitiesHandler);
+    var blockMapper = consumeThenReturn(blockHandler);
     var blockImporter =
         new BlockImporter(headerRepository, nodeRepository, wayRepository, relationRepository);
     try (InputStream inputStream = Files.newInputStream(path)) {
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/CacheBuilder.java b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/CoordinateMapBuilder.java
similarity index 73%
copy from baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/CacheBuilder.java
copy to baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/CoordinateMapBuilder.java
index 435867eb..f4f10749 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/CacheBuilder.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/CoordinateMapBuilder.java
@@ -14,7 +14,6 @@ package org.apache.baremaps.openstreetmap.function;
 
 
 
-import java.util.List;
 import java.util.function.Consumer;
 import org.apache.baremaps.collection.LongDataMap;
 import org.apache.baremaps.openstreetmap.model.Block;
@@ -22,21 +21,18 @@ import org.apache.baremaps.openstreetmap.model.DataBlock;
 import org.apache.baremaps.stream.StreamException;
 import org.locationtech.jts.geom.Coordinate;
 
-/** A consumer that caches openstreetmap coordinates and references. */
-public class CacheBuilder implements Consumer<Block> {
+/** A consumer that caches openstreetmap coordinates in a map. */
+public class CoordinateMapBuilder implements Consumer<Block> {
 
   private final LongDataMap<Coordinate> coordinateMap;
-  private final LongDataMap<List<Long>> referenceMap;
 
   /**
-   * Constructs a {@code CacheBlockConsumer} with the provided caches.
+   * Constructs a {@code CacheBlockConsumer} with the provided map.
    *
    * @param coordinateMap the map of coordinates
-   * @param referenceMap the map of references
    */
-  public CacheBuilder(LongDataMap<Coordinate> coordinateMap, LongDataMap<List<Long>> referenceMap) {
+  public CoordinateMapBuilder(LongDataMap<Coordinate> coordinateMap) {
     this.coordinateMap = coordinateMap;
-    this.referenceMap = referenceMap;
   }
 
   /** {@inheritDoc} */
@@ -48,7 +44,6 @@ public class CacheBuilder implements Consumer<Block> {
             node -> coordinateMap.put(node.getId(), new Coordinate(node.getLon(), node.getLat())));
         dataBlock.getNodes().stream().forEach(
             node -> coordinateMap.put(node.getId(), new Coordinate(node.getLon(), node.getLat())));
-        dataBlock.getWays().stream().forEach(way -> referenceMap.put(way.getId(), way.getNodes()));
       }
     } catch (Exception e) {
       throw new StreamException(e);
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/CacheBuilder.java b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/ReferenceMapBuilder.java
similarity index 63%
rename from baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/CacheBuilder.java
rename to baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/ReferenceMapBuilder.java
index 435867eb..14791908 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/CacheBuilder.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/ReferenceMapBuilder.java
@@ -20,22 +20,18 @@ import org.apache.baremaps.collection.LongDataMap;
 import org.apache.baremaps.openstreetmap.model.Block;
 import org.apache.baremaps.openstreetmap.model.DataBlock;
 import org.apache.baremaps.stream.StreamException;
-import org.locationtech.jts.geom.Coordinate;
 
-/** A consumer that caches openstreetmap coordinates and references. */
-public class CacheBuilder implements Consumer<Block> {
+/** A consumer that caches openstreetmap references in a map. */
+public class ReferenceMapBuilder implements Consumer<Block> {
 
-  private final LongDataMap<Coordinate> coordinateMap;
   private final LongDataMap<List<Long>> referenceMap;
 
   /**
-   * Constructs a {@code CacheBlockConsumer} with the provided caches.
+   * Constructs a {@code CacheBlockConsumer} with the provided map.
    *
-   * @param coordinateMap the map of coordinates
    * @param referenceMap the map of references
    */
-  public CacheBuilder(LongDataMap<Coordinate> coordinateMap, LongDataMap<List<Long>> referenceMap) {
-    this.coordinateMap = coordinateMap;
+  public ReferenceMapBuilder(LongDataMap<List<Long>> referenceMap) {
     this.referenceMap = referenceMap;
   }
 
@@ -44,10 +40,6 @@ public class CacheBuilder implements Consumer<Block> {
   public void accept(Block block) {
     try {
       if (block instanceof DataBlock dataBlock) {
-        dataBlock.getDenseNodes().stream().forEach(
-            node -> coordinateMap.put(node.getId(), new Coordinate(node.getLon(), node.getLat())));
-        dataBlock.getNodes().stream().forEach(
-            node -> coordinateMap.put(node.getId(), new Coordinate(node.getLon(), node.getLat())));
         dataBlock.getWays().stream().forEach(way -> referenceMap.put(way.getId(), way.getNodes()));
       }
     } catch (Exception e) {
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/pbf/PbfBlockReader.java b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/pbf/PbfBlockReader.java
index 7e74c969..73011102 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/pbf/PbfBlockReader.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/pbf/PbfBlockReader.java
@@ -147,13 +147,16 @@ public class PbfBlockReader implements OsmReader<Block> {
     var blocks = StreamUtils.bufferInSourceOrder(StreamUtils.stream(new BlobIterator(inputStream)),
         new BlobToBlockMapper(), Runtime.getRuntime().availableProcessors());
     if (geometry) {
-      var cacheBuilder = new CacheBuilder(coordinateMap, referenceMap);
+      var coordinateMapBuilder = new CoordinateMapBuilder(coordinateMap);
+      var referenceMapBuilder = new ReferenceMapBuilder(referenceMap);
       var entityGeometryBuilder = new EntityGeometryBuilder(coordinateMap, referenceMap);
       var entityProjectionTransformer = new EntityProjectionTransformer(4326, srid);
       var entityHandler = srid == 4326 ? entityGeometryBuilder
           : entityGeometryBuilder.andThen(entityProjectionTransformer);
       var blockEntitiesHandler = new BlockEntitiesHandler(entityHandler);
-      var blockMapper = consumeThenReturn(cacheBuilder.andThen(blockEntitiesHandler));
+      var blockHandler =
+          coordinateMapBuilder.andThen(referenceMapBuilder).andThen(blockEntitiesHandler);
+      var blockMapper = consumeThenReturn(blockHandler);
       blocks = blocks.map(blockMapper);
     }
     return blocks;