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;