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 c05a85fd Fix minor issues and improve the release process (#744)
c05a85fd is described below

commit c05a85fd4675b5c8498049de0c8b299542a60f9b
Author: Bertil Chapuis <[email protected]>
AuthorDate: Wed Aug 16 12:59:05 2023 +0200

    Fix minor issues and improve the release process (#744)
    
    * Reintroduce generic type for keys in maps
    
    * Improve the collection api
    
    * Add some scripts to prepare the release
    
    * Remove geoboundaries due to projection problems at the poles
---
 .gitignore                                         |  15 ++-
 .../baremaps/benchmarks/DataMapBenchmark.java      |   2 +-
 .../baremaps/benchmarks/MBTilesBenchmark.java      |   2 +-
 .../baremaps/benchmarks/MemoryBenchmark.java       |   2 +-
 .../OpenStreetMapGeometriesBenchmark.java          |   4 +-
 .../java/org/apache/baremaps/cli/map/Export.java   |   8 +-
 .../java/org/apache/baremaps/cli/map/MBTiles.java  |   2 +-
 .../baremaps/database/collection/DataMap.java      |  32 ++---
 .../database/collection/IndexedDataMap.java        |   4 +-
 .../database/collection/MemoryAlignedDataMap.java  |   2 +-
 .../database/collection/MonotonicDataMap.java      |   2 +-
 .../collection/MonotonicFixedSizeDataMap.java      |   2 +-
 .../collection/MonotonicPairedDataMap.java         |   2 +-
 .../apache/baremaps/openstreetmap/DiffService.java |   7 +-
 .../function/CoordinateMapBuilder.java             |   4 +-
 .../function/EntityGeometryBuilder.java            |   4 +-
 .../openstreetmap/function/GeometryMapBuilder.java |   4 +-
 .../function/ReferenceMapBuilder.java              |   4 +-
 .../function/RelationGeometryBuilder.java          |   8 +-
 .../openstreetmap/function/WayGeometryBuilder.java |   4 +-
 .../baremaps/openstreetmap/pbf/PbfBlockReader.java |  13 +--
 .../openstreetmap/pbf/PbfEntityReader.java         |   8 +-
 .../baremaps/openstreetmap/pbf/PbfReader.java      |  24 ++--
 .../postgres/PostgresCoordinateMap.java            |   2 +-
 .../postgres/PostgresReferenceMap.java             |   2 +-
 .../storage/postgres/PostgresDataSchema.java       |   1 -
 .../org/apache/baremaps/utils/SqliteUtils.java     |   9 +-
 .../baremaps/workflow/tasks/ExportVectorTiles.java |  28 +++--
 .../workflow/tasks/ImportOpenStreetMap.java        |  28 ++---
 .../workflow/tasks/UpdateOpenStreetMap.java        |   7 +-
 .../org/apache/baremaps/database/DataMapTest.java  |  20 ++--
 .../EntityDataTypeGeometryBuilderTest.java         |   4 +-
 .../geometry/RelationGeometryBuilderTest.java      |   4 +-
 .../baremaps/openstreetmap/store/MockDataMap.java  |  12 +-
 .../apache/baremaps/workflow/ObjectMapperTest.java |   1 -
 .../baremaps/workflow/tasks/ImportMonacoTest.java  |   4 +-
 .../workflow/tasks/ImportUpdateDataTest.java       |   4 +-
 .../tasks/ImportUpdateLiechtensteinTest.java       |   4 +-
 basemap/config.js                                  |   1 +
 basemap/layers/boundary/tileset.js                 |  12 --
 basemap/tileset.js                                 |   3 +-
 basemap/workflow.js                                |  72 ------------
 examples/naturalearth/tileset.json                 |   2 +-
 examples/transformation/simplifications.sql        |  46 --------
 examples/transformation/style.json                 |  26 -----
 examples/transformation/tileset.json               |  31 -----
 examples/transformation/workflow.json              |  81 -------------
 scripts/build-project.sh                           |  40 +++++++
 scripts/generate-planet.sh                         |  37 ++++++
 scripts/test-basemap.sh                            |  74 ++++++++++++
 scripts/test-examples.sh                           | 130 +++++++++++++++++++++
 51 files changed, 439 insertions(+), 405 deletions(-)

diff --git a/.gitignore b/.gitignore
index 07613b01..3348834a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,9 +21,11 @@ examples/output/
 /baremaps/
 
 # Map
-/basemap/data/
-/basemap/cache_*/
-/basemap/local.*
+basemap/data/
+basemap/cache_*/
+basemap/local.*
+basemap/tiles.mbtiles
+basemap/tiles/
 
 # Examples
 examples/ip-to-location/archives/
@@ -36,8 +38,15 @@ examples/geocoding/downloads/
 examples/geocoding/geocoder-index/
 
 examples/extrusion/*.pbf
+
 examples/naturalearth/natural_earth_vector/
+examples/naturalearth/natural_earth_vector.gpkg.zip
+examples/naturalearth/tiles/
+
 examples/openstreetmap/*.pbf
+examples/openstreetmap/tiles.mbtiles
+examples/openstreetmap/tiles/
+
 examples/transformation/*.pbf
 
 # JMH
diff --git 
a/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/DataMapBenchmark.java
 
b/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/DataMapBenchmark.java
index 24b11931..da13e44f 100644
--- 
a/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/DataMapBenchmark.java
+++ 
b/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/DataMapBenchmark.java
@@ -31,7 +31,7 @@ public class DataMapBenchmark {
 
   private static final long N = 1 << 25;
 
-  private static void benchmark(DataMap<Long> map, long n) {
+  private static void benchmark(DataMap<Long, Long> map, long n) {
     for (long i = 0; i < n; i++) {
       map.put(i, i);
     }
diff --git 
a/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/MBTilesBenchmark.java
 
b/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/MBTilesBenchmark.java
index 61c81265..8d170729 100644
--- 
a/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/MBTilesBenchmark.java
+++ 
b/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/MBTilesBenchmark.java
@@ -47,7 +47,7 @@ public class MBTilesBenchmark {
   @Setup
   public void setup() throws IOException, TileStoreException {
     file = Files.createTempFile(Paths.get("."), "baremaps", ".mbtiles");
-    mbTilesStore = new MBTilesStore(SqliteUtils.createDataSource(file));
+    mbTilesStore = new MBTilesStore(SqliteUtils.createDataSource(file, false));
     mbTilesStore.initializeDatabase();
   }
 
diff --git 
a/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/MemoryBenchmark.java
 
b/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/MemoryBenchmark.java
index e069ba2e..025b9eef 100644
--- 
a/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/MemoryBenchmark.java
+++ 
b/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/MemoryBenchmark.java
@@ -45,7 +45,7 @@ public class MemoryBenchmark {
 
   private static final long N = 1 << 25;
 
-  private void benchmark(DataMap<Long> map, long n) {
+  private void benchmark(DataMap<Long, Long> map, long n) {
     for (long i = 0; i < n; i++) {
       map.put(i, i);
     }
diff --git 
a/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/OpenStreetMapGeometriesBenchmark.java
 
b/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/OpenStreetMapGeometriesBenchmark.java
index d517f463..d0097c70 100644
--- 
a/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/OpenStreetMapGeometriesBenchmark.java
+++ 
b/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/OpenStreetMapGeometriesBenchmark.java
@@ -75,9 +75,9 @@ public class OpenStreetMapGeometriesBenchmark {
   @Measurement(iterations = 3)
   public void store() throws IOException {
     Path file = Files.createTempFile(Paths.get("."), "baremaps_", ".tmp");
-    DataMap<Coordinate> coordinateMap = new IndexedDataMap<>(
+    DataMap<Long, Coordinate> coordinateMap = new IndexedDataMap<>(
         new AppendOnlyBuffer<>(new CoordinateDataType(), new 
MemoryMappedFile(file)));
-    DataMap<List<Long>> referenceMap =
+    DataMap<Long, List<Long>> referenceMap =
         new IndexedDataMap<>(new AppendOnlyBuffer<>(new LongListDataType(), 
new OnHeapMemory()));
     AtomicLong nodes = new AtomicLong(0);
     AtomicLong ways = new AtomicLong(0);
diff --git a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Export.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Export.java
index 61df24c7..86c6e190 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Export.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Export.java
@@ -53,14 +53,14 @@ public class Export implements Callable<Integer> {
       description = "The index of the batch in the array.")
   private int batchArrayIndex = 0;
 
-  @Option(names = {"--mbtiles"}, paramLabel = "MBTILES",
-      description = "The repository is in the MBTiles format.")
-  private boolean mbtiles = false;
+  @Option(names = {"--format"}, paramLabel = "FORMAT",
+      description = "The format of the repository.")
+  private ExportVectorTiles.Format format = ExportVectorTiles.Format.file;
 
   @Override
   public Integer call() throws Exception {
     new ExportVectorTiles(tileset.toAbsolutePath(),
-        repository.toAbsolutePath(), batchArraySize, batchArrayIndex, mbtiles)
+        repository.toAbsolutePath(), batchArraySize, batchArrayIndex, format)
             .execute(new WorkflowContext());
     return 0;
   }
diff --git 
a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/MBTiles.java 
b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/MBTiles.java
index 04739ed9..cfb47003 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/MBTiles.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/MBTiles.java
@@ -71,7 +71,7 @@ public class MBTiles implements Callable<Integer> {
     var configReader = new ConfigReader();
     var caffeineSpec = CaffeineSpec.parse(cache);
 
-    var datasource = SqliteUtils.createDataSource(mbtilesPath);
+    var datasource = SqliteUtils.createDataSource(mbtilesPath, true);
     var tileStoreSupplierType = new TypeLiteral<Supplier<TileStore>>() {};
     var tileStore = new MBTilesStore(datasource);
     var tileCache = new TileCache(tileStore, caffeineSpec);
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/DataMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/DataMap.java
index 7720bc51..4ac75d53 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/DataMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/DataMap.java
@@ -20,13 +20,13 @@ import java.util.*;
 /**
  * An abstract map of data elements that can hold a large number of elements.
  *
- * @param <E> The type of the elements.
+ * @param <V> The type of the elements.
  */
-public abstract class DataMap<E> implements Map<Long, E> {
+public abstract class DataMap<K, V> implements Map<K, V> {
 
   /** {@inheritDoc} */
   @Override
-  public void putAll(Map<? extends Long, ? extends E> m) {
+  public void putAll(Map<? extends K, ? extends V> m) {
     m.forEach(this::put);
   }
 
@@ -36,7 +36,7 @@ public abstract class DataMap<E> implements Map<Long, E> {
    * @param keys the keys
    * @return the values
    */
-  public List<E> getAll(List<Long> keys) {
+  public List<V> getAll(List<K> keys) {
     return Streams.stream(keys).map(this::get).toList();
   }
 
@@ -63,17 +63,17 @@ public abstract class DataMap<E> implements Map<Long, E> {
    *
    * @return an iterator
    */
-  protected abstract Iterator<Long> keyIterator();
+  protected abstract Iterator<K> keyIterator();
 
   /** {@inheritDoc} */
   @Override
-  public Set<Long> keySet() {
+  public Set<K> keySet() {
     return new KeySet();
   }
 
-  private class KeySet extends AbstractSet<Long> {
+  private class KeySet extends AbstractSet<K> {
     @Override
-    public Iterator<Long> iterator() {
+    public Iterator<K> iterator() {
       return keyIterator();
     }
 
@@ -88,17 +88,17 @@ public abstract class DataMap<E> implements Map<Long, E> {
    *
    * @return an iterator
    */
-  protected abstract Iterator<E> valueIterator();
+  protected abstract Iterator<V> valueIterator();
 
   /** {@inheritDoc} */
   @Override
-  public Collection<E> values() {
+  public Collection<V> values() {
     return new ValueCollection();
   }
 
-  private class ValueCollection extends AbstractCollection<E> {
+  private class ValueCollection extends AbstractCollection<V> {
     @Override
-    public Iterator<E> iterator() {
+    public Iterator<V> iterator() {
       return valueIterator();
     }
 
@@ -113,17 +113,17 @@ public abstract class DataMap<E> implements Map<Long, E> {
    *
    * @return an iterator
    */
-  protected abstract Iterator<Entry<Long, E>> entryIterator();
+  protected abstract Iterator<Entry<K, V>> entryIterator();
 
   /** {@inheritDoc} */
   @Override
-  public Set<Entry<Long, E>> entrySet() {
+  public Set<Entry<K, V>> entrySet() {
     return new EntrySet();
   }
 
-  private class EntrySet extends AbstractSet<Entry<Long, E>> {
+  private class EntrySet extends AbstractSet<Entry<K, V>> {
     @Override
-    public Iterator<Entry<Long, E>> iterator() {
+    public Iterator<Entry<K, V>> iterator() {
       return entryIterator();
     }
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/IndexedDataMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/IndexedDataMap.java
index 394e569e..9906a5d9 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/IndexedDataMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/IndexedDataMap.java
@@ -26,7 +26,7 @@ import java.util.Map;
  *
  * @param <E> The type of the elements.
  */
-public class IndexedDataMap<E> extends DataMap<E> {
+public class IndexedDataMap<E> extends DataMap<Long, E> {
 
   private final Map<Long, Long> index;
 
@@ -109,7 +109,7 @@ public class IndexedDataMap<E> extends DataMap<E> {
    */
   @Override
   public long sizeAsLong() {
-    if (index instanceof DataMap<Long>dataMap) {
+    if (index instanceof DataMap<?, ?>dataMap) {
       return dataMap.sizeAsLong();
     } else {
       return index.size();
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MemoryAlignedDataMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MemoryAlignedDataMap.java
index f21331d3..5aa8b981 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MemoryAlignedDataMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MemoryAlignedDataMap.java
@@ -27,7 +27,7 @@ import org.apache.baremaps.database.type.FixedSizeDataType;
  * <p>
  * This code has been adapted from Planetiler (Apache license).
  */
-public class MemoryAlignedDataMap<E> extends DataMap<E> {
+public class MemoryAlignedDataMap<E> extends DataMap<Long, E> {
 
   private final FixedSizeDataType<E> dataType;
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicDataMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicDataMap.java
index 4d0e32e2..26e50abb 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicDataMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicDataMap.java
@@ -31,7 +31,7 @@ import org.apache.baremaps.database.type.PairDataType.Pair;
  * <p>
  * Copyright (c) Planetiler.
  */
-public class MonotonicDataMap<E> extends DataMap<E> {
+public class MonotonicDataMap<E> extends DataMap<Long, E> {
 
   private final DataList<Long> offsets;
   private final DataList<Pair<Long, Long>> keys;
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicFixedSizeDataMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicFixedSizeDataMap.java
index 59e7c5f6..e5ca5264 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicFixedSizeDataMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicFixedSizeDataMap.java
@@ -30,7 +30,7 @@ import org.apache.baremaps.database.type.LongDataType;
  * <p>
  * Copyright (c) Planetiler.
  */
-public class MonotonicFixedSizeDataMap<E> extends DataMap<E> {
+public class MonotonicFixedSizeDataMap<E> extends DataMap<Long, E> {
 
   private final DataList<Long> offsets;
   private final DataList<Long> keys;
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicPairedDataMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicPairedDataMap.java
index 60100f85..1f618eb8 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicPairedDataMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/MonotonicPairedDataMap.java
@@ -24,7 +24,7 @@ import org.apache.baremaps.database.type.PairDataType.Pair;
  * their key and inserted in a monotonic way. The elements cannot be removed 
or updated once
  * inserted.
  */
-public class MonotonicPairedDataMap<E> extends DataMap<E> {
+public class MonotonicPairedDataMap<E> extends DataMap<Long, E> {
 
   private final DataList<Long> offsets;
   private final MemoryAlignedDataList<Pair<Long, E>> values;
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/DiffService.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/DiffService.java
index 86a085c1..ec6019f1 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/DiffService.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/DiffService.java
@@ -45,8 +45,8 @@ public class DiffService implements Callable<List<TileCoord>> 
{
 
   private static final Logger logger = 
LoggerFactory.getLogger(DiffService.class);
 
-  private final DataMap<Coordinate> coordinateMap;
-  private final DataMap<List<Long>> referenceMap;
+  private final DataMap<Long, Coordinate> coordinateMap;
+  private final DataMap<Long, List<Long>> referenceMap;
   private final HeaderRepository headerRepository;
   private final Repository<Long, Node> nodeRepository;
   private final Repository<Long, Way> wayRepository;
@@ -54,7 +54,8 @@ public class DiffService implements Callable<List<TileCoord>> 
{
   private final int srid;
   private final int zoom;
 
-  public DiffService(DataMap<Coordinate> coordinateMap, DataMap<List<Long>> 
referenceMap,
+  public DiffService(DataMap<Long, Coordinate> coordinateMap,
+      DataMap<Long, List<Long>> referenceMap,
       HeaderRepository headerRepository, Repository<Long, Node> nodeRepository,
       Repository<Long, Way> wayRepository, Repository<Long, Relation> 
relationRepository, int srid,
       int zoom) {
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 5b6dbf1c..8dec05d8 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
@@ -23,14 +23,14 @@ import org.locationtech.jts.geom.Coordinate;
 /** A consumer that stores openstreetmap coordinates in a map. */
 public class CoordinateMapBuilder implements Consumer<Entity> {
 
-  private final DataMap<Coordinate> coordinateMap;
+  private final DataMap<Long, Coordinate> coordinateMap;
 
   /**
    * Constructs a {@code CacheBlockConsumer} with the provided map.
    *
    * @param coordinateMap the map of coordinates
    */
-  public CoordinateMapBuilder(DataMap<Coordinate> coordinateMap) {
+  public CoordinateMapBuilder(DataMap<Long, Coordinate> coordinateMap) {
     this.coordinateMap = coordinateMap;
   }
 
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 2ff4dafc..1d2b6446 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
@@ -36,8 +36,8 @@ public class EntityGeometryBuilder implements 
Consumer<Entity> {
    * @param coordinateMap the coordinate cache
    * @param referenceMap the reference cache
    */
-  public EntityGeometryBuilder(DataMap<Coordinate> coordinateMap,
-      DataMap<List<Long>> referenceMap) {
+  public EntityGeometryBuilder(DataMap<Long, Coordinate> coordinateMap,
+      DataMap<Long, List<Long>> referenceMap) {
     this.nodeGeometryBuilder = new NodeGeometryBuilder();
     this.wayGeometryBuilder = new WayGeometryBuilder(coordinateMap);
     this.relationGeometryBuilder = new RelationGeometryBuilder(coordinateMap, 
referenceMap);
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/GeometryMapBuilder.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/GeometryMapBuilder.java
index b72782e9..1cd084db 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/GeometryMapBuilder.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/GeometryMapBuilder.java
@@ -26,7 +26,7 @@ import org.locationtech.jts.geom.Geometry;
  */
 public class GeometryMapBuilder implements Consumer<Entity> {
 
-  private final DataMap<Geometry> geometryMap;
+  private final DataMap<Long, Geometry> geometryMap;
 
   private final Predicate<Entity> filter;
 
@@ -36,7 +36,7 @@ public class GeometryMapBuilder implements Consumer<Entity> {
    * @param geometryMap the geometry map
    * @param filter the entity filter
    */
-  public GeometryMapBuilder(DataMap<Geometry> geometryMap, Predicate<Entity> 
filter) {
+  public GeometryMapBuilder(DataMap<Long, Geometry> geometryMap, 
Predicate<Entity> filter) {
     this.geometryMap = geometryMap;
     this.filter = filter;
   }
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 d7c880ed..3f9987b5 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
@@ -23,14 +23,14 @@ import org.apache.baremaps.openstreetmap.model.Way;
 /** A consumer that stores openstreetmap references in a map. */
 public class ReferenceMapBuilder implements Consumer<Entity> {
 
-  private final DataMap<List<Long>> referenceMap;
+  private final DataMap<Long, List<Long>> referenceMap;
 
   /**
    * Constructs a {@code CacheBlockConsumer} with the provided map.
    *
    * @param referenceMap the map of references
    */
-  public ReferenceMapBuilder(DataMap<List<Long>> referenceMap) {
+  public ReferenceMapBuilder(DataMap<Long, List<Long>> referenceMap) {
     this.referenceMap = referenceMap;
   }
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/RelationGeometryBuilder.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/RelationGeometryBuilder.java
index 096e30be..1ca50afe 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/RelationGeometryBuilder.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/RelationGeometryBuilder.java
@@ -36,8 +36,8 @@ public class RelationGeometryBuilder implements 
Consumer<Relation> {
 
   private static final Logger logger = 
LoggerFactory.getLogger(RelationGeometryBuilder.class);
 
-  private final DataMap<Coordinate> coordinateMap;
-  private final DataMap<List<Long>> referenceMap;
+  private final DataMap<Long, Coordinate> coordinateMap;
+  private final DataMap<Long, List<Long>> referenceMap;
 
   /**
    * Constructs a relation geometry builder.
@@ -45,8 +45,8 @@ public class RelationGeometryBuilder implements 
Consumer<Relation> {
    * @param coordinateMap the coordinates map
    * @param referenceMap the references map
    */
-  public RelationGeometryBuilder(DataMap<Coordinate> coordinateMap,
-      DataMap<List<Long>> referenceMap) {
+  public RelationGeometryBuilder(DataMap<Long, Coordinate> coordinateMap,
+      DataMap<Long, List<Long>> referenceMap) {
     this.coordinateMap = coordinateMap;
     this.referenceMap = referenceMap;
   }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/WayGeometryBuilder.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/WayGeometryBuilder.java
index 299ec5f7..a3d9b1cd 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/WayGeometryBuilder.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/WayGeometryBuilder.java
@@ -31,14 +31,14 @@ public class WayGeometryBuilder implements Consumer<Way> {
 
   private static final Logger logger = 
LoggerFactory.getLogger(WayGeometryBuilder.class);
 
-  private final DataMap<Coordinate> coordinateMap;
+  private final DataMap<Long, Coordinate> coordinateMap;
 
   /**
    * Constructs a way geometry builder.
    *
    * @param coordinateMap the coordinates map
    */
-  public WayGeometryBuilder(DataMap<Coordinate> coordinateMap) {
+  public WayGeometryBuilder(DataMap<Long, Coordinate> coordinateMap) {
     this.coordinateMap = coordinateMap;
   }
 
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 79affe43..ea701a6e 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
@@ -32,10 +32,9 @@ public class PbfBlockReader implements PbfReader<Block> {
 
   private int srid = 4326;
 
-  private DataMap<Coordinate> coordinateMap;
-
-  private DataMap<List<Long>> referenceMap;
+  private DataMap<Long, Coordinate> coordinateMap;
 
+  private DataMap<Long, List<Long>> referenceMap;
 
   @Override
   public int buffer() {
@@ -75,23 +74,23 @@ public class PbfBlockReader implements PbfReader<Block> {
   }
 
   @Override
-  public DataMap<Coordinate> coordinateMap() {
+  public DataMap<Long, Coordinate> coordinateMap() {
     return coordinateMap;
   }
 
   @Override
-  public PbfBlockReader coordinateMap(DataMap<Coordinate> coordinateMap) {
+  public PbfBlockReader coordinateMap(DataMap<Long, Coordinate> coordinateMap) 
{
     this.coordinateMap = coordinateMap;
     return this;
   }
 
   @Override
-  public DataMap<List<Long>> referenceMap() {
+  public DataMap<Long, List<Long>> referenceMap() {
     return referenceMap;
   }
 
   @Override
-  public PbfBlockReader referenceMap(DataMap<List<Long>> referenceMap) {
+  public PbfBlockReader referenceMap(DataMap<Long, List<Long>> referenceMap) {
     this.referenceMap = referenceMap;
     return this;
   }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/pbf/PbfEntityReader.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/pbf/PbfEntityReader.java
index 3fb7db28..57f6ef6d 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/pbf/PbfEntityReader.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/pbf/PbfEntityReader.java
@@ -70,23 +70,23 @@ public class PbfEntityReader implements PbfReader<Entity> {
   }
 
   @Override
-  public DataMap<Coordinate> coordinateMap() {
+  public DataMap<Long, Coordinate> coordinateMap() {
     return reader.coordinateMap();
   }
 
   @Override
-  public PbfEntityReader coordinateMap(DataMap<Coordinate> coordinateMap) {
+  public PbfEntityReader coordinateMap(DataMap<Long, Coordinate> 
coordinateMap) {
     reader.coordinateMap(coordinateMap);
     return this;
   }
 
   @Override
-  public DataMap<List<Long>> referenceMap() {
+  public DataMap<Long, List<Long>> referenceMap() {
     return reader.referenceMap();
   }
 
   @Override
-  public PbfEntityReader referenceMap(DataMap<List<Long>> referenceMap) {
+  public PbfEntityReader referenceMap(DataMap<Long, List<Long>> referenceMap) {
     reader.referenceMap(referenceMap);
     return this;
   }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/pbf/PbfReader.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/pbf/PbfReader.java
index 7a515ff8..4902f4a7 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/pbf/PbfReader.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/pbf/PbfReader.java
@@ -34,9 +34,9 @@ public interface PbfReader<T> extends OsmReader<T> {
    * Sets the number of blobs buffered by the parser to parallelize 
deserialization.
    *
    * @param buffer the size of the buffer
-   * @return the parser
+   * @return the reader
    */
-  PbfReader buffer(int buffer);
+  PbfReader<T> buffer(int buffer);
 
   /**
    * Gets the flag enabling the generation of geometries.
@@ -49,9 +49,9 @@ public interface PbfReader<T> extends OsmReader<T> {
    * Sets the flag enabling the generation of geometries.
    *
    * @param geometries the value of the flag
-   * @return the parser
+   * @return the reader
    */
-  PbfReader geometries(boolean geometries);
+  PbfReader<T> geometries(boolean geometries);
 
   /**
    * Gets the projection of the geometries generated by this parser.
@@ -64,39 +64,39 @@ public interface PbfReader<T> extends OsmReader<T> {
    * Sets the projection of the geometries generated by this parser.
    *
    * @param srid the projection of the geometries
-   * @return the parser
+   * @return the reader
    */
-  PbfReader projection(int srid);
+  PbfReader<T> projection(int srid);
 
   /**
    * Gets the map used to store coordinates for generating geometries.
    *
    * @return the map of coordinates
    */
-  DataMap<Coordinate> coordinateMap();
+  DataMap<Long, Coordinate> coordinateMap();
 
   /**
    * Sets the map used to store coordinates for generating geometries.
    *
    * @param coordinateMap the map of coordinates
-   * @return the parser
+   * @return the reader
    */
-  PbfReader coordinateMap(DataMap<Coordinate> coordinateMap);
+  PbfReader<T> coordinateMap(DataMap<Long, Coordinate> coordinateMap);
 
   /**
    * Gets the map used to store references for generating geometries.
    *
    * @return the map of references
    */
-  DataMap<List<Long>> referenceMap();
+  DataMap<Long, List<Long>> referenceMap();
 
   /**
    * Sets the map used to store references for generating geometries.
    *
    * @param referenceMap the map of references
-   * @return the parser
+   * @return the reader
    */
-  PbfReader referenceMap(DataMap<List<Long>> referenceMap);
+  PbfReader<T> referenceMap(DataMap<Long, List<Long>> referenceMap);
 
   /**
    * Creates an ordered stream of osm objects.
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresCoordinateMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresCoordinateMap.java
index 9da22933..a4fe9944 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresCoordinateMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresCoordinateMap.java
@@ -24,7 +24,7 @@ import org.locationtech.jts.geom.Coordinate;
 /**
  * A read-only {@link DataMap} for coordinates baked by OpenStreetMap nodes 
stored in PostgreSQL.
  */
-public class PostgresCoordinateMap extends DataMap<Coordinate> {
+public class PostgresCoordinateMap extends DataMap<Long, Coordinate> {
 
   public static final String SELECT_CONTAINS_KEY = """
       SELECT 1
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresReferenceMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresReferenceMap.java
index 77c175e5..bf6707dd 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresReferenceMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresReferenceMap.java
@@ -27,7 +27,7 @@ import org.apache.baremaps.database.collection.DataMap;
 /**
  * A read-only {@code LongDataMap} for references baked by OpenStreetMap ways 
stored in Postgres.
  */
-public class PostgresReferenceMap extends DataMap<List<Long>> {
+public class PostgresReferenceMap extends DataMap<Long, List<Long>> {
 
   public static final String SELECT_CONTAINS_KEY = """
       SELECT 1
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataSchema.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataSchema.java
index e21703c4..b4a21c42 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataSchema.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/storage/postgres/PostgresDataSchema.java
@@ -213,7 +213,6 @@ public class PostgresDataSchema implements DataSchema {
         .map(column -> "\"" + column.name() + "\"")
         .collect(Collectors.joining(", ")));
     builder.append(") FROM STDIN BINARY");
-    System.out.println(builder.toString());
     return builder.toString();
   }
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/utils/SqliteUtils.java 
b/baremaps-core/src/main/java/org/apache/baremaps/utils/SqliteUtils.java
index f6ea9051..35e980ae 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/utils/SqliteUtils.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/utils/SqliteUtils.java
@@ -43,8 +43,9 @@ public final class SqliteUtils {
    * @param path the path to the SQLite database
    * @return the SQLite data source
    */
-  public static HikariDataSource createDataSource(Path path) {
+  public static HikariDataSource createDataSource(Path path, boolean readOnly) 
{
     var sqliteConfig = new SQLiteConfig();
+    sqliteConfig.setReadOnly(readOnly);
     sqliteConfig.setCacheSize(1000000);
     sqliteConfig.setPageSize(65536);
     sqliteConfig.setJournalMode(JournalMode.OFF);
@@ -54,11 +55,13 @@ public final class SqliteUtils {
 
     var sqliteDataSource = new SQLiteDataSource();
     sqliteDataSource.setConfig(sqliteConfig);
-    sqliteDataSource.setUrl("jdbc:sqlite:" + path);
+    sqliteDataSource.setUrl("jdbc:sqlite:" + path.toAbsolutePath());
+
+    System.out.println(path.toAbsolutePath());
 
     var hikariConfig = new HikariConfig();
     hikariConfig.setDataSource(sqliteDataSource);
-    hikariConfig.setMaximumPoolSize(1);
+    hikariConfig.setMaximumPoolSize(readOnly ? 
Runtime.getRuntime().availableProcessors() : 1);
 
     return new HikariDataSource(hikariConfig);
   }
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExportVectorTiles.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExportVectorTiles.java
index 5f3f4910..07c2a9ae 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExportVectorTiles.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ExportVectorTiles.java
@@ -44,7 +44,12 @@ public record ExportVectorTiles(
     Path repository,
     int batchArraySize,
     int batchArrayIndex,
-    boolean mbtiles) implements Task {
+    Format format) implements Task {
+
+  public enum Format {
+    file,
+    mbtiles
+  }
 
   private static final Logger logger = 
LoggerFactory.getLogger(ExportVectorTiles.class);
 
@@ -77,15 +82,18 @@ public record ExportVectorTiles(
   }
 
   private TileStore targetTileStore(Tileset source) throws TileStoreException, 
IOException {
-    if (mbtiles) {
-      Files.deleteIfExists(repository);
-      var dataSource = SqliteUtils.createDataSource(repository);
-      var tilesStore = new MBTilesStore(dataSource);
-      tilesStore.initializeDatabase();
-      tilesStore.writeMetadata(metadata(source));
-      return tilesStore;
-    } else {
-      return new FileTileStore(repository);
+    switch (format) {
+      case file:
+        return new FileTileStore(repository);
+      case mbtiles:
+        Files.deleteIfExists(repository);
+        var dataSource = SqliteUtils.createDataSource(repository, false);
+        var tilesStore = new MBTilesStore(dataSource);
+        tilesStore.initializeDatabase();
+        tilesStore.writeMetadata(metadata(source));
+        return tilesStore;
+      default:
+        throw new IllegalArgumentException("Unsupported format");
     }
   }
 
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOpenStreetMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOpenStreetMap.java
index b7053a70..b6486b9c 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOpenStreetMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/ImportOpenStreetMap.java
@@ -18,7 +18,7 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
 import org.apache.baremaps.database.collection.*;
-import org.apache.baremaps.database.memory.MemoryMappedFile;
+import org.apache.baremaps.database.memory.MemoryMappedDirectory;
 import org.apache.baremaps.database.type.LongDataType;
 import org.apache.baremaps.database.type.LongListDataType;
 import org.apache.baremaps.database.type.PairDataType;
@@ -69,35 +69,35 @@ public record ImportOpenStreetMap(Path file, String 
database, Integer databaseSr
 
     var cacheDir = Files.createTempDirectory(Paths.get("."), "cache_");
 
-    DataMap<Coordinate> coordinateMap;
+    DataMap<Long, Coordinate> coordinateMap;
     if (Files.size(path) > 1 << 30) {
-      var coordinatesFile = Files.createFile(cacheDir.resolve("coordinates"));
+      var coordinateDir = 
Files.createDirectories(cacheDir.resolve("coordinate_keys"));
       coordinateMap = new MemoryAlignedDataMap<>(
           new LonLatDataType(),
-          new MemoryMappedFile(coordinatesFile));
+          new MemoryMappedDirectory(coordinateDir));
     } else {
-      var coordinatesKeysFile = 
Files.createFile(cacheDir.resolve("coordinates_keys"));
-      var coordinatesValsFile = 
Files.createFile(cacheDir.resolve("coordinates_vals"));
+      var coordinateKeysDir = 
Files.createDirectories(cacheDir.resolve("coordinate_keys"));
+      var coordinateValuesDir = 
Files.createDirectories(cacheDir.resolve("coordinate_vals"));
       coordinateMap =
           new MonotonicDataMap<>(
               new MemoryAlignedDataList<>(
                   new PairDataType<>(new LongDataType(), new LongDataType()),
-                  new MemoryMappedFile(coordinatesKeysFile)),
+                  new MemoryMappedDirectory(coordinateKeysDir)),
               new AppendOnlyBuffer<>(
                   new LonLatDataType(),
-                  new MemoryMappedFile(coordinatesValsFile)));
+                  new MemoryMappedDirectory(coordinateValuesDir)));
     }
 
-    var referencesKeysDir = 
Files.createFile(cacheDir.resolve("references_keys"));
-    var referencesValuesDir = 
Files.createFile(cacheDir.resolve("references_vals"));
+    var referenceKeysDir = 
Files.createDirectory(cacheDir.resolve("reference_keys"));
+    var referenceValuesDir = 
Files.createDirectory(cacheDir.resolve("reference_vals"));
     var referenceMap =
         new MonotonicDataMap<>(
             new MemoryAlignedDataList<>(
                 new PairDataType<>(new LongDataType(), new LongDataType()),
-                new MemoryMappedFile(referencesKeysDir)),
+                new MemoryMappedDirectory(referenceKeysDir)),
             new AppendOnlyBuffer<>(
                 new LongListDataType(),
-                new MemoryMappedFile(referencesValuesDir)));
+                new MemoryMappedDirectory(referenceValuesDir)));
 
     execute(
         path,
@@ -114,8 +114,8 @@ public record ImportOpenStreetMap(Path file, String 
database, Integer databaseSr
 
   public static void execute(
       Path path,
-      DataMap<Coordinate> coordinateMap,
-      DataMap<List<Long>> referenceMap,
+      DataMap<Long, Coordinate> coordinateMap,
+      DataMap<Long, List<Long>> referenceMap,
       HeaderRepository headerRepository,
       Repository<Long, Node> nodeRepository,
       Repository<Long, Way> wayRepository,
diff --git 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UpdateOpenStreetMap.java
 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UpdateOpenStreetMap.java
index dd05a4b8..6b7babb5 100644
--- 
a/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UpdateOpenStreetMap.java
+++ 
b/baremaps-core/src/main/java/org/apache/baremaps/workflow/tasks/UpdateOpenStreetMap.java
@@ -51,8 +51,8 @@ public record UpdateOpenStreetMap(String database, Integer 
databaseSrid) impleme
   @Override
   public void execute(WorkflowContext context) throws Exception {
     var datasource = context.getDataSource(database);
-    DataMap<Coordinate> coordinateMap = new PostgresCoordinateMap(datasource);
-    DataMap<List<Long>> referenceMap = new PostgresReferenceMap(datasource);
+    DataMap<Long, Coordinate> coordinateMap = new 
PostgresCoordinateMap(datasource);
+    DataMap<Long, List<Long>> referenceMap = new 
PostgresReferenceMap(datasource);
     HeaderRepository headerRepository = new 
PostgresHeaderRepository(datasource);
     Repository<Long, Node> nodeRepository = new 
PostgresNodeRepository(datasource);
     Repository<Long, Way> wayRepository = new 
PostgresWayRepository(datasource);
@@ -67,7 +67,8 @@ public record UpdateOpenStreetMap(String database, Integer 
databaseSrid) impleme
         databaseSrid);
   }
 
-  public static void execute(DataMap<Coordinate> coordinateMap, 
DataMap<List<Long>> referenceMap,
+  public static void execute(DataMap<Long, Coordinate> coordinateMap,
+      DataMap<Long, List<Long>> referenceMap,
       HeaderRepository headerRepository, Repository<Long, Node> nodeRepository,
       Repository<Long, Way> wayRepository, Repository<Long, Relation> 
relationRepository,
       int srid) throws Exception {
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/database/DataMapTest.java 
b/baremaps-core/src/test/java/org/apache/baremaps/database/DataMapTest.java
index 0ccac5c5..4fefe63f 100644
--- a/baremaps-core/src/test/java/org/apache/baremaps/database/DataMapTest.java
+++ b/baremaps-core/src/test/java/org/apache/baremaps/database/DataMapTest.java
@@ -29,7 +29,7 @@ class DataMapTest {
 
   @ParameterizedTest
   @MethodSource("mapProvider")
-  void putAndGet(DataMap<Long> map) {
+  void putAndGet(DataMap<Long, Long> map) {
     for (long i = 0; i < 1000; i++) {
       map.put(i, i * 2);
     }
@@ -40,7 +40,7 @@ class DataMapTest {
 
   @ParameterizedTest
   @MethodSource("mapProvider")
-  void containsKey(DataMap<Long> map) {
+  void containsKey(DataMap<Long, Long> map) {
     for (long i = 0; i < 1000; i++) {
       assertFalse(map.containsKey(i));
     }
@@ -54,7 +54,7 @@ class DataMapTest {
 
   @ParameterizedTest
   @MethodSource("mapProvider")
-  void containsValue(DataMap<Long> map) {
+  void containsValue(DataMap<Long, Long> map) {
     for (long i = 0; i < 1000; i++) {
       assertFalse(map.containsValue(i));
     }
@@ -68,7 +68,7 @@ class DataMapTest {
 
   @ParameterizedTest
   @MethodSource("mapProvider")
-  void getAll(DataMap<Long> map) {
+  void getAll(DataMap<Long, Long> map) {
     for (long i = 0; i < 1000; i++) {
       map.put(i, i);
     }
@@ -83,7 +83,7 @@ class DataMapTest {
 
   @ParameterizedTest
   @MethodSource("mapProvider")
-  void size(DataMap<Long> map) {
+  void size(DataMap<Long, Long> map) {
     for (long i = 0; i < 1000; i++) {
       map.put(i, i);
     }
@@ -94,7 +94,7 @@ class DataMapTest {
 
   @ParameterizedTest
   @MethodSource("mapProvider")
-  void keySet(DataMap<Long> map) {
+  void keySet(DataMap<Long, Long> map) {
     var set = new HashSet<Long>();
     for (long i = 0; i < 1000; i++) {
       set.add(i);
@@ -106,7 +106,7 @@ class DataMapTest {
 
   @ParameterizedTest
   @MethodSource("mapProvider")
-  void valueSet(DataMap<Long> map) {
+  void valueSet(DataMap<Long, Long> map) {
     var set = new HashSet<Long>();
     for (long i = 0; i < 1000; i++) {
       set.add(i);
@@ -117,7 +117,7 @@ class DataMapTest {
 
   @ParameterizedTest
   @MethodSource("mapProvider")
-  void entrySet(DataMap<Long> map) {
+  void entrySet(DataMap<Long, Long> map) {
     var set = new HashSet<Entry<Long, Long>>();
     for (long i = 0; i < 1000; i++) {
       set.add(Map.entry(i, i));
@@ -128,7 +128,7 @@ class DataMapTest {
 
   @ParameterizedTest
   @MethodSource("mapProvider")
-  void isEmpty(DataMap<Long> map) {
+  void isEmpty(DataMap<Long, Long> map) {
     assertTrue(map.isEmpty());
     map.put(0l, 0l);
     assertFalse(map.isEmpty());
@@ -136,7 +136,7 @@ class DataMapTest {
 
   @ParameterizedTest
   @MethodSource("mapProvider")
-  void map(DataMap<Long> map) {
+  void map(DataMap<Long, Long> map) {
     assertTrue(map.isEmpty());
 
     map.put(10l, 10l);
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/geometry/EntityDataTypeGeometryBuilderTest.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/geometry/EntityDataTypeGeometryBuilderTest.java
index 8f744ede..1b4ef30c 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/geometry/EntityDataTypeGeometryBuilderTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/geometry/EntityDataTypeGeometryBuilderTest.java
@@ -107,7 +107,7 @@ class EntityDataTypeGeometryBuilderTest {
 
   static final Node NODE_15 = new Node(15, INFO, ImmutableMap.of(), 3, 1);
 
-  static final DataMap<Coordinate> COORDINATE_CACHE = new MockDataMap(Arrays
+  static final DataMap<Long, Coordinate> COORDINATE_CACHE = new 
MockDataMap(Arrays
       .asList(NODE_0, NODE_1, NODE_2, NODE_3, NODE_4, NODE_5, NODE_6, NODE_7, 
NODE_8, NODE_9,
           NODE_10, NODE_11, NODE_12, NODE_13, NODE_14, NODE_15)
       .stream()
@@ -129,7 +129,7 @@ class EntityDataTypeGeometryBuilderTest {
   static final Way WAY_5 =
       new Way(5, INFO, ImmutableMap.of(), ImmutableList.of(12l, 13l, 14l, 15l, 
12l));
 
-  static final DataMap<List<Long>> REFERENCE_CACHE =
+  static final DataMap<Long, List<Long>> REFERENCE_CACHE =
       new MockDataMap(Arrays.asList(WAY_0, WAY_1, WAY_2, WAY_3, WAY_4, 
WAY_5).stream()
           .collect(Collectors.toMap(w -> w.id(), w -> w.getNodes())));
 
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/geometry/RelationGeometryBuilderTest.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/geometry/RelationGeometryBuilderTest.java
index fd6224fc..5ba43698 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/geometry/RelationGeometryBuilderTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/geometry/RelationGeometryBuilderTest.java
@@ -37,10 +37,10 @@ class RelationGeometryBuilderTest {
   Geometry handleRelation(String file) throws IOException {
     InputStream input = new 
GZIPInputStream(this.getClass().getResourceAsStream(file));
     List<Entity> entities = new XmlEntityReader().stream(input).toList();
-    DataMap<Coordinate> coordinateMap = new MockDataMap<>(
+    DataMap<Long, Coordinate> coordinateMap = new MockDataMap<>(
         entities.stream().filter(e -> e instanceof Node).map(e -> (Node) 
e).collect(
             Collectors.toMap(n -> n.id(), n -> new Coordinate(n.getLon(), 
n.getLat()))));
-    DataMap<List<Long>> referenceMap =
+    DataMap<Long, List<Long>> referenceMap =
         new MockDataMap<>(entities.stream().filter(e -> e instanceof 
Way).map(e -> (Way) e)
             .collect(Collectors.toMap(w -> w.id(), w -> w.getNodes())));
     Relation relation = entities.stream().filter(e -> e instanceof 
Relation).map(e -> (Relation) e)
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/store/MockDataMap.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/store/MockDataMap.java
index 01fba4d6..6f3e37f2 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/store/MockDataMap.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/openstreetmap/store/MockDataMap.java
@@ -19,16 +19,16 @@ import java.util.Map;
 import org.apache.baremaps.database.collection.DataMap;
 import org.jetbrains.annotations.Nullable;
 
-public class MockDataMap<T> extends DataMap<T> {
+public class MockDataMap<K, T> extends DataMap<K, T> {
 
-  private final Map<Long, T> values;
+  private final Map<K, T> values;
 
-  public MockDataMap(Map<Long, T> values) {
+  public MockDataMap(Map<K, T> values) {
     this.values = values;
   }
 
   @Override
-  protected Iterator<Long> keyIterator() {
+  protected Iterator<K> keyIterator() {
     return values.keySet().iterator();
   }
 
@@ -38,7 +38,7 @@ public class MockDataMap<T> extends DataMap<T> {
   }
 
   @Override
-  protected Iterator<Entry<Long, T>> entryIterator() {
+  protected Iterator<Entry<K, T>> entryIterator() {
     return values.entrySet().iterator();
   }
 
@@ -64,7 +64,7 @@ public class MockDataMap<T> extends DataMap<T> {
 
   @Nullable
   @Override
-  public T put(Long key, T value) {
+  public T put(K key, T value) {
     return values.put(key, value);
   }
 
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/workflow/ObjectMapperTest.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/workflow/ObjectMapperTest.java
index 36f653ad..24d34d69 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/workflow/ObjectMapperTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/workflow/ObjectMapperTest.java
@@ -40,7 +40,6 @@ public class ObjectMapperTest {
                     
"jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps",
                     3857)))));
     var json = mapper.writeValueAsString(workflow1);
-    System.out.println(json);
     assertTrue(json.contains(DownloadUrl.class.getSimpleName()));
     assertTrue(json.contains(ImportOpenStreetMap.class.getSimpleName()));
 
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportMonacoTest.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportMonacoTest.java
index 4ac44277..aa5d26b5 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportMonacoTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportMonacoTest.java
@@ -46,9 +46,9 @@ class ImportMonacoTest extends PostgresRepositoryTest {
     PostgresWayRepository wayRepository = new 
PostgresWayRepository(dataSource());
     PostgresRelationRepository relationRepository = new 
PostgresRelationRepository(dataSource());
 
-    DataMap<Coordinate> coordinateMap =
+    DataMap<Long, Coordinate> coordinateMap =
         new IndexedDataMap<>(new AppendOnlyBuffer<>(new CoordinateDataType(), 
new OnHeapMemory()));
-    DataMap<List<Long>> referenceMap =
+    DataMap<Long, List<Long>> referenceMap =
         new IndexedDataMap<>(new AppendOnlyBuffer<>(new LongListDataType(), 
new OnHeapMemory()));
 
     // Import data
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateDataTest.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateDataTest.java
index 42b767a9..ff23d891 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateDataTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateDataTest.java
@@ -50,9 +50,9 @@ class ImportUpdateDataTest extends PostgresRepositoryTest {
     PostgresWayRepository wayRepository = new 
PostgresWayRepository(dataSource());
     PostgresRelationRepository relationRepository = new 
PostgresRelationRepository(dataSource());
 
-    DataMap<Coordinate> coordinateMap =
+    DataMap<Long, Coordinate> coordinateMap =
         new IndexedDataMap<>(new AppendOnlyBuffer<>(new CoordinateDataType(), 
new OnHeapMemory()));
-    DataMap<List<Long>> referenceMap =
+    DataMap<Long, List<Long>> referenceMap =
         new IndexedDataMap<>(new AppendOnlyBuffer<>(new LongListDataType(), 
new OnHeapMemory()));
 
     // Import data
diff --git 
a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateLiechtensteinTest.java
 
b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateLiechtensteinTest.java
index b255ee5b..fd1e23c6 100644
--- 
a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateLiechtensteinTest.java
+++ 
b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateLiechtensteinTest.java
@@ -47,9 +47,9 @@ class ImportUpdateLiechtensteinTest extends 
PostgresRepositoryTest {
     PostgresWayRepository wayRepository = new 
PostgresWayRepository(dataSource());
     PostgresRelationRepository relationRepository = new 
PostgresRelationRepository(dataSource());
 
-    DataMap<Coordinate> coordinateMap =
+    DataMap<Long, Coordinate> coordinateMap =
         new IndexedDataMap<>(new AppendOnlyBuffer<>(new CoordinateDataType(), 
new OnHeapMemory()));
-    DataMap<List<Long>> referenceMap =
+    DataMap<Long, List<Long>> referenceMap =
         new IndexedDataMap<>(new AppendOnlyBuffer<>(new LongListDataType(), 
new OnHeapMemory()));
 
     // Import data
diff --git a/basemap/config.js b/basemap/config.js
index b824787f..2f2cdaf1 100644
--- a/basemap/config.js
+++ b/basemap/config.js
@@ -14,5 +14,6 @@ export default {
     "database": 
"jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps",
     "osmPbfUrl": 
"https://download.geofabrik.de/europe/switzerland-latest.osm.pbf";,
     "center": [6.6323, 46.5197],
+    "bounds": [6.02260949059, 45.7769477403, 10.4427014502, 47.8308275417],
     "zoom": 14,
 }
diff --git a/basemap/layers/boundary/tileset.js 
b/basemap/layers/boundary/tileset.js
index 34cb9fc6..75525332 100644
--- a/basemap/layers/boundary/tileset.js
+++ b/basemap/layers/boundary/tileset.js
@@ -12,18 +12,6 @@
 export default {
     id: 'boundary',
     queries: [
-        {
-            minzoom: 1,
-            maxzoom: 6,
-            sql:
-                "SELECT fid as id, jsonb_build_object('boundary', 
'administrative', 'admin_level', '0') as tags, geom FROM globaladm0_z$zoom",
-        },
-        {
-            minzoom: 6,
-            maxzoom: 10,
-            sql:
-                "SELECT fid as id, jsonb_build_object('boundary', 
'administrative', 'admin_level', '1') as tags, geom FROM globaladm1_z$zoom",
-        },
         {
             minzoom: 10,
             maxzoom: 20,
diff --git a/basemap/tileset.js b/basemap/tileset.js
index 2f8526d5..72c4c9a9 100644
--- a/basemap/tileset.js
+++ b/basemap/tileset.js
@@ -33,6 +33,7 @@ import waterway from "./layers/waterway/tileset.js";
 export default {
   "tilejson": "2.2.0",
   "center": [...config.center, config.zoom],
+  "bounds": [...config.bounds],
   "minzoom": 0.0,
   "maxzoom": 14.0,
   "tiles": [
@@ -46,7 +47,7 @@ export default {
     amenity,
     attraction,
     barrier,
-    //boundary,
+    boundary,
     building,
     highway,
     landuse,
diff --git a/basemap/workflow.js b/basemap/workflow.js
index 5dafaddf..5ff3b1ec 100644
--- a/basemap/workflow.js
+++ b/basemap/workflow.js
@@ -42,78 +42,6 @@ export default {
         }
       ]
     },
-    {
-      "id": "globaladm0",
-      "needs": [],
-      "tasks": [
-        {
-          "type": "DownloadUrl",
-          "url": 
"https://github.com/wmgeolab/geoBoundaries/raw/main/releaseData/CGAZ/geoBoundariesCGAZ_ADM0.gpkg";,
-          "path": "data/geoBoundariesCGAZ_ADM0.gpkg"
-        },
-        {
-          "type": "ImportGeoPackage",
-          "file": "data/geoBoundariesCGAZ_ADM0.gpkg",
-          "database": config.database,
-          "sourceSRID": 4326,
-          "targetSRID": 3857
-        },
-        {
-          "type": "ExecuteSql",
-          "file": "layers/boundary/globaladm0_clean.sql",
-          "database": config.database,
-          "parallel": true,
-        },
-        {
-          "type": "ExecuteSql",
-          "file": "layers/boundary/globaladm0_simplify.sql",
-          "database": config.database,
-          "parallel": true,
-        },
-        {
-          "type": "ExecuteSql",
-          "file": "layers/boundary/globaladm0_index.sql",
-          "database": config.database,
-          "parallel": true,
-        }
-      ]
-    },
-    {
-      "id": "globaladm1",
-      "needs": [],
-      "tasks": [
-        {
-          "type": "DownloadUrl",
-          "url": 
"https://github.com/wmgeolab/geoBoundaries/raw/main/releaseData/CGAZ/geoBoundariesCGAZ_ADM1.gpkg";,
-          "path": "data/geoBoundariesCGAZ_ADM1.gpkg"
-        },
-        {
-          "type": "ImportGeoPackage",
-          "file": "data/geoBoundariesCGAZ_ADM1.gpkg",
-          "database": config.database,
-          "sourceSRID": 4326,
-          "targetSRID": 3857
-        },
-        {
-          "type": "ExecuteSql",
-          "file": "layers/boundary/globaladm1_clean.sql",
-          "database": config.database,
-          "parallel": true,
-        },
-        {
-          "type": "ExecuteSql",
-          "file": "layers/boundary/globaladm1_simplify.sql",
-          "database": config.database,
-          "parallel": true,
-        },
-        {
-          "type": "ExecuteSql",
-          "file": "layers/boundary/globaladm1_index.sql",
-          "database": config.database,
-          "parallel": true,
-        }
-      ]
-    },
     {
       "id": "water-polygons",
       "needs": [],
diff --git a/examples/naturalearth/tileset.json 
b/examples/naturalearth/tileset.json
index f7fc91f7..25395aa9 100644
--- a/examples/naturalearth/tileset.json
+++ b/examples/naturalearth/tileset.json
@@ -1,7 +1,7 @@
 {
   "tilejson": "2.2.0",
   "minzoom": 0,
-  "maxzoom": 12,
+  "maxzoom": 6,
   "tiles": [
     "http://localhost:9000/tiles/{z}/{x}/{y}.mvt";
   ],
diff --git a/examples/transformation/simplifications.sql 
b/examples/transformation/simplifications.sql
deleted file mode 100644
index 4f61ac04..00000000
--- a/examples/transformation/simplifications.sql
+++ /dev/null
@@ -1,46 +0,0 @@
--- Licensed under the Apache License, Version 2.0 (the License); you may not 
use this file except
--- in compliance with the License. You may obtain a copy of the License at
---
--- http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software 
distributed under the License
--- is distributed on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
--- or implied. See the License for the specific language governing permissions 
and limitations under
--- the License.
-CREATE MATERIALIZED VIEW osm_highway_z10 AS
-SELECT id, tags, geom
-FROM (SELECT id, tags, st_simplifypreservetopology(geom, 78270 / power(2, 10)) 
AS geom FROM osm_highway) AS osm_highway
-WHERE geom IS NOT NULL AND (st_area(st_envelope(geom)) > power((78270 / 
power(2, 10)), 2));
-
-CREATE MATERIALIZED VIEW landuse_z10 AS
-    WITH
-    -- Set the size of 1 pixel at z10
-    pixel_size AS (
-        SELECT 78270 / power(2, 10) AS pixel_size
-    ),
-    -- Set the minimum area to 10 pixels at z10
-    min_area AS (
-        SELECT power(pixel_size * 10 AS min_area
-        FROM pixel_size
-    ),
-    -- Filter out polygons smaller than the minimum area
-    landuse_filtered AS (
-        SELECT id, tags, geom
-        FROM osm_landuse
-        WHERE st_area(geom) > min_area
-    ),
-    -- Buffer the landuse polygons
-    landuse_buffered AS (
-        SELECT id, tags, st_buffer(geom, buffer_distance) AS geom
-        FROM landuse_filtered, buffer_distance
-    ),
-    -- Union the buffered polygons
-    landuse_buffered_union AS (
-        SELECT st_union(geom) AS geom
-        FROM landuse_buffered
-    ),
-    -- Simplify the unioned polygon
-    landuse_simplified AS (
-        SELECT st_simplifypreservetopology(geom, 78270 / power(2, 10)) AS geom
-        FROM landuse_buffered_union
-    )
\ No newline at end of file
diff --git a/examples/transformation/style.json 
b/examples/transformation/style.json
deleted file mode 100644
index 094b492e..00000000
--- a/examples/transformation/style.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-  "version" : 8,
-  "sources" : {
-    "baremaps" : {
-      "type" : "vector",
-      "url" : "http://localhost:9000/tiles.json";
-    }
-  },
-  "layers" : [ {
-    "id" : "landuse",
-    "type" : "fill",
-    "source" : "baremaps",
-    "source-layer" : "landuse",
-    "layout" : {
-      "visibility" : "visible"
-    },
-    "paint" : {
-      "fill-color" : "rgba(255, 0, 0, 1)"
-    }
-  } ],
-  "center" : [ 9.5554, 47.166 ],
-  "metadata" : {
-    "maputnik:renderer" : "mbgljs"
-  },
-  "zoom" : 14
-}
\ No newline at end of file
diff --git a/examples/transformation/tileset.json 
b/examples/transformation/tileset.json
deleted file mode 100644
index 6c74119b..00000000
--- a/examples/transformation/tileset.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
-  "tilejson": "2.2.0",
-  "minzoom": 0,
-  "maxzoom": 20,
-  "tiles": [
-    "http://localhost:9000/tiles/{z}/{x}/{y}.mvt";
-  ],
-  "database": 
"jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps",
-  "vector_layers": [
-    {
-      "id": "landuse",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 20,
-          "sql": "SELECT 0 as id, null as tags, ST_SetSRID(geometry, 3857) as 
geom FROM landuse WHERE landuse = 'forest'"
-        }
-      ]
-    },
-    {
-      "id": "landuse_z10",
-      "queries": [
-        {
-          "minzoom": 0,
-          "maxzoom": 20,
-          "sql": "SELECT 0 as id, null as tags, ST_SetSRID(geometry, 3857) as 
geom FROM landuse_z10 WHERE landuse = 'forest'"
-        }
-      ]
-    }
-  ]
-}
\ No newline at end of file
diff --git a/examples/transformation/workflow.json 
b/examples/transformation/workflow.json
deleted file mode 100644
index a89c4560..00000000
--- a/examples/transformation/workflow.json
+++ /dev/null
@@ -1,81 +0,0 @@
-{
-  "steps": [
-    {
-      "id": "download",
-      "needs": [],
-      "tasks": [
-        {
-          "type": "DownloadUrl",
-          "url": 
"https://download.geofabrik.de/europe/switzerland-latest.osm.pbf";,
-          "path": "data.osm.pbf"
-        }
-      ]
-    },
-    {
-      "id": "import",
-      "needs": [
-        "download"
-      ],
-      "tasks": [
-        {
-          "type": "CreateEntityCollection",
-          "file": "data.osm.pbf",
-          "collection": "collection",
-          "srid": 3857
-        }
-      ]
-    },
-    {
-      "id": "transform",
-      "needs": [
-        "import"
-      ],
-      "tasks": [
-        {
-          "type": "TransformEntityCollection",
-          "collection": "collection",
-          "database": 
"jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps",
-          "recipe": {
-            "name": "building",
-            "filter": ["has", "building"],
-            "groupBy": [],
-            "operation": "union"
-          }
-        },
-        {
-          "type": "TransformEntityCollection",
-          "collection": "collection",
-          "database": 
"jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps",
-          "recipe": {
-            "name": "landuse",
-            "filter": ["has", "landuse"],
-            "groupBy": ["landuse"],
-            "operation": "union"
-          }
-        },
-        {
-          "type": "TransformEntityCollection",
-          "collection": "collection",
-          "database": 
"jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps",
-          "recipe": {
-            "name": "natural",
-            "filter": ["has", "natural"],
-            "groupBy": ["natural"],
-            "operation": "union"
-          }
-        },
-        {
-          "type": "TransformEntityCollection",
-          "collection": "collection",
-          "database": 
"jdbc:postgresql://localhost:5432/baremaps?&user=baremaps&password=baremaps",
-          "recipe": {
-            "name": "highway",
-            "filter": ["has", "highway"],
-            "groupBy": ["highway"],
-            "operation": "merge"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/scripts/build-project.sh b/scripts/build-project.sh
new file mode 100755
index 00000000..3da24e12
--- /dev/null
+++ b/scripts/build-project.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not 
use this file except
+# in compliance with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software 
distributed under the License
+# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+# or implied. See the License for the specific language governing permissions 
and limitations under
+# the License.
+
+echo ""
+echo "--------------------------------------------------------------------"
+echo "Build the project"
+echo "--------------------------------------------------------------------"
+echo ""
+
+cd ..
+./mvnw spotless:apply clean install -DskipTests
+rm -fr baremaps
+tar -xvf 
./baremaps-cli/target/apache-baremaps-0.7.2-SNAPSHOT-incubating-bin.tar.gz -C 
target/
+mv ./target/apache-baremaps-0.7.2-SNAPSHOT-incubating-bin ./baremaps
+export PATH=$PATH:`pwd`/baremaps/bin
+
+echo ""
+echo "--------------------------------------------------------------------"
+echo "Display the path of the baremaps executable"
+echo "--------------------------------------------------------------------"
+echo ""
+
+which baremaps
+
+echo ""
+echo "--------------------------------------------------------------------"
+echo "Display the version of the baremaps executable"
+echo "--------------------------------------------------------------------"
+echo ""
+
+baremaps --version
diff --git a/scripts/generate-planet.sh b/scripts/generate-planet.sh
new file mode 100755
index 00000000..33b3076c
--- /dev/null
+++ b/scripts/generate-planet.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not 
use this file except
+# in compliance with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software 
distributed under the License
+# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+# or implied. See the License for the specific language governing permissions 
and limitations under
+# the License.
+
+# Start from the scripts directory
+DIR="$(dirname "$0")"
+cd "$DIR" || exit
+cd ../basemap
+
+echo ""
+echo "--------------------------------------------------------------------"
+echo "Execute the Basemap workflow"
+echo "--------------------------------------------------------------------"
+echo ""
+
+rm -fr data tiles tiles.mbtiles
+
+awk '{gsub("https://download.geofabrik.de/europe/switzerland-latest.osm.pbf";, 
"https://planet.openstreetmap.org/pbf/planet-latest.osm.pbf";); print}' 
config.js > tmpfile && mv tmpfile config.js
+awk '{gsub("6.02260949059, 45.7769477403, 10.4427014502, 47.8308275417", 
"-180, -85.0511, 180, 85.0511"); print}' config.js > tmpfile && mv tmpfile 
config.js
+
+baremaps workflow execute --file workflow.js
+
+echo ""
+echo "--------------------------------------------------------------------"
+echo "Export the Basemap tiles"
+echo "--------------------------------------------------------------------"
+echo ""
+
+baremaps map export --tileset 'tileset.js' --repository 'tiles.mbtiles' 
--format mbtiles
diff --git a/scripts/test-basemap.sh b/scripts/test-basemap.sh
new file mode 100755
index 00000000..76b633f8
--- /dev/null
+++ b/scripts/test-basemap.sh
@@ -0,0 +1,74 @@
+#!/bin/sh
+
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not 
use this file except
+# in compliance with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software 
distributed under the License
+# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+# or implied. See the License for the specific language governing permissions 
and limitations under
+# the License.
+
+# Start from the scripts directory
+DIR="$(dirname "$0")"
+cd "$DIR" || exit
+cd ../basemap
+
+
+echo ""
+echo "--------------------------------------------------------------------"
+echo "Execute the Basemap workflow"
+echo "--------------------------------------------------------------------"
+echo ""
+
+rm -fr data tiles tiles.mbtiles
+
+baremaps workflow execute --file workflow.js
+
+echo ""
+echo "--------------------------------------------------------------------"
+echo "Start the Basemap server"
+echo "--------------------------------------------------------------------"
+echo ""
+
+nohup baremaps map dev --tileset 'tileset.js' --style 'style.js' > /dev/null 
2>&1 &
+sleep 1
+baremaps=$!
+
+echo "Get the status of the root (/):"
+curl -I http://localhost:9000/
+
+echo "Get the status of the style (/style.json):"
+curl -I http://localhost:9000/style.json
+
+echo "Get the status of the tileset (/tiles.json):"
+curl -I http://localhost:9000/tiles.json
+
+echo "Get the status of a tile (/tiles/14/8625/5746.mvt):"
+curl -I http://localhost:9000/tiles/1/1/1.mvt
+
+echo "Get the status of an out-of-bound tile (/tiles/16/16398/10986.mvt):"
+curl -I http://localhost:9000/tiles/16/16398/10986.mvt
+
+kill $baremaps
+
+echo ""
+echo "--------------------------------------------------------------------"
+echo "Export the Basemap tiles"
+echo "--------------------------------------------------------------------"
+echo ""
+
+baremaps map export \
+  --tileset 'tileset.js' \
+  --repository 'tiles/' \
+  --format file
+
+du -h tiles
+
+baremaps map export \
+  --tileset 'tileset.js' \
+  --repository 'tiles.mbtiles' \
+  --format mbtiles
+
+du -h tiles.mbtiles
diff --git a/scripts/test-examples.sh b/scripts/test-examples.sh
new file mode 100755
index 00000000..edff994e
--- /dev/null
+++ b/scripts/test-examples.sh
@@ -0,0 +1,130 @@
+#!/bin/sh
+
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not 
use this file except
+# in compliance with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software 
distributed under the License
+# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+# or implied. See the License for the specific language governing permissions 
and limitations under
+# the License.
+
+# Start from the scripts directory
+DIR="$(dirname "$0")"
+cd "$DIR" || exit
+cd ../examples/openstreetmap
+
+echo ""
+echo "--------------------------------------------------------------------"
+echo "Execute the OpenStreetMap workflow"
+echo "--------------------------------------------------------------------"
+echo ""
+
+baremaps workflow execute --file workflow.json
+
+echo ""
+echo "--------------------------------------------------------------------"
+echo "Start the OpenStreetMap server"
+echo "--------------------------------------------------------------------"
+echo ""
+
+nohup baremaps map dev --tileset 'tileset.json' --style 'style.json' > 
/dev/null 2>&1 &
+sleep 1
+baremaps=$!
+
+echo "Get the status of the root (/):"
+curl -I http://localhost:9000/
+
+echo "Get the status of the style (/style.json):"
+curl -I http://localhost:9000/style.json
+
+echo "Get the status of the tileset (/tiles.json):"
+curl -I http://localhost:9000/tiles.json
+
+echo "Get the status of a tile (/tiles/14/8625/5746.mvt):"
+curl -I http://localhost:9000/tiles/14/8625/5746.mvt
+
+echo "Get the status of an out-of-bound tile (/tiles/16/16398/10986.mvt):"
+curl -I http://localhost:9000/tiles/16/16398/10986.mvt
+
+kill $baremaps
+
+echo ""
+echo "--------------------------------------------------------------------"
+echo "Export the OpenStreetMap tiles (directory)"
+echo "--------------------------------------------------------------------"
+echo ""
+
+baremaps map export \
+  --tileset 'tileset.json' \
+  --repository 'tiles/'
+
+echo "Display the size of the tiles:"
+du -a tiles
+
+echo ""
+echo "--------------------------------------------------------------------"
+echo "Export the OpenStreetMap tiles (mbtiles)"
+echo "--------------------------------------------------------------------"
+echo ""
+
+baremaps map export \
+  --tileset 'tileset.json' \
+  --repository 'tiles.mbtiles' \
+  --format mbtiles
+
+echo "Display the size of the tiles:"
+du -a tiles.mbtiles
+
+cd ../..
+
+echo ""
+echo "--------------------------------------------------------------------"
+echo "Execute the NaturalEarth workflow"
+echo "--------------------------------------------------------------------"
+echo ""
+
+cd examples/naturalearth
+
+baremaps workflow execute --file workflow.json
+
+echo ""
+echo "--------------------------------------------------------------------"
+echo "Start the NaturalEarth server"
+echo "--------------------------------------------------------------------"
+echo ""
+
+nohup baremaps map dev --tileset 'tileset.json' --style 'style.json' > 
/dev/null 2>&1 &
+sleep 1
+baremaps=$!
+
+echo "Get the status of the root (/):"
+curl -I http://localhost:9000/
+
+echo "Get the status of the style (/style.json):"
+curl -I http://localhost:9000/style.json
+
+echo "Get the status of the tileset (/tiles.json):"
+curl -I http://localhost:9000/tiles.json
+
+echo "Get the status of a tile (/tiles/14/8625/5746.mvt):"
+curl -I http://localhost:9000/tiles/1/1/1.mvt
+
+echo "Get the status of an out-of-bound tile (/tiles/16/16398/10986.mvt):"
+curl -I http://localhost:9000/tiles/16/16398/10986.mvt
+
+kill $baremaps
+
+echo ""
+echo "--------------------------------------------------------------------"
+echo "Export the NaturalEarth tiles"
+echo "--------------------------------------------------------------------"
+echo ""
+
+baremaps map export \
+  --tileset 'tileset.json' \
+  --repository 'tiles/'
+
+echo "Display the size of the tiles:"
+du -h tiles

Reply via email to