public ByteBuffer read()

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);
    }
  }