%!TEX TS-program = pdflatexmk

% Copyright (c) 2018 - 2021, Martin Scheidt (ISC license)
% Permission to use, copy, modify, and/or distribute this file for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.

\documentclass[tikz,border=2]{standalone}
\usetikzlibrary{trackschematic}

\begin{document}
  \begin{tikzpicture}[font=\sffamily]
  { % station names
    \tikzset{every node/.style={\foreground!50!\background}};
    \node[right,align=left] at ( 2,1.3) {to and from\\ Arnau};
    \node                   at (21,3.3) {{\LARGE Bf Berg}};
    \node[left,align=right] at (38,1.3) {to and from\\ Chamstadt};
  }
  % coordinates
  \coordinate (A)  at ( 1.5, 0);
  \coordinate (B)  at (38.5, 0);

  \coordinate (E1) at ( 9  , 1);
  \coordinate (E2) at (11  ,-1);
  \coordinate (E3) at (25  , 2);
  \coordinate (H1) at (15  , 2);
  \coordinate (H2) at (26  , 1);

  \coordinate (Y1) at (14  , 0);
  \coordinate (Y2) at (15  , 0);
  \coordinate (Y3) at (14  , 1);
  \coordinate (Y4) at (16  , 1);
  \coordinate (Y5) at (27  , 0);
  \coordinate (Y6) at (12.8,-1);

  \coordinate (S1) at ( 7  , 0);
  \coordinate (S2) at (10  , 0);
  \coordinate (S3) at (18  , 0);
  \coordinate (S4) at (18  , 1);
  \coordinate (S5) at (24  , 0);
  \coordinate (S6) at (24  , 1);
  \coordinate (S7) at (30  , 0);
  \coordinate (S8) at (33  , 0);

  \coordinate (T1) at ( 6  , 0);
  \coordinate (T2) at (10.2, 1);
  \coordinate (T3) at (23  , 2);
  \coordinate (T4) at (34  , 0);

  \coordinate (P1) at (21  , 0);
  \coordinate (P2) at (21  , 1);

  \coordinate (HM) at (0,-1.85);

  { %% topology
    % tracks
    \maintrack (A) -- (B);
    \maintrack (Y2) -- (Y4) -- (H2) -- (Y5);
    \secondarytrack (E1) -- (Y4);
    \secondarytrack (E2) -- ++( 2,0) -- (Y1);
    \secondarytrack (Y3) -- (H1) -- (E3);

    % track numbers
    \tracklabel at (11.7, 1) label (12);
    \tracklabel at (11.7,-1) label (10);
    \tracklabel at (21  , 2) label (3);
    \tracklabel at (P2) label (2);
    \tracklabel at (P1) label (1);

    % bufferstops
    \bufferstop[backward] at (E1);
    \bufferstop[backward] at (E2);
    \bufferstop[forward]  at (E3);

    % turnouts
    \tikzset{every node/.style={fouling point}};
    \turnout[backward,branch=right] at (Y1) label (W1);
    \turnout[forward ,branch=left ] at (Y2) label (W2);
    \turnout[forward ,branch=left ] at (Y3) label (W3);
    \turnout[backward,branch=right] at (Y4) label (W4);
    \turnout[backward,branch=left ] at (Y5) label (W5);
    \derailer[forward,branch=right] at (Y6) label (Gs6);
  }
  { %% traffic control
    % signals
    \distantsignal[forward]  at (S1) label (Va);

    \signal[distant,route,forward] at (S2) label (A);

    \routesignal[backward]   at (S3) label (P1);
    \routesignal[backward]   at (S4) label (P2);

    \routesignal[forward]    at (S5) label (N1);
    \routesignal[forward]    at (S6) label (N2);

    \signal[distant,route,backward] at (S7) label (F);

    \distantsignal[backward] at (S8) label (Vf);
    
    % routes
    \route[backward] at (20,0);
    \route[forward]  at (22,0);
    \route[backward] at (20,1);
    \route[forward]  at (22,1);

    % clearing points
    \tikzset{every node/.style={backward}};
    \clearingpoint[] at (10  , 0) label ();
    \clearingpoint[] at (12.3,-1) label ();
    \clearingpoint[] at (12.8, 0) label ();
    \clearingpoint[] at (13.4, 1) label ();
    \clearingpoint[] at (14.9, 1) label ();
    \coordinate (H3) at ($(Y2)!0.5!(Y4)$); % using tikz calc library
    \clearingpoint[rotate=45] at (H3) label ();
    \coordinate (H4) at ($(Y3)!0.8!(H1)$); % using tikz calc library
    \clearingpoint[rotate=45] at (H4) label ();
    \clearingpoint[] at (16  , 0) label ();
    \clearingpoint[] at (18  , 1) label ();
    \clearingpoint[] at (18  , 0) label ();
    \clearingpoint[] at (24  , 1) label ();
    \clearingpoint[] at (24  , 0) label ();
    \clearingpoint[] at (26  , 0) label ();
    \clearingpoint[] at (27.5, 0) label ();
    \coordinate (H5) at ($(Y5)!0.8!(H2)$); % using tikz calc library
    \clearingpoint[rotate=315] at (H5) label ();
    \clearingpoint[] at (30  , 0) label ();
  }
  { %% vehicles
    \train[run=normal,forward] at (T1) label (RB);
    \train[run=fast,backward]  at (T4) label (IC);
    \parkedvehicles[length=3cm] at (T3) label (WG);
    \parkedvehicles[length=1cm] at (T2) label (Tfz);
  }
  { %% constructions
    % platforms
    \platform[side=right] at (P2);
    \platform[side=left ] at (P1);
  }
  { %% measures
    % hectometer posts
    \tikzset{hectometer base={(HM)},orientation=right};
    \hectometer[] at (S1)      label ( 7.200);
    \hectometer[] at (S2)      label ( 8.200);
    \hectometer[] at (12.8,-1) label ( 8.400);
    \hectometer[] at (16  , 0) label ( 8.600);
    \hectometer[] at (S3)      label ( 8.700);
    \hectometer[] at (19  , 0) label ( 8.750);
    \hectometer[] at (23  , 0) label ( 9.000);
    \hectometer[] at (S5)      label ( 9.100);
    \hectometer[] at (26  , 0) label ( 9.200);
    \hectometer[] at (27.5, 0) label ( 9.300);
    \hectometer[] at (S7)      label ( 9.500);
    \hectometer[] at (S8)      label (10.500);
  }
  \end{tikzpicture}
\end{document}