public Document apply()

in baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/function/OpenstreetmapDocumentMapper.java [34:70]


  public Document apply(Element element) {
    var document = new Document();

    document.add(new StoredField("id", element.id()));

    element.getTags().forEach((key, value) -> {
      document.add(new StoredField(key, value.toString()));
    });

    var geometry = element.getGeometry();
    if (geometry instanceof Point point) {
      document.add(LatLonShape.createDocValueField("geometry", point.getY(), point.getX()));
    } else if (geometry instanceof LineString lineString) {
      var coordinates = lineString.getCoordinates();
      var lats = new double[coordinates.length];
      var lons = new double[coordinates.length];
      for (int i = 0; i < coordinates.length; i++) {
        lats[i] = coordinates[i].y;
        lons[i] = coordinates[i].x;
      }
      document.add(LatLonShape.createDocValueField("geometry", new Line(lats, lons)));
    } else if (geometry instanceof Polygon polygon) {
      var coordinates = polygon.getCoordinates();
      var lats = new double[coordinates.length];
      var lons = new double[coordinates.length];
      for (int i = 0; i < coordinates.length; i++) {
        lats[i] = coordinates[i].y;
        lons[i] = coordinates[i].x;
      }
      document.add(LatLonShape.createDocValueField("geometry",
          new org.apache.lucene.geo.Polygon(lats, lons)));
    } else if (geometry instanceof MultiPolygon) {
      // TODO: Implement MultiPolygon
    }

    return document;
  }