User:Rayquaza/ÖV/Bahn/Simulationsberechnungen

From OpenStreetMap Wiki
Jump to navigation Jump to search

Diese Seite soll eine Sammlung von Formeln, Übersetzungstabellen und Erklärungen und hilfreich für die Erstellung von Gleisplänen, Eisenbahnsimulationen u.Ä. aus OSM-Daten werden. Für einen allgemeineren Überblick über die Erfassung von Bahnanlagen siehe das Tagging-Schema der OpenRailwayMap.

Gleisgeometrie

information sign

Die Formeln entstammen C++-Quellcode. Falls das nicht verständlich genug sein sollte spricht nichts gegen eine Umwandlung nach MathML.

Kurvenradius

Als "Kurven" werden hier überlappende Abschnitte als "Kurve an einem Knoten" verwendet. Vermutlich liessen sich auch komplexere Kurvengeometrien erkennen wenn man noch weiter rechnet. Je nach gewünschter Genauigkeit wäre das für Gleispläne notwendig, für Simulationen jedoch eher nicht.

Kurve an einem Knoten

Abstand zweier Knoten:

   x1 = lat1*M_PI*6367000/180;
   y1 = lon1*(M_PI*6367000/180)*cos(lat1*M_PI/180);
   x2 = lat2*M_PI*6367000/180;
   y2 = lon2*(M_PI*6367000/180)*cos(lat2*M_PI/180);
   return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

Der Abstand zwischen vorherigem und nachfolgendem Knoten (also eine Linie aus drei Knoten) ergibt die Länge der Kurve. Alternativ kann man auch einfach einen Wert annehmen, was teilweise sogar bessere Ergebnisse erzielt.

Winkel der Linie zwischen zwei Knoten:

   lat1 = lat1 * M_PI / 180.0;
   lon1 = lon1 * M_PI / 180.0;
   lat2 = lat2 * M_PI / 180.0;
   lon2 = lon2 * M_PI / 180.0;
   dlon = lon2 - lon1;
   double coslat2 = cos(lat2);
   return (180 * atan2(coslat2 * sin(dlon), (cos(lat1) * sin(lat2) - sin(lat1) * coslat2 * cos(dlon)))) / M_PI;

Für den Winkel der Kurve braucht man den vorherigen Winkel (also den Winkel der Linen zwischen dem vorherigen und dem betrachteten Knoten). Diesen muss man dann von dem folgenden (eben ermittelten) Winkel abziehen.

Aus diesen beiden Werten (Winkel und Länge) lässt sich nun der Radius berechnen:

information sign

Diese Formel ist hier nicht angegeben, weil das für die Anwendung, mit der ich das getestet hatte, nicht notwendig war. Es ist aber wirklich nicht schwer und darf gerne hier ergänzt werden.

Weichen

Als railway=switch sollte immer die Weichenspitze angegeben sein. Damit lässt sich auch in Sonderfällen (z.B. verschwenktes Gleis bei Stadtbahnen) mit Hilfe der Spurweite (gauge=*) die Geometrie der Weiche ermitteln. Um die Position des Herzstücks zu finden muss man die Stelle finden, an der der Abstand der beiden Ways identisch der Spurweite ist. Wenn man einfach die beiden Ways als normales Gleis zeichnet sieht man das als die Stelle, an der sich die beiden innen liegenden Schienen überkreuzen.

Kreuzungen und Kreuzungsweichen

(noch nicht betrachtet)

Signalisierung

(noch nicht betrachtet)

sonstige Darstellung

Für Gebäude und andere allgemeinere Objekte sind entsprechende Schemata wie Simple 3D Buildings voll gültig und bedürfen keiner Ergänzung. Als Startpunkt für weitere Recherchen: 3D Development,

Im Folgenden geht es entsprechend ausschliesslich um andere Objekte mit Bahnbezug, die nur zur Darstellung Bedeutung haben (z.B. Fahrleitung, Schotter).

Untergrund

Tag Darstellung Anmerkung
landuse=railway Schotter
landuse=grass Rasengleis
landuse=residential Asphalt/Gepflastert Für Stadtbahnen. Sollte besser anders ermittelt werden.