in baremaps-core/src/main/java/org/apache/baremaps/tilestore/raster/VectorContourTileStore.java [60:108]
public ByteBuffer read(TileCoord tileCoord) throws TileStoreException {
try {
var grid = geoTiffReader.read(tileCoord, 256, 4);
int increment = switch (tileCoord.z()) {
case 1 -> 2000;
case 2 -> 2000;
case 3 -> 1000;
case 4 -> 1000;
case 5 -> 1000;
case 6 -> 1000;
case 7 -> 1000;
case 8 -> 500;
case 9 -> 500;
case 10 -> 250;
case 11 -> 250;
case 12 -> 100;
case 13 -> 100;
case 14 -> 50;
default -> 10;
};
var features = new ArrayList<Feature>();
for (int level = -10000; level < 10000; level += increment) {
var contours =
new ContourTracer(grid, 264, 264, false, true)
.traceContours(level);
for (var contour : contours) {
contour = AffineTransformation
.translationInstance(-4, -4)
.scale(16, 16)
.transform(contour);
features.add(new Feature(level, Map.of("level", String.valueOf(level)), contour));
}
}
var layer = new Layer("contour", 4096, features);
var tile = new Tile(List.of(layer));
var vectorTile = new VectorTileEncoder().encodeTile(tile);
try (var baos = new ByteArrayOutputStream()) {
var gzip = new GZIPOutputStream(baos);
vectorTile.writeTo(gzip);
gzip.close();
return ByteBuffer.wrap(baos.toByteArray());
}
} catch (Exception e) {
throw new TileStoreException(e);
}
}