Hallo,
das Problem läßt sich sicherlich mit den OSM-Daten lösen. Die nötigen Daten sind in OSM alle vorhanden. Wir gehen hier davon aus, dass das Straßennetz nur unbedeutende Lücken hat und wir auch alle Stadtgrenzen erfasst haben.
Das heißt aber nicht, dass das Problem auf einfachem Wege zu lösen ist.
Davor legt uns die simple OSM-Datenstruktur einige Stolpersteine in den Weg.
Es gibt in OSM nichts, was einem Straßenobjekt “Berliner Straße” in Köln entspricht. Im einfachsten Fall besteht ein Straße in OSM nur aus zwei Knoten und dem dazwischen liegenden Wegstück. Das ist aber nur für sehr wenige Straßen der Fall.
Ändert sich eine Eigenschaft einer Straße (Belag, Beleuchtung, Benutzungsrecht, Begrenzung von Geschwindigkeit, Belastung, Breite, etc) so wir die Straße bei OSM an der Übergangstelle in die Abschnitte A und B geteilt. Und nix sagt uns, dass Abschnitt A und Abschnit B zusammen zu einer Straße gehören.
Den Luxus der uns mitteilt, zur “Berliner Straße” in Köln gehören Teil A, Teil B und Teil C, den hamwa auch noch nicht.
Und das Teil D und Teil E auch zusammen gehören, auch “Berliner Straße” heißen aber im anderen Stadteil liegen, ist auch nicht auf Knopfdruck abrufbar.
Aber bald ist ja Nikolaus, Weihnachten und wenn wir brav waren,…
Und dann spielt uns ja auch noch die Realität ihre Streiche. So gibt es
Straßen, die aus mehreren getrennten Abschnitten bestehen, aber eindeutig zu EINER Straße gehören.
Ein Beispiel dafür ist die Straße “Forsthof” in Ratingen Tiefenbroich.
Schau mal hier: http://osm.org/go/0GD3lA8yB–?m=
Um von Hausnummer 10 zu Hausnummer 12 zu gelangen, muß man entweder über einen Acker stapfen oder einen langen Umweg nehmen und die Straße “Forsthof” für lange Zeit verlassen.
Nun dazu, wie Du trotzdem zum Ziel kommen kannst.
a) Du besorgst Dir für eine Stadt die Daten aller Straßenabschnitte mit Namen. Das geht z.B. mit overpass-api oder overpass-turbo.
b) Du fütterst die Daten in ein Programm, das zusammengehörende Straßenabschnitte “zusammenklebt”.
CODE_NAIV:
Für jeden Straßennamen N {
Für jeden Straßenabschnitt SA mit Namen N {
Für jeden Knoten KA des Abschnitts SA {
Für jeden anderen Straßenabschnitt SB mit Namen N {
Für jeden Knoten KB des Abschnitts SB {
Wenn Knoten KA und Knoten KB identisch sind {
Klebe Straßenabschnitt SA und Straßenabschnitt SB zusammen
}
}
}
}
}
}
Zusammenkleben bedeutet hier: Erzeuge neuen Straßenabschnitt SAB mit allen Knoten von Abschnitt SA und allen Knoten von SB.
Lösche Abschnitt SA und Abschnitt SB aus der Liste.
c) Straßenabschnitte, deren Name nur noch einmal in der List vorkommt, sind für die Lösung unnötig und werden gelöscht.
d) Straßenabschnitte, die jetzt noch mehrfach vorkommen, sind geeignete Kanditaten für die Lösung des Problems. Durch die Löschung der einfach vorkommenden Namen sollte sich ihr Zahl auf ein erträgliches Maß reduziert haben, so daß die weitere Auswahl manuell vorgenommen werden kann.
Ich hoffe hiermit konnte ich weiter helfen. Wenn nicht, weiter fragen…
Liebe Grüße
Harald
black_bike