Diese Klasse ermittelt aus den vom
Joiner
generierten Way-Tile-Files
die eigentliche Topologie.
Intern werden zuerst alle SharedWays gelesen und hieraus saemtliche Knoten
gecacht und bei Mehrfachauftreten der VertexCounter erhoeht. Dieser Cache
bleibt ueber den ganzen Verarbeitungsprozess erhalten. Danach werden
nacheinander die einzelnen Way-Tile-Files eingelesen, auch hier die Knoten
gezaehlt, Kreuzungen erkannt, segmentiert und verarbeitet. Dabei werden aber
auch die bereits gecachten SharedWays-Knoten mit einbezogen und ggf. diese
aktualisiert. Intern wird also im Normalfall immer auf zwei Maps gearbeitet.
Sind alle Tiles durchlaufen, so werden abschliessend auch die SharedWays
segmentiert und geschrieben. Abschliessend werden dann noch die Vertices mit
samt den aufgeloesten Abbiegevorschriften persistiert. Das Resultat besteht
folglich aus zwei Dateien. Die eine beinhaltet segmentierte Wege, wobei hier
die Ids der Restriktionen noch nicht aufgeloest sind und noch auf die
OSM-Ids verweisen, die zweite beinhaltet nur die Vertices, wobei allerdings
hier die Restriktionen gegen die echten WaySegment-Ids ausgetauscht wurden.
Wichtig:
Aufgrund bestimmter Konstellationen, z.B. bei gleichzeitiger Uebersetzung
von Boundaries und Strassen-Netzwerk, werden hier nur Wege verarbeitet,
die eine Klasse > 0 besitzen oder Mitglied einer Route sind.
Ferner werden hier die folgenden Knoten-Eigenschaften umgesetzt:
Die Entkopplung bewirkt die Korrektur eines sehr ekligen OSM-Fehlers vieler Tagger,
die Strasse und Schiene ueber einen gemeinsamen Knoten verbinden. Ist der Knoten ein
Bahnuebergang, so kann dies hier korrigiert werden. Config:
decoupleMode = off | simple | strict
Der
simple
-Mode funktioniert nur bei Kreuzungen, an denen OSM-Wege nicht anfangen
oder enden, sondern nur durchfuehren. Das beseitigt viele aber nicht alle Fehler. Intern werden
hier lediglich keine Vertices vergeben.
Im
strict
-Mode werden intern die obersten 2 Bits der OSM-Id missbraucht, um
auch Start- und Endpunkte entkoppeln zu koennen. Hierfuer muss natuerlich sichergestellt sein,
dass Ids nur die unteren 62 Bits belegen. Negative Ids werden dennoch korrekt umgesetzt.
Vertices werden hier nicht verworfen, sondern entsprechen denen im Mode
off
.
Default ist
simple