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

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


The following commit(s) were added to refs/heads/main by this push:
     new 2d88eea9 Improve the workflow for the daylight distribution (#823)
2d88eea9 is described below

commit 2d88eea9df8370ce04553dd6c915d40b2a655540
Author: Bertil Chapuis <[email protected]>
AuthorDate: Sat Feb 17 21:00:21 2024 +0100

    Improve the workflow for the daylight distribution (#823)
---
 .../database/collection/FixedSizeDataList.java     |   8 +-
 .../function/EntityGeometryBuilder.java            |   5 +-
 .../function/EntityProjectionTransformer.java      |   3 +-
 .../function/RelationMultiPolygonBuilder.java      |   6 +-
 .../postgres/PostgresNodeRepository.java           |   4 +-
 .../postgres/PostgresRelationRepository.java       |   4 +-
 .../postgres/PostgresWayRepository.java            |   4 +-
 .../storage/postgres/PostgresDataTable.java        |   2 +-
 .../baremaps/utils/ProjectionTransformer.java      | 101 ++++++++++++--------
 .../apache/baremaps/workflow/WorkflowContext.java  |  13 +--
 .../tasks/CreateGeocoderOpenStreetMap.java         |   4 +-
 .../apache/baremaps/workflow/tasks/ExecuteSql.java |   1 +
 .../baremaps/workflow/tasks/ImportOsmOsc.java      |   5 +-
 .../baremaps/workflow/tasks/ImportOsmPbf.java      |   4 +-
 basemap/layers/highway/clean.sql                   |   2 +-
 basemap/queries/osm_drop_indexes.sql               |  11 +++
 basemap/queries/osm_nodes.sql                      |   4 +-
 basemap/queries/osm_relations.sql                  |   4 +-
 basemap/queries/osm_ways.sql                       |   4 +-
 daylight/config.js                                 |   1 +
 daylight/style.js                                  |  31 +++---
 daylight/workflow.js                               | 106 ++++++++++-----------
 22 files changed, 171 insertions(+), 156 deletions(-)

diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/FixedSizeDataList.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/FixedSizeDataList.java
index 6b26d0ae..e48dad64 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/FixedSizeDataList.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/FixedSizeDataList.java
@@ -67,8 +67,8 @@ public class FixedSizeDataList<E> extends DataList<E> {
 
   private void write(long index, E value) {
     long position = index * dataType.size();
-    int segmentIndex = (int) (position / dataType.size());
-    int segmentOffset = (int) (position % dataType.size());
+    int segmentIndex = (int) (position / memory.segmentSize());
+    int segmentOffset = (int) (position % memory.segmentSize());
     ByteBuffer segment = memory.segment(segmentIndex);
     dataType.write(segment, segmentOffset, value);
   }
@@ -100,8 +100,8 @@ public class FixedSizeDataList<E> extends DataList<E> {
   @Override
   public E get(long index) {
     long position = index * dataType.size();
-    int segmentIndex = (int) (position / dataType.size());
-    int segmentOffset = (int) (position % dataType.size());
+    int segmentIndex = (int) (position / memory.segmentSize());
+    int segmentOffset = (int) (position % memory.segmentSize());
     ByteBuffer segment = memory.segment(segmentIndex);
     return dataType.read(segment, segmentOffset);
   }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/EntityGeometryBuilder.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/EntityGeometryBuilder.java
index 9b0350df..740d45ff 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/EntityGeometryBuilder.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/EntityGeometryBuilder.java
@@ -22,10 +22,7 @@ package org.apache.baremaps.openstreetmap.function;
 import java.util.List;
 import java.util.function.Consumer;
 import org.apache.baremaps.database.collection.DataMap;
-import org.apache.baremaps.openstreetmap.model.Entity;
-import org.apache.baremaps.openstreetmap.model.Node;
-import org.apache.baremaps.openstreetmap.model.Relation;
-import org.apache.baremaps.openstreetmap.model.Way;
+import org.apache.baremaps.openstreetmap.model.*;
 import org.locationtech.jts.geom.*;
 
 /** A consumer that builds and sets the geometry of OpenStreetMap entities via 
side effects. */
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 397f7986..3a3c5157 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,7 +22,6 @@ package org.apache.baremaps.openstreetmap.function;
 import java.util.function.Consumer;
 import org.apache.baremaps.openstreetmap.model.*;
 import org.apache.baremaps.utils.ProjectionTransformer;
-import org.locationtech.jts.geom.Geometry;
 
 /** Changes the projection of the geometry of an entity via side-effects. */
 public class EntityProjectionTransformer implements Consumer<Entity> {
@@ -51,7 +50,7 @@ public class EntityProjectionTransformer implements 
Consumer<Entity> {
     if (sourceSrid != targetSrid
         && entity instanceof Element element
         && element.getGeometry() != null) {
-      Geometry geometry = 
projectionTransformer.transform(element.getGeometry());
+      var geometry = projectionTransformer.transform(element.getGeometry());
       element.setGeometry(geometry);
     }
   }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/RelationMultiPolygonBuilder.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/RelationMultiPolygonBuilder.java
index c7981deb..e80ff665 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/RelationMultiPolygonBuilder.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/RelationMultiPolygonBuilder.java
@@ -73,7 +73,8 @@ public class RelationMultiPolygonBuilder implements 
Consumer<Relation> {
 
     } catch (Exception e) {
       logger.debug("Unable to build the geometry for relation #" + 
relation.getId(), e);
-      relation.setGeometry(GEOMETRY_FACTORY_WGS84.createMultiPolygon());
+      var emptyMultiPolygon = GEOMETRY_FACTORY_WGS84.createMultiPolygon();
+      relation.setGeometry(emptyMultiPolygon);
     }
   }
 
@@ -162,7 +163,8 @@ public class RelationMultiPolygonBuilder implements 
Consumer<Relation> {
           GEOMETRY_FACTORY_WGS84.createMultiPolygon(polygons.toArray(new 
Polygon[0]));
       relation.setGeometry(multiPolygon);
     } else {
-      relation.setGeometry(GEOMETRY_FACTORY_WGS84.createMultiPolygon());
+      var emptyMultiPolygon = GEOMETRY_FACTORY_WGS84.createMultiPolygon();
+      relation.setGeometry(emptyMultiPolygon);
     }
   }
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresNodeRepository.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresNodeRepository.java
index 4b0a73cc..829afe53 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresNodeRepository.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresNodeRepository.java
@@ -116,12 +116,12 @@ public class PostgresNodeRepository implements 
NodeRepository {
     this.dropTable = String.format("DROP TABLE IF EXISTS %1$s CASCADE", 
fullTableName);
     this.truncateTable = String.format("TRUNCATE TABLE %1$s", fullTableName);
     this.select = String.format(
-        "SELECT %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, %9$s, 
st_asbinary(%10$s) FROM %1$s WHERE %2$s = ?",
+        "SELECT %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, %9$s, 
st_asewkb(%10$s) FROM %1$s WHERE %2$s = ?",
         fullTableName, idColumn, versionColumn, uidColumn, timestampColumn, 
changesetColumn,
         tagsColumn,
         longitudeColumn, latitudeColumn, geometryColumn);
     this.selectIn = String.format(
-        "SELECT %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, %9$s, 
st_asbinary(%10$s) FROM %1$s WHERE %2$s = ANY (?)",
+        "SELECT %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, %9$s, 
st_asewkb(%10$s) FROM %1$s WHERE %2$s = ANY (?)",
         fullTableName, idColumn, versionColumn, uidColumn, timestampColumn, 
changesetColumn,
         tagsColumn,
         longitudeColumn, latitudeColumn, geometryColumn);
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresRelationRepository.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresRelationRepository.java
index 32f4055e..caef9d69 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresRelationRepository.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresRelationRepository.java
@@ -114,12 +114,12 @@ public class PostgresRelationRepository implements 
RelationRepository {
     this.dropTable = String.format("DROP TABLE IF EXISTS %1$s CASCADE", 
fullTableName);
     this.truncateTable = String.format("TRUNCATE TABLE %1$s", fullTableName);
     this.select = String.format(
-        "SELECT %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, %9$s, %10$s, 
st_asbinary(%11$s) FROM %1$s WHERE %2$s = ?",
+        "SELECT %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, %9$s, %10$s, 
st_asewkb(%11$s) FROM %1$s WHERE %2$s = ?",
         fullTableName, idColumn, versionColumn, uidColumn, timestampColumn, 
changesetColumn,
         tagsColumn,
         memberRefs, memberTypes, memberRoles, geometryColumn);
     this.selectIn = String.format(
-        "SELECT %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, %9$s, %10$s, 
st_asbinary(%11$s) FROM %1$s WHERE %2$s = ANY (?)",
+        "SELECT %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, %9$s, %10$s, 
st_asewkb(%11$s) FROM %1$s WHERE %2$s = ANY (?)",
         fullTableName, idColumn, versionColumn, uidColumn, timestampColumn, 
changesetColumn,
         tagsColumn,
         memberRefs, memberTypes, memberRoles, geometryColumn);
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresWayRepository.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresWayRepository.java
index 5af4a1c9..7e1650e2 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresWayRepository.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresWayRepository.java
@@ -116,12 +116,12 @@ public class PostgresWayRepository implements 
WayRepository {
     this.dropTable = String.format("DROP TABLE IF EXISTS %1$s CASCADE", 
fullTableName);
     this.truncateTable = String.format("TRUNCATE TABLE %1$s", fullTableName);
     this.select = String.format(
-        "SELECT %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, st_asbinary(%9$s) 
FROM %1$s WHERE %2$s = ?",
+        "SELECT %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, st_asewkb(%9$s) FROM 
%1$s WHERE %2$s = ?",
         fullTableName, idColumn, versionColumn, uidColumn, timestampColumn, 
changesetColumn,
         tagsColumn,
         nodesColumn, geometryColumn);
     this.selectIn = String.format(
-        "SELECT %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, st_asbinary(%9$s) 
FROM %1$s WHERE %2$s = ANY (?)",
+        "SELECT %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, st_asewkb(%9$s) FROM 
%1$s WHERE %2$s = ANY (?)",
         fullTableName, idColumn, versionColumn, uidColumn, timestampColumn, 
changesetColumn,
         tagsColumn,
         nodesColumn, geometryColumn);
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataTable.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataTable.java
index 08c804ab..52083dc0 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataTable.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataTable.java
@@ -154,7 +154,7 @@ public class PostgresDataTable extends AbstractDataTable {
     var columns = rowType.columns().stream()
         .map(column -> {
           if (column.type().binding().isAssignableFrom(Geometry.class)) {
-            return String.format("st_asbinary(\"%s\") AS \"%s\"", 
column.name(), column.name());
+            return String.format("st_asewkb(\"%s\") AS \"%s\"", column.name(), 
column.name());
           } else {
             return String.format("\"%s\"", column.name());
           }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/utils/ProjectionTransformer.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/utils/ProjectionTransformer.java
index ca832825..01d14823 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/utils/ProjectionTransformer.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/utils/ProjectionTransformer.java
@@ -21,17 +21,7 @@ package org.apache.baremaps.utils;
 
 import java.util.Objects;
 import java.util.stream.Stream;
-import org.locationtech.jts.geom.Coordinate;
-import org.locationtech.jts.geom.CoordinateSequence;
-import org.locationtech.jts.geom.Geometry;
-import org.locationtech.jts.geom.GeometryCollection;
-import org.locationtech.jts.geom.LineString;
-import org.locationtech.jts.geom.LinearRing;
-import org.locationtech.jts.geom.MultiLineString;
-import org.locationtech.jts.geom.MultiPoint;
-import org.locationtech.jts.geom.MultiPolygon;
-import org.locationtech.jts.geom.Point;
-import org.locationtech.jts.geom.Polygon;
+import org.locationtech.jts.geom.*;
 import org.locationtech.jts.geom.impl.CoordinateArraySequence;
 import org.locationtech.jts.geom.util.GeometryTransformer;
 import org.locationtech.proj4j.CRSFactory;
@@ -76,16 +66,6 @@ public class ProjectionTransformer extends 
GeometryTransformer {
             Math.toDegrees(targetCRS.getProjection().getMaxLatitude())), new 
ProjCoordinate());
   }
 
-  @Override
-  protected CoordinateSequence transformCoordinates(
-      CoordinateSequence coordinateSequence,
-      Geometry parent) {
-    Coordinate[] coordinateArray = 
Stream.of(coordinateSequence.toCoordinateArray())
-        .filter(Objects::nonNull)
-        .map(this::transformCoordinate).toArray(Coordinate[]::new);
-    return new CoordinateArraySequence(coordinateArray);
-  }
-
   private Coordinate transformCoordinate(Coordinate coordinate) {
     if (sourceSrid == targetSrid) {
       return coordinate;
@@ -97,97 +77,134 @@ public class ProjectionTransformer extends 
GeometryTransformer {
     return new Coordinate(c2.x, c2.y);
   }
 
+  @Override
+  protected CoordinateSequence transformCoordinates(
+      CoordinateSequence coordinateSequence,
+      Geometry parent) {
+    Coordinate[] coordinateArray = 
Stream.of(coordinateSequence.toCoordinateArray())
+        .filter(Objects::nonNull)
+        .map(this::transformCoordinate).toArray(Coordinate[]::new);
+    return new CoordinateArraySequence(coordinateArray);
+  }
+
+  @Override
   protected Geometry transformPoint(Point geom, Geometry parent) {
     try {
       var geometry = super.transformPoint(geom, parent);
-      return withTargetSRID(geometry);
+      geometry.setSRID(targetSrid);
+      return geometry;
     } catch (Exception e) {
       logger.error("Point cannot be reprojected", e);
-      return parent.getFactory().createEmpty(0);
+      var geometry = parent.getFactory().createPoint();
+      geometry.setSRID(targetSrid);
+      return geometry;
     }
   }
 
+  @Override
   protected Geometry transformMultiPoint(MultiPoint geom, Geometry parent) {
     try {
       var geometry = super.transformMultiPoint(geom, parent);
       if (geometry instanceof Point point) {
         geometry = factory.createMultiPoint(new Point[] {point});
       }
-      return withTargetSRID(geometry);
+      geometry.setSRID(targetSrid);
+      return geometry;
     } catch (Exception e) {
       logger.error("MultiPoint cannot be reprojected", e);
-      return parent.getFactory().createEmpty(0);
+      var geometry = parent.getFactory().createMultiPoint();
+      geometry.setSRID(targetSrid);
+      return geometry;
     }
   }
 
+  @Override
   protected Geometry transformLinearRing(LinearRing geom, Geometry parent) {
     try {
       var geometry = super.transformLinearRing(geom, parent);
-      return withTargetSRID(geometry);
+      geometry.setSRID(targetSrid);
+      return geometry;
     } catch (Exception e) {
       logger.error("LinearRing cannot be reprojected", e);
-      return parent.getFactory().createEmpty(0);
+      var geometry = parent.getFactory().createLinearRing();
+      geometry.setSRID(targetSrid);
+      return geometry;
     }
   }
 
+  @Override
   protected Geometry transformLineString(LineString geom, Geometry parent) {
     try {
       var geometry = super.transformLineString(geom, parent);
-      return withTargetSRID(geometry);
+      geometry.setSRID(targetSrid);
+      return geometry;
     } catch (Exception e) {
       logger.error("LineString cannot be reprojected", e);
-      return parent.getFactory().createEmpty(0);
+      var geometry = parent.getFactory().createLineString();
+      geometry.setSRID(targetSrid);
+      return geometry;
     }
   }
 
+  @Override
   protected Geometry transformMultiLineString(MultiLineString geom, Geometry 
parent) {
     try {
       var geometry = super.transformMultiLineString(geom, parent);
       if (geometry instanceof LineString lineString) {
         geometry = factory.createMultiLineString(new LineString[] 
{lineString});
       }
-      return withTargetSRID(geometry);
+      geometry.setSRID(targetSrid);
+      return geometry;
     } catch (Exception e) {
       logger.error("MultiLineString cannot be reprojected", e);
-      return parent.getFactory().createEmpty(0);
+      var geometry = parent.getFactory().createMultiLineString();
+      geometry.setSRID(targetSrid);
+      return geometry;
     }
   }
 
+  @Override
   protected Geometry transformPolygon(Polygon geom, Geometry parent) {
     try {
       var geometry = super.transformPolygon(geom, parent);
-      return withTargetSRID(geometry);
+      geometry.setSRID(targetSrid);
+      return geometry;
     } catch (Exception e) {
       logger.error("Polygon cannot be reprojected", e);
-      return parent.getFactory().createEmpty(0);
+      var geometry = parent.getFactory().createPolygon();
+      geometry.setSRID(targetSrid);
+      return geometry;
     }
   }
 
+  @Override
   protected Geometry transformMultiPolygon(MultiPolygon geom, Geometry parent) 
{
     try {
       var geometry = super.transformMultiPolygon(geom, parent);
       if (geometry instanceof Polygon polygon) {
         geometry = factory.createMultiPolygon(new Polygon[] {polygon});
       }
-      return withTargetSRID(geometry);
+      geometry.setSRID(targetSrid);
+      return geometry;
     } catch (Exception e) {
       logger.error("MultiPolygon cannot be reprojected", e);
-      return parent.getFactory().createEmpty(0);
+      var geometry = parent.getFactory().createMultiPolygon();
+      geometry.setSRID(targetSrid);
+      return geometry;
     }
   }
 
+  @Override
   protected Geometry transformGeometryCollection(GeometryCollection geom, 
Geometry parent) {
     try {
       var geometry = super.transformGeometryCollection(geom, parent);
-      return withTargetSRID(geometry);
+      geometry.setSRID(targetSrid);
+      return geometry;
     } catch (Exception e) {
       logger.error("GeometryCollection cannot be reprojected", e);
-      return parent.getFactory().createEmpty(0);
+      var geometry = parent.getFactory().createGeometryCollection();
+      geometry.setSRID(targetSrid);
+      return geometry;
     }
   }
-
-  private Geometry withTargetSRID(Geometry outputGeom) {
-    outputGeom.setSRID(targetSrid);
-    return outputGeom;
-  }
 }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/WorkflowContext.java 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/WorkflowContext.java
index d991d071..172be38d 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/WorkflowContext.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/WorkflowContext.java
@@ -18,7 +18,6 @@
 package org.apache.baremaps.workflow;
 
 
-
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -53,7 +52,7 @@ public class WorkflowContext {
     this.cacheDir = cacheDir;
   }
 
-  private Map<Object, DataSource> dataSources = new ConcurrentHashMap<>() {};
+  private Map<Object, DataSource> dataSources = new ConcurrentHashMap<>();
 
   /**
    * Returns the data source associated with the specified database.
@@ -65,15 +64,11 @@ public class WorkflowContext {
     return dataSources.computeIfAbsent(database, 
PostgresUtils::createDataSourceFromObject);
   }
 
-  public DataMap<Long, Coordinate> getCoordinateMap(Path path) throws 
IOException {
-    if (Files.size(path) > 1 << 30) {
-      return getMemoryAlignedDataMap("coordinates", new LonLatDataType());
-    } else {
-      return getMonotonicDataMap("coordinates", new LonLatDataType());
-    }
+  public DataMap<Long, Coordinate> getCoordinateMap() throws IOException {
+    return getMemoryAlignedDataMap("coordinates", new LonLatDataType());
   }
 
-  public DataMap<Long, List<Long>> getReferenceMap(Path path) throws 
IOException {
+  public DataMap<Long, List<Long>> getReferenceMap() throws IOException {
     return getMonotonicDataMap("references", new LongListDataType());
   }
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/CreateGeocoderOpenStreetMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/CreateGeocoderOpenStreetMap.java
index fad65d9d..347fd794 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/CreateGeocoderOpenStreetMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/CreateGeocoderOpenStreetMap.java
@@ -68,8 +68,8 @@ public class CreateGeocoderOpenStreetMap implements Task {
   public void execute(WorkflowContext context) throws Exception {
     var path = file.toAbsolutePath();
 
-    var coordinateMap = context.getCoordinateMap(path);
-    var referenceMap = context.getReferenceMap(path);
+    var coordinateMap = context.getCoordinateMap();
+    var referenceMap = context.getReferenceMap();
 
     var directory = FSDirectory.open(indexDirectory);
     var config = new IndexWriterConfig(GeocoderConstants.ANALYZER);
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteSql.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteSql.java
index 6a067bb1..f167f085 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteSql.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExecuteSql.java
@@ -80,6 +80,7 @@ public class ExecuteSql implements Task {
             logger.info("Execute SQL query: {}", query.replaceAll("\\s+", " 
"));
             connection.createStatement().execute(query);
           } catch (SQLException e) {
+            logger.error("Failed to execute query: {}", 
query.replaceAll("\\s+", " "));
             throw new WorkflowException(e);
           }
         });
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmOsc.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmOsc.java
index 20f5d6fa..18bd5991 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmOsc.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmOsc.java
@@ -80,11 +80,12 @@ public class ImportOsmOsc implements Task {
     var wayRepository = new PostgresWayRepository(datasource);
     var relationRepository = new PostgresRelationRepository(datasource);
 
-    var coordinateMap = context.getCoordinateMap(path);
-    var referenceMap = context.getReferenceMap(path);
+    var coordinateMap = context.getCoordinateMap();
+    var referenceMap = context.getReferenceMap();
 
     var coordinateMapBuilder = new CoordinateMapBuilder(coordinateMap);
     var referenceMapBuilder = new ReferenceMapBuilder(referenceMap);
+
     var buildGeometry = new EntityGeometryBuilder(coordinateMap, referenceMap);
     var reprojectGeometry = new EntityProjectionTransformer(4326, 
databaseSrid);
     var prepareGeometries = coordinateMapBuilder
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmPbf.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmPbf.java
index c529c7da..22637b42 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmPbf.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOsmPbf.java
@@ -103,8 +103,8 @@ public class ImportOsmPbf implements Task {
       relationRepository.create();
     }
 
-    var coordinateMap = context.getCoordinateMap(path);
-    var referenceMap = context.getReferenceMap(path);
+    var coordinateMap = context.getCoordinateMap();
+    var referenceMap = context.getReferenceMap();
 
     execute(
         path,
diff --git a/basemap/layers/highway/clean.sql b/basemap/layers/highway/clean.sql
index b3fa7321..d8c26559 100644
--- a/basemap/layers/highway/clean.sql
+++ b/basemap/layers/highway/clean.sql
@@ -13,7 +13,7 @@
 -- See the License for the specific language governing permissions and
 -- limitations under the License.
 
-DROP VIEW IF EXISTS osm_highway CASCADE;
+DROP MATERIALIZED VIEW IF EXISTS osm_highway CASCADE;
 
 DROP VIEW IF EXISTS osm_highway_z20 CASCADE;
 DROP VIEW IF EXISTS osm_highway_z19 CASCADE;
diff --git a/basemap/queries/osm_drop_indexes.sql 
b/basemap/queries/osm_drop_indexes.sql
new file mode 100644
index 00000000..817b8d8b
--- /dev/null
+++ b/basemap/queries/osm_drop_indexes.sql
@@ -0,0 +1,11 @@
+DROP INDEX IF EXISTS osm_nodes_tags_index;
+DROP INDEX IF EXISTS osm_nodes_tags_tsvector_index;
+DROP INDEX IF EXISTS osm_nodes_geom_index;
+
+DROP INDEX IF EXISTS osm_ways_tags_index;
+DROP INDEX IF EXISTS osm_ways_tags_tsvector_index;
+DROP INDEX IF EXISTS osm_ways_geom_index;
+
+DROP INDEX IF EXISTS osm_relations_tags_index;
+DROP INDEX IF EXISTS osm_relations_tags_tsvector_index;
+DROP INDEX IF EXISTS osm_relations_geom_index;
diff --git a/basemap/queries/osm_nodes.sql b/basemap/queries/osm_nodes.sql
index 290b84b2..26ba537a 100644
--- a/basemap/queries/osm_nodes.sql
+++ b/basemap/queries/osm_nodes.sql
@@ -13,6 +13,6 @@
 -- See the License for the specific language governing permissions and
 -- limitations under the License.
 
-CREATE INDEX IF NOT EXISTS osm_nodes_tags_index ON osm_nodes USING gin (tags);
-CREATE INDEX IF NOT EXISTS osm_nodes_tags_tsvector_index ON osm_nodes USING 
gin (to_tsvector('english', tags));
 CREATE INDEX IF NOT EXISTS osm_nodes_geom_index ON osm_nodes USING gist (geom);
+CREATE INDEX IF NOT EXISTS osm_nodes_tags_index ON osm_nodes USING gin (tags);
+-- CREATE INDEX IF NOT EXISTS osm_nodes_tags_tsvector_index ON osm_nodes USING 
gin (to_tsvector('english', tags));
diff --git a/basemap/queries/osm_relations.sql 
b/basemap/queries/osm_relations.sql
index ceae0432..80d735f6 100644
--- a/basemap/queries/osm_relations.sql
+++ b/basemap/queries/osm_relations.sql
@@ -13,6 +13,6 @@
 -- See the License for the specific language governing permissions and
 -- limitations under the License.
 
-CREATE INDEX IF NOT EXISTS osm_relations_tags_index ON osm_relations USING gin 
(tags);
-CREATE INDEX IF NOT EXISTS osm_relations_tags_tsvector_index ON osm_relations 
USING gin (to_tsvector('english', tags));
 CREATE INDEX IF NOT EXISTS osm_relations_geom_index ON osm_relations USING 
gist (geom);
+CREATE INDEX IF NOT EXISTS osm_relations_tags_index ON osm_relations USING gin 
(tags);
+--CREATE INDEX IF NOT EXISTS osm_relations_tags_tsvector_index ON 
osm_relations USING gin (to_tsvector('english', tags));
\ No newline at end of file
diff --git a/basemap/queries/osm_ways.sql b/basemap/queries/osm_ways.sql
index 6e707f39..f64cf703 100644
--- a/basemap/queries/osm_ways.sql
+++ b/basemap/queries/osm_ways.sql
@@ -14,5 +14,5 @@
 -- limitations under the License.
 
 CREATE INDEX IF NOT EXISTS osm_ways_geom_index ON osm_ways USING gist (geom);
-CREATE INDEX IF NOT EXISTS osm_ways_tags_tsvector_index ON osm_ways USING gin 
(to_tsvector('english', tags));
-CREATE INDEX IF NOT EXISTS osm_ways_tags_index ON osm_ways USING gin (tags);
\ No newline at end of file
+CREATE INDEX IF NOT EXISTS osm_ways_tags_index ON osm_ways USING gin (tags);
+--CREATE INDEX IF NOT EXISTS osm_ways_tags_tsvector_index ON osm_ways USING 
gin (to_tsvector('english', tags));
diff --git a/daylight/config.js b/daylight/config.js
index 124861f5..d29fd315 100644
--- a/daylight/config.js
+++ b/daylight/config.js
@@ -20,4 +20,5 @@ export default {
     "center": [0, 0],
     "bounds": [-180, -85.0511, 180, 85.0511],
     "zoom": 3,
+    "daylightVersion": "v1.39",
 }
diff --git a/daylight/style.js b/daylight/style.js
index b551531a..5617b020 100644
--- a/daylight/style.js
+++ b/daylight/style.js
@@ -16,9 +16,10 @@
  **/
 import config from "./config.js";
 
+
 import background from "../basemap/layers/background/style.js";
 import aeroway_line from "../basemap/layers/aeroway/line.js";
-import aeroway_polygon from "../basemap/layers/aeroway/polygon.js";
+import aeroway_fill from "../basemap/layers/aeroway/fill.js";
 import amenity_background from "../basemap/layers/amenity/background.js";
 import amenity_fountain from "../basemap/layers/amenity/fountain.js";
 import amenity_overlay from "../basemap/layers/amenity/overlay.js";
@@ -39,29 +40,27 @@ import railway_line from 
"../basemap/layers/railway/line.js";
 
 import highway_line from '../basemap/layers/highway/highway_line.js';
 import highway_outline from '../basemap/layers/highway/highway_outline.js';
-import highway_dash from '../basemap/layers/highway/highway_dash.js';
 import highway_tunnel_line from '../basemap/layers/highway/tunnel_line.js';
 import highway_tunnel_outline from 
'../basemap/layers/highway/tunnel_outline.js';
-import highway_pedestrian_area from 
'../basemap/layers/highway/pedestrian_area.js';
+import highway_fill from '../basemap/layers/highway/highway_fill.js';
 import highway_bridge_line from '../basemap/layers/highway/bridge_line.js';
 import highway_bridge_outline from 
'../basemap/layers/highway/bridge_outline.js';
 import highway_construction_line from 
"../basemap/layers/highway/construction_line.js";
-import highway_construction_dash from 
"../basemap/layers/highway/construction_dash.js";
 import highway_label from '../basemap/layers/highway/highway_label.js';
 
+import ocean_overlay from '../basemap/layers/ocean/overlay.js';
 import route_line from "../basemap/layers/route/style.js"
-import building_shape from "../basemap/layers/building/shape.js";
-import building_number from "../basemap/layers/building/number.js";
+import building_fill from "../basemap/layers/building/fill.js";
+import building_extrusion from "../basemap/layers/building/extrusion.js";
 import man_made_bridge from "../basemap/layers/man_made/bridge.js";
 import man_made_pier_line from "../basemap/layers/man_made/pier_line.js";
 import man_made_pier_label from "../basemap/layers/man_made/pier_label.js";
 import waterway_line from "../basemap/layers/waterway/line.js"
+import waterway_area from "../basemap/layers/waterway/area.js"
 import waterway_label from "../basemap/layers/waterway/label.js"
-import waterway_tunnel_line from "../basemap/layers/waterway/tunnel_line.js"
-import waterway_tunnel_casing from 
"../basemap/layers/waterway/tunnel_casing.js"
 import icon from "../basemap/layers/point/icon.js";
+import place from '../basemap/layers/point/place.js';
 import country_label from '../basemap/layers/point/country_label.js';
-import point_label from '../basemap/layers/point/point_label.js';
 
 import coastline from './layers/coastline/style.js';
 // import landcover from './layers/landcover/style.js';
@@ -82,7 +81,7 @@ export default {
     "layers": [
         background,
         power_background,
-        aeroway_polygon,
+        aeroway_fill,
         landuse_background,
         leisure_background,
         amenity_background,
@@ -94,21 +93,17 @@ export default {
         coastline,
         // landcover,
         waterway_line,
-        waterway_tunnel_casing,
-        waterway_tunnel_line,
+        waterway_area,
         man_made_bridge,
         amenity_fountain,
         highway_tunnel_outline,
         highway_tunnel_line,
         railway_tunnel,
-        building_shape,
-        building_number,
-        highway_construction_dash,
+        building_fill,
         highway_construction_line,
         highway_outline,
         highway_line,
-        highway_dash,
-        highway_pedestrian_area,
+        highway_fill,
         railway_line,
         highway_bridge_outline,
         highway_bridge_line,
@@ -124,7 +119,7 @@ export default {
         boundary_line,
         waterway_label,
         icon,
-        point_label,
+        place,
         country_label,
     ],
 };
\ No newline at end of file
diff --git a/daylight/workflow.js b/daylight/workflow.js
index aef8e1a9..62bde2fc 100644
--- a/daylight/workflow.js
+++ b/daylight/workflow.js
@@ -20,33 +20,31 @@ export default {
             "tasks": [
                 {
                     "type": "DownloadUrl",
-                    "source": 
"https://daylight-map-distribution.s3.us-west-1.amazonaws.com/release/v1.33/planet-v1.33.osm.pbf";,
+                    "source": 
`https://daylight-map-distribution.s3.us-west-1.amazonaws.com/release/${config.daylightVersion}/planet-${config.daylightVersion}.osm.pbf`,
                     "target": "data/data.osm.pbf"
                 },
                 {
                     "type": "ImportOsmPbf",
                     "file": "data/data.osm.pbf",
-                    "cache": "cache/",
                     "database": config.database,
                     "databaseSrid": 3857,
                     "replaceExisting": true,
                 },
                 {
                     "type": "DownloadUrl",
-                    "source": 
"https://daylight-map-distribution.s3.us-west-1.amazonaws.com/release/v1.33/ml-buildings-v1.33.osm.pbf";,
+                    "source": 
`https://daylight-map-distribution.s3.us-west-1.amazonaws.com/release/${config.daylightVersion}/ml-buildings-${config.daylightVersion}.osm.pbf`,
                     "target": "data/buildings.osm.pbf"
                 },
                 {
                     "type": "ImportOsmPbf",
                     "file": "data/buildings.osm.pbf",
-                    "cache": "building_cache/",
                     "database": config.database,
                     "databaseSrid": 3857,
                     "replaceExisting": false,
                 },
                 {
                     "type": "DownloadUrl",
-                    "source": 
"https://daylight-map-distribution.s3.us-west-1.amazonaws.com/release/v1.33/fb-ml-roads-v1.33.osc.gz";,
+                    "source": 
`https://daylight-map-distribution.s3.us-west-1.amazonaws.com/release/${config.daylightVersion}/fb-ml-roads-${config.daylightVersion}.osc.gz`,
                     "target": "data/roads.osc.gz"
                 },
                 {
@@ -58,7 +56,7 @@ export default {
                 },
                 {
                     "type": "DownloadUrl",
-                    "source": 
"https://daylight-map-distribution.s3.us-west-1.amazonaws.com/release/v1.33/admin-v1.33.osc.gz";,
+                    "source": 
`https://daylight-map-distribution.s3.us-west-1.amazonaws.com/release/${config.daylightVersion}/admin-${config.daylightVersion}.osc.gz`,
                     "target": "data/admin.osc.gz"
                 },
                 {
@@ -70,7 +68,7 @@ export default {
                 },
                 {
                     "type": "DownloadUrl",
-                    "source": 
"https://daylight-map-distribution.s3.us-west-1.amazonaws.com/release/v1.33/coastlines-v1.33.tgz";,
+                    "source": 
`https://daylight-map-distribution.s3.us-west-1.amazonaws.com/release/${config.daylightVersion}/coastlines-${config.daylightVersion}.tgz`,
                     "target": "data/coastlines.tgz"
                 },
                 {
@@ -93,7 +91,7 @@ export default {
                 },
                 {
                     "type": "DownloadUrl",
-                    "source": 
"https://daylight-map-distribution.s3.us-west-1.amazonaws.com/release/v1.33/preferred-localization-v1.33.tsv";,
+                    "source": 
`https://daylight-map-distribution.s3.us-west-1.amazonaws.com/release/${config.daylightVersion}/preferred-localization-${config.daylightVersion}.tsv`,
                     "target": "data/preferred-localization.tsv"
                 },
                 {
@@ -103,7 +101,7 @@ export default {
                 },
                 {
                     "type": "DownloadUrl",
-                    "source": 
"https://daylight-map-distribution.s3.us-west-1.amazonaws.com/release/v1.33/important-features-v1.33.json";,
+                    "source": 
`https://daylight-map-distribution.s3.us-west-1.amazonaws.com/release/${config.daylightVersion}/important-features-${config.daylightVersion}.json`,
                     "target": "data/important-features.json"
                 },
                 {
@@ -231,27 +229,6 @@ export default {
                 },
             ]
         },
-        {
-            "id": "daylight-polygon",
-            "needs": ["daylight-member"],
-            "tasks": [
-                {
-                    "type": "ExecuteSql",
-                    "file": "../basemap/layers/polygon/clean.sql",
-                    "database": config.database,
-                },
-                {
-                    "type": "ExecuteSql",
-                    "file": "../basemap/layers/polygon/prepare.sql",
-                    "database": config.database,
-                },
-                {
-                    "type": "ExecuteSql",
-                    "file": "../basemap/layers/polygon/index.sql",
-                    "database": config.database,
-                },
-            ]
-        },
         {
             "id": "daylight-highway",
             "needs": ["daylight-linestring"],
@@ -337,114 +314,133 @@ export default {
             ]
         },
         {
-            "id": "daylight-natural",
-            "needs": ["daylight-polygon"],
+            "id": "daylight-waterway",
+            "needs": ["daylight-linestring"],
             "tasks": [
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/natural/clean.sql",
+                    "file": "../basemap/layers/waterway/clean.sql",
                     "database": config.database,
                 },
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/natural/prepare.sql",
+                    "file": "../basemap/layers/waterway/prepare.sql",
                     "database": config.database,
                 },
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/natural/simplify.sql",
+                    "file": "../basemap/layers/waterway/simplify.sql",
                     "database": config.database,
                     "parallel": true,
                 },
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/natural/index.sql",
+                    "file": "../basemap/layers/waterway/index.sql",
                     "database": config.database,
                     "parallel": true
                 },
             ]
         },
         {
-            "id": "daylight-landuse",
+            "id": "daylight-polygon",
+            "needs": ["daylight-member"],
+            "tasks": [
+                {
+                    "type": "ExecuteSql",
+                    "file": "../basemap/layers/polygon/clean.sql",
+                    "database": config.database,
+                },
+                {
+                    "type": "ExecuteSql",
+                    "file": "../basemap/layers/polygon/prepare.sql",
+                    "database": config.database,
+                },
+                {
+                    "type": "ExecuteSql",
+                    "file": "../basemap/layers/polygon/index.sql",
+                    "database": config.database,
+                },
+            ]
+        },
+        {
+            "id": "daylight-natural",
             "needs": ["daylight-polygon"],
             "tasks": [
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/landuse/clean.sql",
+                    "file": "../basemap/layers/natural/clean.sql",
                     "database": config.database,
                 },
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/landuse/prepare.sql",
+                    "file": "../basemap/layers/natural/prepare.sql",
                     "database": config.database,
                 },
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/landuse/simplify.sql",
+                    "file": "../basemap/layers/natural/simplify.sql",
                     "database": config.database,
                     "parallel": true,
                 },
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/landuse/index.sql",
+                    "file": "../basemap/layers/natural/index.sql",
                     "database": config.database,
                     "parallel": true
                 },
             ]
         },
         {
-            "id": "daylight-leisure",
-            "needs": [
-                "daylight-polygon"
-            ],
+            "id": "daylight-landuse",
+            "needs": ["daylight-polygon"],
             "tasks": [
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/leisure/clean.sql",
+                    "file": "../basemap/layers/landuse/clean.sql",
                     "database": config.database,
                 },
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/leisure/prepare.sql",
+                    "file": "../basemap/layers/landuse/prepare.sql",
                     "database": config.database,
                 },
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/leisure/simplify.sql",
+                    "file": "../basemap/layers/landuse/simplify.sql",
                     "database": config.database,
                     "parallel": true,
                 },
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/leisure/index.sql",
+                    "file": "../basemap/layers/landuse/index.sql",
                     "database": config.database,
                     "parallel": true
                 },
             ]
         },
         {
-            "id": "daylight-waterway",
-            "needs": ["daylight-linestring"],
+            "id": "daylight-leisure",
+            "needs": ["daylight-polygon"],
             "tasks": [
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/waterway/clean.sql",
+                    "file": "../basemap/layers/leisure/clean.sql",
                     "database": config.database,
                 },
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/waterway/prepare.sql",
+                    "file": "../basemap/layers/leisure/prepare.sql",
                     "database": config.database,
                 },
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/waterway/simplify.sql",
+                    "file": "../basemap/layers/leisure/simplify.sql",
                     "database": config.database,
                     "parallel": true,
                 },
                 {
                     "type": "ExecuteSql",
-                    "file": "../basemap/layers/waterway/index.sql",
+                    "file": "../basemap/layers/leisure/index.sql",
                     "database": config.database,
                     "parallel": true
                 },


Reply via email to