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 918bc8ceb914e11abd3cc8b8664e02bb2623e590 Author: Bertil Chapuis <[email protected]> AuthorDate: Fri Dec 23 08:51:31 2022 +0100 Improve projection transformer --- .../org/apache/baremaps/database/ImportService.java | 16 +++++++++++----- .../function/EntityProjectionTransformer.java | 18 +++++++++++++----- .../baremaps/openstreetmap/pbf/PbfBlockReader.java | 15 +++++++++------ codestyle.xml | 2 +- 4 files changed, 34 insertions(+), 17 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 3ef63825..e3af0a56 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 @@ -57,20 +57,26 @@ public class ImportService implements Callable<Void> { @Override public Void call() throws Exception { + // Initialize and chain the entity handlers 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 = entityGeometryHandler.andThen(entityProjectionTransformer); - var blockEntitiesHandler = new BlockEntitiesHandler(entityHandler); - var blockMapper = consumeThenReturn(blockEntitiesHandler); + var entityHandler = coordinateMapBuilder + .andThen(referenceMapBuilder) + .andThen(entityGeometryBuilder) + .andThen(entityProjectionTransformer); + + // Initialize the block mapper + var blockMapper = consumeThenReturn(new BlockEntitiesHandler(entityHandler)); var blockImporter = new BlockImporter(headerRepository, nodeRepository, wayRepository, relationRepository); + + // Process the blocks try (InputStream inputStream = Files.newInputStream(path)) { batch(new PbfBlockReader().stream(inputStream).map(blockMapper)).forEach(blockImporter); } + return null; } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/EntityProjectionTransformer.java b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/EntityProjectionTransformer.java index beb1a010..41a0096c 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/EntityProjectionTransformer.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/EntityProjectionTransformer.java @@ -22,22 +22,30 @@ import org.locationtech.jts.geom.Geometry; /** Changes the projection of the geometry of an entity via side-effects. */ public class EntityProjectionTransformer implements Consumer<Entity> { + private final int sourceSrid; + + private final int targetSrid; + private final ProjectionTransformer projectionTransformer; /** * Creates a consumer that reproject geometries with the provided SRIDs. * - * @param inputSRID the input SRID - * @param outputSRID the output SRID + * @param sourceSrid the source SRID + * @param targetSrid the target SRID */ - public EntityProjectionTransformer(int inputSRID, int outputSRID) { - this.projectionTransformer = new ProjectionTransformer(inputSRID, outputSRID); + public EntityProjectionTransformer(int sourceSrid, int targetSrid) { + this.sourceSrid = sourceSrid; + this.targetSrid = targetSrid; + this.projectionTransformer = new ProjectionTransformer(sourceSrid, targetSrid); } /** {@inheritDoc} */ @Override public void accept(Entity entity) { - if (entity instanceof Element element && element.getGeometry() != null) { + if (sourceSrid != targetSrid + && entity instanceof Element element + && element.getGeometry() != null) { Geometry geometry = projectionTransformer.transform(element.getGeometry()); element.setGeometry(geometry); } 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 c23b9a9e..42c442ca 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,16 +147,19 @@ public class PbfBlockReader implements OsmReader<Block> { var blocks = StreamUtils.bufferInSourceOrder(StreamUtils.stream(new BlobIterator(inputStream)), new BlobToBlockMapper(), Runtime.getRuntime().availableProcessors()); if (geometry) { + // Initialize and chain the entity handlers 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 entityProjectionHandler = srid == 4326 ? entityGeometryHandler - : entityGeometryHandler.andThen(entityProjectionTransformer); - var blockEntitiesHandler = new BlockEntitiesHandler(entityProjectionHandler); - var blockMapper = consumeThenReturn(blockEntitiesHandler); + var entityHandler = coordinateMapBuilder + .andThen(referenceMapBuilder) + .andThen(entityGeometryBuilder) + .andThen(entityProjectionTransformer); + + // Initialize the block mapper + var blockMapper = consumeThenReturn(new BlockEntitiesHandler(entityHandler)); + blocks = blocks.map(blockMapper); } return blocks; diff --git a/codestyle.xml b/codestyle.xml index 75a4c877..e7c3770e 100644 --- a/codestyle.xml +++ b/codestyle.xml @@ -65,7 +65,7 @@ <setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="do not insert"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/> - <setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="false"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/> <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/> <setting id="org.eclipse.jdt.core.formatter.wrap_non_simple_local_variable_annotation" value="true"/>
