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