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/23 10:01:06 UTC

[incubator-baremaps] 01/02: Simplify 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 936f2a7742c77e9d32439795f3cc5a663ce945ed
Author: Bertil Chapuis <bc...@gmail.com>
AuthorDate: Fri Dec 23 00:54:37 2022 +0100

    Simplify the coordinate and reference map builders
---
 .../org/apache/baremaps/database/ImportService.java  |  8 ++++----
 .../openstreetmap/function/CoordinateMapBuilder.java | 20 ++++++--------------
 .../openstreetmap/function/ReferenceMapBuilder.java  | 17 ++++++-----------
 .../baremaps/openstreetmap/pbf/PbfBlockReader.java   | 12 ++++++------
 4 files changed, 22 insertions(+), 35 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 4df67cd3..3ef63825 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
@@ -60,12 +60,12 @@ public class ImportService implements Callable<Void> {
     var coordinateMapBuilder = new CoordinateMapBuilder(coordinateMap);
     var referenceMapBuilder = new ReferenceMapBuilder(referenceMap);
     var entityGeometryBuilder = new EntityGeometryBuilder(coordinateMap, referenceMap);
+    var entityGeometryHandler =
+        coordinateMapBuilder.andThen(referenceMapBuilder).andThen(entityGeometryBuilder);
     var entityProjectionTransformer = new EntityProjectionTransformer(4326, databaseSrid);
-    var entityHandler = entityGeometryBuilder.andThen(entityProjectionTransformer);
+    var entityHandler = entityGeometryHandler.andThen(entityProjectionTransformer);
     var blockEntitiesHandler = new BlockEntitiesHandler(entityHandler);
-    var blockHandler =
-        coordinateMapBuilder.andThen(referenceMapBuilder).andThen(blockEntitiesHandler);
-    var blockMapper = consumeThenReturn(blockHandler);
+    var blockMapper = consumeThenReturn(blockEntitiesHandler);
     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/CoordinateMapBuilder.java b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/CoordinateMapBuilder.java
index 38ba64fb..b0e1492b 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/CoordinateMapBuilder.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/CoordinateMapBuilder.java
@@ -16,13 +16,12 @@ package org.apache.baremaps.openstreetmap.function;
 
 import java.util.function.Consumer;
 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.apache.baremaps.openstreetmap.model.Entity;
+import org.apache.baremaps.openstreetmap.model.Node;
 import org.locationtech.jts.geom.Coordinate;
 
 /** A consumer that stores openstreetmap coordinates in a map. */
-public class CoordinateMapBuilder implements Consumer<Block> {
+public class CoordinateMapBuilder implements Consumer<Entity> {
 
   private final LongDataMap<Coordinate> coordinateMap;
 
@@ -37,16 +36,9 @@ public class CoordinateMapBuilder implements Consumer<Block> {
 
   /** {@inheritDoc} */
   @Override
-  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())));
-      }
-    } catch (Exception e) {
-      throw new StreamException(e);
+  public void accept(Entity entity) {
+    if (entity instanceof Node node) {
+      coordinateMap.put(node.getId(), new Coordinate(node.getLon(), node.getLat()));
     }
   }
 }
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/ReferenceMapBuilder.java b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/ReferenceMapBuilder.java
index 8be71b0b..6f720b1d 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/ReferenceMapBuilder.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/ReferenceMapBuilder.java
@@ -17,12 +17,11 @@ 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;
-import org.apache.baremaps.openstreetmap.model.DataBlock;
-import org.apache.baremaps.stream.StreamException;
+import org.apache.baremaps.openstreetmap.model.Entity;
+import org.apache.baremaps.openstreetmap.model.Way;
 
 /** A consumer that stores openstreetmap references in a map. */
-public class ReferenceMapBuilder implements Consumer<Block> {
+public class ReferenceMapBuilder implements Consumer<Entity> {
 
   private final LongDataMap<List<Long>> referenceMap;
 
@@ -37,13 +36,9 @@ public class ReferenceMapBuilder implements Consumer<Block> {
 
   /** {@inheritDoc} */
   @Override
-  public void accept(Block block) {
-    try {
-      if (block instanceof DataBlock dataBlock) {
-        dataBlock.getWays().stream().forEach(way -> referenceMap.put(way.getId(), way.getNodes()));
-      }
-    } catch (Exception e) {
-      throw new StreamException(e);
+  public void accept(Entity entity) {
+    if (entity instanceof Way way) {
+      referenceMap.put(way.getId(), way.getNodes());
     }
   }
 }
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 73011102..c23b9a9e 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
@@ -150,13 +150,13 @@ public class PbfBlockReader implements OsmReader<Block> {
       var coordinateMapBuilder = new CoordinateMapBuilder(coordinateMap);
       var referenceMapBuilder = new ReferenceMapBuilder(referenceMap);
       var entityGeometryBuilder = new EntityGeometryBuilder(coordinateMap, referenceMap);
+      var entityGeometryHandler =
+          coordinateMapBuilder.andThen(referenceMapBuilder).andThen(entityGeometryBuilder);
       var entityProjectionTransformer = new EntityProjectionTransformer(4326, srid);
-      var entityHandler = srid == 4326 ? entityGeometryBuilder
-          : entityGeometryBuilder.andThen(entityProjectionTransformer);
-      var blockEntitiesHandler = new BlockEntitiesHandler(entityHandler);
-      var blockHandler =
-          coordinateMapBuilder.andThen(referenceMapBuilder).andThen(blockEntitiesHandler);
-      var blockMapper = consumeThenReturn(blockHandler);
+      var entityProjectionHandler = srid == 4326 ? entityGeometryHandler
+          : entityGeometryHandler.andThen(entityProjectionTransformer);
+      var blockEntitiesHandler = new BlockEntitiesHandler(entityProjectionHandler);
+      var blockMapper = consumeThenReturn(blockEntitiesHandler);
       blocks = blocks.map(blockMapper);
     }
     return blocks;