Ich habe bei den Mapsforge Vektorkarten immer wieder das Problem das Polygone nicht dargestellt werden, der Mapsforge Writer skippt diese leider bei der kleinsten Unregelmässigkeit.
Normalerweise finde ich diese Fehler im OSM-Inspector und korrigiere sie.
Nun gibt es leider auch die self-backing-up lines, also eine Linie geht gerade dann kehrt sie auf gleichen Weg 180° um und führt dann wieder weiter. Da passiert relativ oft, ist im Prinzip nicht verboten, der OSM-Inspector wirft das auch nicht aus - nur Mapsforge skippt das entsprechende polygon (oder MP).
Diese “Fehler” zu finden ist zu Fuss ein irrer Zeitaufwand.
Daher meine Frage: Gibt es irgendwelche Tools (Josm Plugins, Perl-Scripts) die diesen “Fehler” identifizieren?
Ansonsten wäre ein kleines Prüfprogramm für eine Knotenfolge …-A-B-A-… mit Osmium ratzfatz geschrieben.
Und wenn’s mit Datenbank sein soll, hat Walter sicher eine Lösung parat
Nachtrag:
#define OSMIUM_WITH_PBF_INPUT
#include <osmium.hpp>
#include <osmium/handler.hpp>
#include <osmium/input.hpp>
#include <osmium/output/xml.hpp>
template<class THandler> class abaHandler
: public Osmium::Handler::Forward<THandler> {
public:
void node (const shared_ptr<Osmium::OSM::Node>& node) const {}
void relation (const shared_ptr<Osmium::OSM::Relation>& relation) const {}
void way (const shared_ptr<Osmium::OSM::Way>& way) const {
if (way->nodes().size() >= 3) {
Osmium::OSM::WayNodeList::const_iterator i = way->nodes ().begin (), j = i;
++j; ++j;
do {
if (i->ref () == j->ref ()) {
Osmium::Handler::Forward<THandler>::way (way);
break;
}
++i; ++j;
} while (j != way->nodes ().end ());
}
}
abaHandler<THandler> (THandler& next)
: Osmium::Handler::Forward<THandler> (next) {}
};
int main (void) {
Osmium::OSMFile infile, outfile; // stdout
outfile.set_type_and_encoding ("osm");
Osmium::Output::Handler out (outfile);
abaHandler<Osmium::Output::Handler> aba (out);
Osmium::Input::read (infile, aba);
return 0;
}
Liest PBF aus der Standardeingabe, schreibt XML in die Standardausgabe. Kompilieren mit -lz -losmpbf -lprotobuf-lite -lpthread -lxml2 und natürlich den nötigen Pfaden.
Der JOSM-Validator findet solche Probleme, wenn ich mich recht erinnere.
Meiner Meinung nach müsste ein self-backing-up way als self-intersecting way im OSMI (Geometrie, Multipolygon) erkannt werden. Aber ich kann mich irren. Mangels Beispiel kann ich das nicht prüfen.
In KeepRight könnte überlagerte Wege passen. Auch da weiß ich nicht, ab das nur bei zwei verschiedenen Wegen anschlägt oder auch bei selbstüberlagernd.
Das von Oli-Wan vorgeschlagene loopings findet zum Beispiel einen Fehler in diesem Weg und zwei weitere in unmittelbarer Nähe.
Ob das auch bei geschlossenen Wegen (du erwähntest Polygone) funktioniert, weiß ich nicht.
Besten Dank für die fundierte Hilfestellung, sobald ich aus dem Urlaub zurück bin schau’ ich mir mal OSMIUM an - sieht vielversprechend aus.
Auch die loopings kommen an meine Anforderungen sehr nahe.