@Override
  public void processFeature(SourceFeature sourceFeature, FeatureCollector features) {
    if (!sourceFeature.tags().isEmpty() && sourceFeature instanceof OsmSourceFeature osmFeature) {
      var feature = sourceFeature.canBePolygon() ? features.polygon("osm") :
        sourceFeature.canBeLine() ? features.line("osm") :
        sourceFeature.isPoint() ? features.point("osm") :
        null;
      if (feature != null) {
        var element = osmFeature.originalElement();
        feature
          .setMinPixelSize(0)
          .setPixelTolerance(0)
          .setBufferPixels(0);
        for (var entry : sourceFeature.tags().entrySet()) {
          feature.setAttr(entry.getKey(), entry.getValue());
        }
        feature
          .setAttr("@id", sourceFeature.id())
          .setAttr("@type", switch (element) {
            case OsmElement.Node ignored -> "node";
            case OsmElement.Way ignored -> "way";
            case OsmElement.Relation ignored -> "relation";
            default -> null;
          });
        var info = element.info();
        if (info != null) {
          feature
            .setAttr("@version", info.version() == 0 ? null : info.version())
            .setAttr("@timestamp", info.timestamp() == 0L ? null : info.timestamp())
            .setAttr("@changeset", info.changeset() == 0L ? null : info.changeset())
            .setAttr("@uid", info.userId() == 0 ? null : info.userId())
            .setAttr("@user", info.user() == null || info.user().isBlank() ? null : info.user());
        }
      }
    }
  }
Generates tiles with a raw copy of OSM data in a single "osm" layer at one zoom level, similar to
<a href="http://osmlab.github.io/osm-qa-tiles/">OSM QA Tiles</a>.
<p>
Nodes are mapped to points and ways are mapped to polygons or linestrings, and multipolygon relations are mapped to
polygons. Each output feature contains all key/value tags from the input feature, plus these extra attributes:
<ul>
<li>{@code @type}: node, way, or relation</li>
<li>{@code @id}: OSM element ID</li>
<li>{@code @changeset}: Changeset that last modified the element</li>
<li>{@code @timestamp}: Timestamp at which the element was last modified</li>
<li>{@code @version}: Version number of the OSM element</li>
<li>{@code @uid}: User ID that last modified the element</li>
<li>{@code @user}: User name that last modified the element</li>
</ul>
<p>
To run this example:
<ol>
<li>build the examples: {@code mvn clean package}</li>
<li>then run this example:
{@code java -cp target/*-fatjar.jar com.onthegomap.planetiler.examples.OsmQaTiles --area=monaco --download}</li>
<li>then run the demo tileserver: {@code tileserver-gl-light data/output.mbtiles}</li>
<li>and view the output at <a href="http://localhost:8080">localhost:8080</a></li>
</ol>
planetiler-examples/src/main/java/com/onthegomap/planetiler/examples/OsmQaTiles.java