update
This commit is contained in:
Submodule
+1
Submodule converter/kicad-pycbnew added at b41837857d
+92
-63
@@ -1,4 +1,5 @@
|
||||
#!/bin/python
|
||||
import math
|
||||
import time
|
||||
import os
|
||||
import sys
|
||||
@@ -23,40 +24,37 @@ from pycbnew.primitives.gr_elements import (
|
||||
KGrLine,
|
||||
KTable,
|
||||
)
|
||||
from pycbnew.primitives.segment import KSegment
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
# Constants / Global Variables set through argparse
|
||||
SCALE = 1.0
|
||||
TEXT_SPACING_MM = 12
|
||||
NO_POWER_NETS = False
|
||||
PCB_FILE = "trainmap.kicad_pcb"
|
||||
# Global Variables set through argparse
|
||||
LOG_LEVEL = logging.INFO
|
||||
NO_POWER_NETS = False
|
||||
NO_TEXT = False
|
||||
NO_TRACES = False
|
||||
SCALE = 1.0
|
||||
PCB_FILE = "trainmap.kicad_pcb"
|
||||
INPUT_XML = ""
|
||||
MC_POS = Point(0, 0)
|
||||
TITLE_FONTFACE = ""
|
||||
FONTFACE = ""
|
||||
MARGIN = {"left": 10, "top": 5}
|
||||
TRACE_WIDTH_MM=0.5
|
||||
CAP_DISTANCE_MM=5
|
||||
TEXT_SPACING_MM=15
|
||||
|
||||
# Fonts
|
||||
LINE_FONT = Font(size=(16, 16))
|
||||
TITLE_FONTFACE = ""
|
||||
FONTFACE = ""
|
||||
LINE_FONT = Font(size=(12, 12))
|
||||
LINE_FONT.face = FONTFACE
|
||||
TITLE_FONT = Font(size=(28, 28))
|
||||
TITLE_FONT.face = TITLE_FONTFACE
|
||||
|
||||
|
||||
# Footprints
|
||||
KFootprint.set_footprint_folders([f"{os.path.dirname(__file__)}/kicad_libs"])
|
||||
FOOTPRINT_C = "Capacitor_SMD:C_0603_1608Metric"
|
||||
FOOTPRINT_LED = "Dialight_587_1032_147F:587"
|
||||
FOOTPRINT_MC = "DFR0654:MODULE_DFR0654"
|
||||
|
||||
# Mappings
|
||||
TEXT_POS_MAPPING = {
|
||||
"above": Vector(0, TEXT_SPACING_MM),
|
||||
"right": Vector(TEXT_SPACING_MM, 0),
|
||||
"below": Vector(0, -TEXT_SPACING_MM),
|
||||
"left": Vector(-TEXT_SPACING_MM, 0),
|
||||
}
|
||||
MC_PADS = {
|
||||
"GND": 30,
|
||||
"GND1": 4,
|
||||
@@ -69,7 +67,6 @@ LED_PADS = {"GND": 0, "VCC": 1, "DI": 2, "DO": 3}
|
||||
NET_GND = KNet(1, "GND")
|
||||
NET_VCC = KNet(2, "5V")
|
||||
|
||||
|
||||
class Map:
|
||||
title: str
|
||||
lines: list
|
||||
@@ -134,17 +131,20 @@ syntax:
|
||||
</line>
|
||||
</map>
|
||||
"""
|
||||
|
||||
|
||||
def parse_map(xml_file):
|
||||
root = ET.parse(xml_file)
|
||||
|
||||
title = root.find("title").text
|
||||
title_node = root.find("title")
|
||||
title=""
|
||||
if title_node != None:
|
||||
title=title_node.text
|
||||
|
||||
map = Map(title)
|
||||
logging.debug(f"map title: {title}")
|
||||
|
||||
width = 0
|
||||
height = 0
|
||||
id=0
|
||||
for line in root.findall("line"):
|
||||
line_name = line.get("name")
|
||||
try:
|
||||
@@ -156,20 +156,18 @@ def parse_map(xml_file):
|
||||
logging.debug(f"Parsing line: {line_parsed}")
|
||||
|
||||
for station in line.findall("station"):
|
||||
id = int(station.get("id"))
|
||||
id=id+1
|
||||
name = station.text
|
||||
x = int(station.get("x"))
|
||||
x = int(float(station.get("x")))
|
||||
# search width
|
||||
if x > width:
|
||||
width = x
|
||||
y = int(station.get("y"))
|
||||
y = int(float(station.get("y")))
|
||||
# search height
|
||||
if y > height:
|
||||
height = y
|
||||
text_pos = station.get("textpos")
|
||||
text_angle = int(station.get("angle"))
|
||||
|
||||
station_parsed = Station(id, name, x, y, text_angle, text_pos)
|
||||
station_parsed = Station(id, name, x, y)
|
||||
logging.debug(station_parsed)
|
||||
|
||||
line_parsed.add(station_parsed)
|
||||
@@ -184,12 +182,13 @@ def parse_map(xml_file):
|
||||
|
||||
return map
|
||||
|
||||
|
||||
"""
|
||||
Creates a capacity between LED's VCC and GND
|
||||
"""
|
||||
def create_capacity(station):
|
||||
cap_pos_index = ([*TEXT_POS_MAPPING].index(station.text_pos) + 2) % len(
|
||||
TEXT_POS_MAPPING
|
||||
)
|
||||
cap_pos = [*TEXT_POS_MAPPING.values()][cap_pos_index]
|
||||
cap_pos_x = CAP_DISTANCE_MM * math.sin(station.angle)
|
||||
cap_pos_y = CAP_DISTANCE_MM * math.cos(station.angle)
|
||||
cap_pos = Vector(cap_pos_x, cap_pos_y)
|
||||
fp = KFootprint(FOOTPRINT_C, at=station.pos + cap_pos, angle=station.angle)
|
||||
|
||||
ref = fp.properties[KFootprintProperty.Type.Reference]
|
||||
@@ -200,21 +199,26 @@ def create_capacity(station):
|
||||
|
||||
return fp
|
||||
|
||||
def calculate_angle(station1, station2):
|
||||
vec = Vector(station2.pos.x, station2.pos.y) - Vector(station1.pos.x, station1.pos.y)
|
||||
angle_rad = vec.self_angle()
|
||||
return math.degrees(angle_rad)
|
||||
|
||||
"""
|
||||
Creates the footprint for a station led
|
||||
adds led, text and C
|
||||
"""
|
||||
|
||||
|
||||
def create_station_footprint(station):
|
||||
fp = KFootprint(FOOTPRINT_LED, at=station.pos) # , angle=station.angle)
|
||||
fp = KFootprint(FOOTPRINT_LED, at=station.pos, angle=station.angle)
|
||||
|
||||
# text
|
||||
ref = fp.properties[KFootprintProperty.Type.Reference]
|
||||
if NO_TEXT:
|
||||
ref.layer = 'User.Comments'
|
||||
|
||||
ref.value = station.name
|
||||
ref.angle = station.angle
|
||||
ref.at = TEXT_POS_MAPPING[station.text_pos]
|
||||
text_pos_x = TEXT_SPACING_MM * math.cos(station.angle)
|
||||
text_pos_y = TEXT_SPACING_MM * math.sin(station.angle)
|
||||
ref.at = Vector(text_pos_x, text_pos_y)
|
||||
|
||||
if not NO_POWER_NETS:
|
||||
fp.pads[LED_PADS["GND"]].net = NET_GND
|
||||
@@ -227,15 +231,27 @@ def create_station_footprint(station):
|
||||
Creates a new net between station 1 out pad and station 2 in pad
|
||||
Connects them on the PCB
|
||||
"""
|
||||
|
||||
|
||||
def connect_stations(board, station1, station2, fp1, fp2):
|
||||
net = KNet(station1.id + 2, f"{station1.id}-{station2.id}")
|
||||
board.add(net)
|
||||
fp1.pads[LED_PADS["DO"]].net = net
|
||||
fp2.pads[LED_PADS["DI"]].net = net
|
||||
|
||||
do = fp1.pads[LED_PADS["DO"]]
|
||||
di = fp2.pads[LED_PADS["DI"]]
|
||||
|
||||
# connect the net
|
||||
do.net = net
|
||||
di.net = net
|
||||
|
||||
if NO_TRACES:
|
||||
return
|
||||
|
||||
# do the trace
|
||||
trace = KSegment(net=net, layer="F.Cu", point1=do.absolute_at, point2=di.absolute_at, width=TRACE_WIDTH_MM)
|
||||
board.add(trace)
|
||||
|
||||
"""
|
||||
Connects the line to the MC
|
||||
"""
|
||||
def connect_line(board, mc, line, station_fp):
|
||||
if connect_line.gpio_ptr > len(MC_PADS["gpios"]):
|
||||
logging.critical(
|
||||
@@ -253,16 +269,12 @@ def connect_line(board, mc, line, station_fp):
|
||||
station_fp.pads[LED_PADS["DI"]].net = net
|
||||
|
||||
connect_line.gpio_ptr += 1
|
||||
|
||||
|
||||
connect_line.gpio_ptr = 0
|
||||
|
||||
|
||||
"""
|
||||
Adds the main microcontroller
|
||||
"""
|
||||
|
||||
|
||||
def add_mc(board):
|
||||
mc = KFootprint(FOOTPRINT_MC, at=MC_POS)
|
||||
|
||||
@@ -278,22 +290,15 @@ def add_mc(board):
|
||||
adds labels for the lines to the next position in the TEXT_POS_MAPPING list
|
||||
from the position of the text label of the station (just a best estimate)
|
||||
"""
|
||||
|
||||
|
||||
def add_line_label(board, line, station):
|
||||
text_pos_x = station.pos.x + TEXT_SPACING_MM * math.sin(-0.25*station.angle)
|
||||
text_pos_y = station.pos.y + TEXT_SPACING_MM * math.cos(-0.25*station.angle)
|
||||
|
||||
# get next position
|
||||
text_pos_index = ([*TEXT_POS_MAPPING].index(station.text_pos) + 1) % len(
|
||||
TEXT_POS_MAPPING
|
||||
)
|
||||
text_pos = [*TEXT_POS_MAPPING.values()][text_pos_index]
|
||||
line_pos = Point(station.pos.x + 2 * text_pos.x,
|
||||
station.pos.y + 2 * text_pos.y)
|
||||
|
||||
text_pos = Vector(text_pos_x, text_pos_y)
|
||||
text = KGrText(
|
||||
layer="F.SilkS", text=f"{line.name}", at=line_pos, angle=station.angle
|
||||
layer="F.SilkS", text=f"{line.name}", at=text_pos
|
||||
)
|
||||
text.font = LINE_FONT
|
||||
#text.font = LINE_FONT
|
||||
|
||||
board.add(text)
|
||||
|
||||
@@ -301,9 +306,10 @@ def add_line_label(board, line, station):
|
||||
"""
|
||||
adds a board title top middle
|
||||
"""
|
||||
|
||||
|
||||
def add_title_label(board, map):
|
||||
if NO_TEXT:
|
||||
return
|
||||
|
||||
logging.debug(f"add map title: {map.title}")
|
||||
text = KGrText(
|
||||
layer="F.SilkS", text=f"{map.title}", at=Point(map.width / 2, MARGIN["top"])
|
||||
@@ -316,8 +322,6 @@ def add_title_label(board, map):
|
||||
"""
|
||||
main pcb generation loop
|
||||
"""
|
||||
|
||||
|
||||
def generate_pcb(map):
|
||||
board = KProject(PCB_FILE)
|
||||
board.add(NET_GND)
|
||||
@@ -330,7 +334,14 @@ def generate_pcb(map):
|
||||
for line in map.lines:
|
||||
prev_station = None
|
||||
prev_led = None
|
||||
if len(line.stations) == 0:
|
||||
continue
|
||||
for station in line.stations:
|
||||
if prev_station is not None:
|
||||
station.angle = calculate_angle(prev_station, station)
|
||||
else:
|
||||
station.angle = calculate_angle(station, line.stations[1])
|
||||
logging.debug(f"angle between stations: {station.angle}")
|
||||
led = create_station_footprint(station)
|
||||
board.add(led)
|
||||
cap = create_capacity(station)
|
||||
@@ -374,7 +385,7 @@ def main():
|
||||
|
||||
|
||||
def parse_arguments():
|
||||
global SCALE, TEXT_SPACING_MM, NO_POWER_NETS, PCB_FILE, LOG_LEVEL, INPUT_XML
|
||||
global SCALE, TEXT_SPACING_MM, NO_TEXT, NO_POWER_NETS, NO_TRACES, PCB_FILE, LOG_LEVEL, INPUT_XML
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description="train map pcb generator",
|
||||
@@ -393,10 +404,20 @@ def parse_arguments():
|
||||
default=5,
|
||||
help="spacing of the text from the center point of led (mm)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--no-text",
|
||||
action="store_true",
|
||||
help="do not produce any text",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--no-power-nets",
|
||||
action="store_true",
|
||||
help="do not connect (easier visual debugging)",
|
||||
help="do not connect GND and VCC (easier visual debugging)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--no-traces",
|
||||
action="store_true",
|
||||
help="do not implement traces between leds",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--output",
|
||||
@@ -418,7 +439,9 @@ def parse_arguments():
|
||||
INPUT_XML = args.input
|
||||
SCALE = args.scale
|
||||
TEXT_SPACING_MM = args.text_space
|
||||
NO_TEXT = args.no_text
|
||||
NO_POWER_NETS = args.no_power_nets
|
||||
NO_TRACES = args.no_traces
|
||||
PCB_FILE = args.output
|
||||
|
||||
if args.verbose > 0:
|
||||
@@ -429,9 +452,15 @@ def parse_arguments():
|
||||
print(f"Warning: Output file '{
|
||||
PCB_FILE}' does not have .kicad_pcb extension.")
|
||||
|
||||
if NO_TEXT:
|
||||
print("Mode: No text")
|
||||
|
||||
if args.no_power_nets:
|
||||
print("Mode: Power nets disabled.")
|
||||
|
||||
if NO_TRACES:
|
||||
print("Mode: No traces")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
+229
-166
@@ -1,184 +1,247 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
S-Bahn München Network Map Data
|
||||
Extracted from Netzplan_S-Bahn_München.svg (Stand: Dezember 2024)
|
||||
CC-BY-SA Zeno Heilmaier
|
||||
|
||||
Coordinate system: SVG viewBox 0 0 2400 1280
|
||||
x/y = center of station marker circle (or midpoint between circles for multi-circle stations)
|
||||
Diagonal X-marker stations: midpoint of the two crossing points
|
||||
Each station listed once only, under its first-occurring line (S1 first, then S2…S8, S20)
|
||||
-->
|
||||
<map>
|
||||
<title>Munich S</title>
|
||||
|
||||
<!-- ══════════════════════════════════════════
|
||||
STAMMSTRECKE (central tunnel)
|
||||
Shared by S1 S2 S3 S4 S6 S7 S8 S20
|
||||
══════════════════════════════════════════ -->
|
||||
<line name="Stammstrecke" color="None">
|
||||
<station id="1" x="345" y="525" angle="0" textpos="below" lines="[S3,S4,S6,S8,S20]">Pasing</station>
|
||||
<station id="2" x="385" y="525" angle="30" textpos="above" lines="[S1,S2,S3,S4,S6,S8]">Laim</station>
|
||||
<station id="3" x="420" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8]">Hirschgarten</station>
|
||||
<station id="4" x="455" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8,S7,S20]">Donnersbergerbrücke</station>
|
||||
<station id="5" x="490" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8]">Hackerbrücke</station>
|
||||
<station id="6" x="530" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8,S7]">Hauptbahnhof</station>
|
||||
<station id="7" x="565" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8,S7]">Karlsplatz (Stachus)</station>
|
||||
<station id="8" x="600" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8,S7]">Marienplatz</station>
|
||||
<station id="9" x="635" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8,S7]">Isartor</station>
|
||||
<station id="10" x="670" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8,S7]">Rosenheimer Platz</station>
|
||||
<station id="11" x="710" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8,S7]">Ostbahnhof</station>
|
||||
<station id="12" x="750" y="525" angle="90" textpos="above" lines="[S1,S2,S4,S6,S8]">Leuchtenbergring</station>
|
||||
<station id="13" x="785" y="535" angle="90" textpos="below" lines="[S2,S4,S6]">Berg am Laim</station>
|
||||
<station x="735" y="675" lines="[S1,S2,S3,S4,S6,S8,S20]">Pasing</station>
|
||||
<station x="825" y="675" lines="[S1,S2,S3,S4,S6,S8]">Laim</station>
|
||||
<station x="915" y="675" lines="[S1,S2,S3,S4,S6,S7,S8]">Donnersbergerbrücke</station>
|
||||
<station x="1005" y="675" lines="[S1,S2,S3,S4,S6,S7,S8]">Hackerbrücke</station>
|
||||
<station x="1095" y="675" lines="[S1,S2,S3,S4,S6,S7,S8]">Hauptbahnhof</station>
|
||||
<station x="1185" y="675" lines="[S1,S2,S3,S4,S6,S7,S8]">Karlsplatz (Stachus)</station>
|
||||
<station x="1275" y="675" lines="[S1,S2,S3,S4,S6,S7,S8]">Marienplatz</station>
|
||||
<station x="1365" y="675" lines="[S1,S2,S3,S4,S6,S7,S8]">Isartor</station>
|
||||
<station x="1455" y="675" lines="[S1,S2,S3,S4,S6,S7,S8]">Rosenheimer Platz</station>
|
||||
<station x="1545" y="675" lines="[S1,S2,S3,S4,S6,S7,S8]">Ostbahnhof</station>
|
||||
</line>
|
||||
|
||||
<line name="S1" color="cyan">
|
||||
<station id="14" x="730" y="110" angle="0" textpos="left">Freising</station>
|
||||
<station id="15" x="730" y="140" angle="0" textpos="left">Pulling</station>
|
||||
<station id="16" x="690" y="230" angle="0" textpos="above">Neufahrn</station>
|
||||
<station id="17" x="630" y="230" angle="0" textpos="above">Eching</station>
|
||||
<station id="18" x="570" y="230" angle="0" textpos="above">Lohhof</station>
|
||||
<station id="19" x="520" y="230" angle="0" textpos="above">Unterschleißheim</station>
|
||||
<station id="20" x="460" y="230" angle="0" textpos="above">Oberschleißheim</station>
|
||||
<station id="21" x="415" y="265" angle="0" textpos="right" lines="[S1,U2]">Feldmoching</station>
|
||||
<station id="22" x="385" y="315" angle="0" textpos="right">Fasanerie</station>
|
||||
<station id="23" x="355" y="365" angle="0" textpos="right" lines="[S1,U3]">Moosach</station>
|
||||
|
||||
<station id="24" x="795" y="170" angle="0" textpos="right">Flughafen München</station>
|
||||
<station id="25" x="775" y="200" angle="0" textpos="right">Flughafen Besucherpark</station>
|
||||
<!-- ══════════════════════════════════════════
|
||||
S1 Freising / Flughafen München – Erding
|
||||
Color: #16bae7
|
||||
══════════════════════════════════════════ -->
|
||||
<line name="S1" color="#16bae7">
|
||||
<station x="1725" y="150" lines="[S1]">Freising</station>
|
||||
<station x="1725" y="225" lines="[S1,S8]">Pulling</station>
|
||||
<!-- Airport branch -->
|
||||
<station x="1820" y="285" lines="[S1]">Flughafen Besucherpark</station>
|
||||
<station x="1885" y="220" lines="[S1,S8]">Flughafen München</station>
|
||||
<!-- Shared S1/S8 section south of airport -->
|
||||
<station x="1620" y="300" lines="[S1,S8]">Neufahrn</station>
|
||||
<station x="1470" y="300" lines="[S1,S8]">Eching</station>
|
||||
<station x="1320" y="300" lines="[S1,S8]">Lohhof</station>
|
||||
<station x="1020" y="300" lines="[S1,S8]">Oberschleißheim</station>
|
||||
<station x="1170" y="300" lines="[S1,S8]">Unterschleißheim</station>
|
||||
<!-- East of Ostbahnhof -->
|
||||
<station x="1725" y="675" lines="[S1,S2,S3,S4,S6]">Leuchtenbergring</station>
|
||||
<station x="1815" y="675" lines="[S1,S2,S4]">Berg am Laim</station>
|
||||
<station x="1905" y="615" lines="[S1,S2]">Riem</station>
|
||||
<station x="1940" y="580" lines="[S1,S2]">Feldkirchen</station>
|
||||
<station x="1975" y="545" lines="[S1,S2]">Heimstetten</station>
|
||||
<station x="2010" y="510" lines="[S1,S2]">Grub</station>
|
||||
<station x="2045" y="475" lines="[S1,S2]">Poing</station>
|
||||
<station x="2080" y="440" lines="[S1,S2]">Markt Schwaben</station>
|
||||
<station x="2090" y="395" lines="[S1]">Ottenhofen</station>
|
||||
<station x="2090" y="350" lines="[S1]">St. Koloman</station>
|
||||
<station x="2090" y="305" lines="[S1]">Aufhausen</station>
|
||||
<station x="2090" y="260" lines="[S1]">Altenerding</station>
|
||||
<station x="2090" y="215" lines="[S1]">Erding</station>
|
||||
</line>
|
||||
|
||||
<line name="S2" color="lime">
|
||||
<station id="26" x="120" y="70" angle="0" textpos="above">Altomünster</station>
|
||||
<station id="27" x="145" y="70" angle="0" textpos="above">Kleinberghofen</station>
|
||||
<station id="28" x="170" y="70" angle="0" textpos="above">Erdweg</station>
|
||||
<station id="29" x="195" y="90" angle="0" textpos="left">Arnbach</station>
|
||||
<station id="30" x="210" y="105" angle="0" textpos="left">Markt Indersdorf</station>
|
||||
<station id="31" x="225" y="130" angle="0" textpos="left">Niederroth</station>
|
||||
<station id="32" x="240" y="155" angle="0" textpos="left">Schwabhausen</station>
|
||||
<station id="33" x="255" y="180" angle="0" textpos="left">Bachern</station>
|
||||
<station id="34" x="270" y="205" angle="0" textpos="left">Dachau Stadt</station>
|
||||
|
||||
<station id="35" x="290" y="55" angle="0" textpos="right">Petershausen</station>
|
||||
<station id="36" x="290" y="90" angle="0" textpos="right">Vierkirchen-Esterhofen</station>
|
||||
<station id="37" x="290" y="135" angle="0" textpos="right">Röhrmoos</station>
|
||||
<station id="38" x="290" y="175" angle="0" textpos="right">Hebertshausen</station>
|
||||
|
||||
<station id="39" x="290" y="250" angle="0" textpos="right">Dachau</station>
|
||||
<station id="40" x="290" y="290" angle="0" textpos="right">Karlsfeld</station>
|
||||
<station id="41" x="290" y="330" angle="0" textpos="right">Allach</station>
|
||||
<station id="42" x="290" y="370" angle="0" textpos="right">Untermenzing</station>
|
||||
<station id="43" x="290" y="410" angle="0" textpos="right">Obermenzing</station>
|
||||
|
||||
<station id="44" x="870" y="165" angle="0" textpos="right">Erding</station>
|
||||
<station id="45" x="870" y="200" angle="0" textpos="right">Altenerding</station>
|
||||
<station id="46" x="870" y="235" angle="0" textpos="right">Aufhausen</station>
|
||||
<station id="47" x="870" y="270" angle="0" textpos="right">St. Koloman</station>
|
||||
<station id="48" x="870" y="305" angle="0" textpos="right">Ottenhofen</station>
|
||||
<station id="49" x="860" y="345" angle="45" textpos="right">Markt Schwaben</station>
|
||||
<station id="50" x="850" y="365" angle="45" textpos="right">Poing</station>
|
||||
<station id="51" x="840" y="385" angle="45" textpos="right">Grub</station>
|
||||
<station id="52" x="830" y="405" angle="45" textpos="right">Heimstetten</station>
|
||||
<station id="53" x="820" y="425" angle="45" textpos="right">Feldkirchen</station>
|
||||
<station id="54" x="810" y="465" angle="45" textpos="right">Riem</station>
|
||||
<!-- ══════════════════════════════════════════
|
||||
S2 Petershausen / Altomünster – Erding
|
||||
Color: #76b82a
|
||||
══════════════════════════════════════════ -->
|
||||
<line name="S2" color="#76b82a">
|
||||
<!-- NW branch: Petershausen -->
|
||||
<station x="675" y="75" lines="[S2]">Petershausen</station>
|
||||
<station x="675" y="125" lines="[S2]">Vierkirchen-Esterhofen</station>
|
||||
<station x="675" y="175" lines="[S2]">Röhrmoos</station>
|
||||
<station x="675" y="225" lines="[S2]">Hebertshausen</station>
|
||||
<station x="675" y="325" lines="[S2,S3]">Dachau</station>
|
||||
<station x="675" y="375" lines="[S2,S3]">Karlsfeld</station>
|
||||
<station x="675" y="425" lines="[S2,S3]">Allach</station>
|
||||
<station x="675" y="475" lines="[S2,S3]">Untermenzing</station>
|
||||
<station x="695" y="541" lines="[S2,S3]">Obermenzing</station>
|
||||
<station x="795" y="480" lines="[S2,S3]">Moosach</station>
|
||||
<station x="870" y="405" lines="[S2,S3]">Fasanerie</station>
|
||||
<station x="945" y="330" lines="[S2,S3]">Feldmoching</station>
|
||||
<!-- NE branch: Altomünster -->
|
||||
<station x="275" y="75" lines="[S2]">Altomünster</station>
|
||||
<station x="350" y="75" lines="[S2]">Kleinberghofen</station>
|
||||
<station x="425" y="75" lines="[S2]">Erdweg</station>
|
||||
<station x="475" y="100" lines="[S2]">Arnbach</station>
|
||||
<station x="510" y="135" lines="[S2]">Markt Indersdorf</station>
|
||||
<station x="545" y="170" lines="[S2]">Niederroth</station>
|
||||
<station x="580" y="205" lines="[S2]">Schwabhausen</station>
|
||||
<station x="615" y="240" lines="[S2]">Bachern</station>
|
||||
<station x="650" y="275" lines="[S2]">Dachau Stadt</station>
|
||||
</line>
|
||||
|
||||
<line name="S3" color="purple">
|
||||
<station id="55" x="160" y="255" angle="315" textpos="above">Mammendorf</station>
|
||||
<station id="56" x="175" y="270" angle="315" textpos="above">Malching</station>
|
||||
<station id="57" x="190" y="285" angle="315" textpos="above">Maisach</station>
|
||||
<station id="58" x="205" y="300" angle="315" textpos="above">Gernlinden</station>
|
||||
<station id="59" x="220" y="335" angle="315" textpos="above">Esting</station>
|
||||
<station id="60" x="235" y="350" angle="315" textpos="above">Olching</station>
|
||||
<station id="61" x="250" y="380" angle="315" textpos="above">Gröbenzell</station>
|
||||
<station id="62" x="265" y="415" angle="315" textpos="above">Lochhausen</station>
|
||||
<station id="63" x="280" y="455" angle="315" textpos="above">Langwied</station>
|
||||
|
||||
<station id="64" x="695" y="585" angle="0" textpos="right">St.-Martin-Straße</station>
|
||||
<station id="65" x="650" y="630" angle="0" textpos="right" lines="[S3,S7,U2]">Giesing</station>
|
||||
<station id="66" x="640" y="675" angle="0" textpos="left">Fasangarten</station>
|
||||
<station id="67" x="640" y="710" angle="0" textpos="left">Fasanenpark</station>
|
||||
<station id="68" x="640" y="745" angle="0" textpos="left">Unterhaching</station>
|
||||
<station id="69" x="640" y="780" angle="0" textpos="left">Taufkirchen</station>
|
||||
<station id="70" x="640" y="815" angle="0" textpos="left">Furth</station>
|
||||
<station id="71" x="640" y="850" angle="0" textpos="left">Deisenhofen</station>
|
||||
<station id="72" x="640" y="885" angle="0" textpos="left">Sauerlach</station>
|
||||
<station id="73" x="640" y="920" angle="0" textpos="left">Otterfing</station>
|
||||
<station id="74" x="640" y="955" angle="0" textpos="left">Holzkirchen</station>
|
||||
<!-- ══════════════════════════════════════════
|
||||
S3 Mammendorf – Holzkirchen
|
||||
Color: #ea516d
|
||||
══════════════════════════════════════════ -->
|
||||
<line name="S3" color="#ea516d">
|
||||
<station x="350" y="335" lines="[S3]">Mammendorf</station>
|
||||
<station x="385" y="370" lines="[S3]">Malching</station>
|
||||
<station x="420" y="405" lines="[S3]">Maisach</station>
|
||||
<station x="455" y="440" lines="[S3]">Gernlinden</station>
|
||||
<station x="490" y="475" lines="[S3]">Esting</station>
|
||||
<station x="525" y="510" lines="[S3]">Olching</station>
|
||||
<station x="560" y="545" lines="[S3]">Gröbenzell</station>
|
||||
<station x="595" y="580" lines="[S3]">Lochhausen</station>
|
||||
<station x="630" y="615" lines="[S3,S4,S6,S8]">Langwied</station>
|
||||
<!-- East via Ostbahnhof: Perlach, Giesing branch to Holzkirchen -->
|
||||
<station x="1593" y="860" lines="[S3]">Perlach</station>
|
||||
<station x="1545" y="815" lines="[S3]">St.-Martin-Straße</station>
|
||||
<station x="1545" y="850" lines="[S3]">Giesing</station>
|
||||
<station x="1520" y="871" lines="[S3]">Fasangarten</station>
|
||||
<station x="1520" y="917" lines="[S3]">Fasanenpark</station>
|
||||
<station x="1520" y="962" lines="[S3]">Unterhaching</station>
|
||||
<station x="1520" y="1008" lines="[S3]">Taufkirchen</station>
|
||||
<station x="1520" y="1053" lines="[S3]">Furth</station>
|
||||
<station x="1520" y="1099" lines="[S3]">Deisenhofen</station>
|
||||
<station x="1520" y="1144" lines="[S3]">Sauerlach</station>
|
||||
<station x="1520" y="1190" lines="[S3]">Otterfing</station>
|
||||
<station x="1520" y="1235" lines="[S3]">Holzkirchen</station>
|
||||
</line>
|
||||
|
||||
<line name="S4" color="red">
|
||||
<station id="75" x="60" y="685" angle="0" textpos="left">Geltendorf</station>
|
||||
<station id="76" x="80" y="660" angle="315" textpos="above">Türkenfeld</station>
|
||||
<station id="77" x="95" y="645" angle="315" textpos="above">Grafrath</station>
|
||||
<station id="78" x="105" y="635" angle="315" textpos="above">Schöngeising</station>
|
||||
<station id="79" x="115" y="625" angle="315" textpos="above">Buchenau</station>
|
||||
<station id="80" x="135" y="595" angle="315" textpos="above">Fürstenfeldbruck</station>
|
||||
<station id="81" x="155" y="550" angle="0" textpos="above">Eichenau</station>
|
||||
<station id="82" x="195" y="550" angle="0" textpos="above">Puchheim</station>
|
||||
<station id="83" x="225" y="550" angle="0" textpos="above">Aubing</station>
|
||||
<station id="84" x="255" y="550" angle="0" textpos="above">Leienfelsstraße</station>
|
||||
|
||||
<station id="85" x="815" y="540" angle="0" textpos="below">Trudering</station>
|
||||
<station id="86" x="840" y="550" angle="45" textpos="right">Gronsdorf</station>
|
||||
<station id="87" x="850" y="565" angle="45" textpos="right">Haar</station>
|
||||
<station id="88" x="860" y="580" angle="45" textpos="right">Vaterstetten</station>
|
||||
<station id="89" x="870" y="595" angle="45" textpos="right">Baldham</station>
|
||||
<station id="90" x="880" y="610" angle="45" textpos="right">Zorneding</station>
|
||||
<station id="91" x="890" y="625" angle="45" textpos="right">Eglharting</station>
|
||||
<station id="92" x="900" y="640" angle="45" textpos="right">Kirchseeon</station>
|
||||
<station id="93" x="915" y="660" angle="45" textpos="right">Grafing Bahnhof</station>
|
||||
<station id="94" x="925" y="685" angle="45" textpos="right">Grafing Stadt</station>
|
||||
<station id="95" x="935" y="710" angle="45" textpos="right">Ebersberg</station>
|
||||
<!-- ══════════════════════════════════════════
|
||||
S4 Geltendorf – Ebersberg
|
||||
Color: #e3051b
|
||||
══════════════════════════════════════════ -->
|
||||
<line name="S4" color="#e3051b">
|
||||
<station x="140" y="885" lines="[S4]">Geltendorf</station>
|
||||
<station x="175" y="850" lines="[S4]">Türkenfeld</station>
|
||||
<station x="210" y="815" lines="[S4]">Grafrath</station>
|
||||
<station x="245" y="780" lines="[S4]">Schöngeising</station>
|
||||
<station x="280" y="745" lines="[S4]">Buchenau</station>
|
||||
<station x="315" y="710" lines="[S4]">Fürstenfeldbruck</station>
|
||||
<station x="375" y="675" lines="[S4,S5,S6]">Eichenau</station>
|
||||
<station x="450" y="675" lines="[S4,S5,S6]">Puchheim</station>
|
||||
<station x="525" y="675" lines="[S4,S5,S6]">Aubing</station>
|
||||
<station x="600" y="675" lines="[S4,S5,S6]">Leienfelsstraße</station>
|
||||
<!-- East: Trudering → Ebersberg (shared with S6) -->
|
||||
<station x="1905" y="682" lines="[S4,S6]">Trudering</station>
|
||||
<station x="1970" y="700" lines="[S4,S6]">Gronsdorf</station>
|
||||
<station x="2000" y="730" lines="[S4,S6]">Haar</station>
|
||||
<station x="2030" y="760" lines="[S4,S6]">Vaterstetten</station>
|
||||
<station x="2060" y="790" lines="[S4,S6]">Baldham</station>
|
||||
<station x="2090" y="820" lines="[S4,S6]">Zorneding</station>
|
||||
<station x="2120" y="850" lines="[S4,S6]">Eglharting</station>
|
||||
<station x="2150" y="880" lines="[S4,S6]">Kirchseeon</station>
|
||||
<station x="2180" y="910" lines="[S4,S6]">Grafing Bahnhof</station>
|
||||
<station x="2210" y="940" lines="[S4]">Grafing Stadt</station>
|
||||
<station x="2240" y="970" lines="[S4]">Ebersberg</station>
|
||||
</line>
|
||||
|
||||
<line name="S6" color="forestgreen">
|
||||
<station id="96" x="270" y="955" angle="0" textpos="right">Tutzing</station>
|
||||
<station id="97" x="270" y="920" angle="0" textpos="right">Feldafing</station>
|
||||
<station id="98" x="270" y="885" angle="0" textpos="right">Possenhofen</station>
|
||||
<station id="99" x="270" y="850" angle="0" textpos="right">Starnberg</station>
|
||||
<station id="100" x="270" y="815" angle="0" textpos="right">Starnberg Nord</station>
|
||||
<station id="101" x="270" y="780" angle="0" textpos="right">Gauting</station>
|
||||
<station id="102" x="270" y="745" angle="0" textpos="right">Stockdorf</station>
|
||||
<station id="103" x="270" y="710" angle="0" textpos="right">Planegg</station>
|
||||
<station id="104" x="270" y="675" angle="0" textpos="right">Gräfelfing</station>
|
||||
<station id="105" x="270" y="630" angle="0" textpos="right">Lochham</station>
|
||||
<station id="106" x="290" y="570" angle="45" textpos="left" lines="[S6,S8]">Westkreuz</station>
|
||||
<!-- ══════════════════════════════════════════
|
||||
S5 Herrsching – Kreuzstraße
|
||||
Color: #00547e
|
||||
══════════════════════════════════════════ -->
|
||||
<line name="S5" color="#00547e">
|
||||
<station x="250" y="1120" lines="[S5]">Herrsching</station>
|
||||
<station x="285" y="1085" lines="[S5]">Seefeld-Hechendorf</station>
|
||||
<station x="320" y="1050" lines="[S5]">Steinebach</station>
|
||||
<station x="340" y="1020" lines="[S5]">Weßling</station>
|
||||
<station x="375" y="985" lines="[S5]">Neugilching</station>
|
||||
<station x="410" y="950" lines="[S5]">Gilching-Argelsried</station>
|
||||
<station x="445" y="915" lines="[S5]">Geisenbrunn</station>
|
||||
<station x="470" y="875" lines="[S5]">Germering-Unterpfaffenhofen</station>
|
||||
<station x="480" y="880" lines="[S5]">Harthaus</station>
|
||||
<station x="515" y="845" lines="[S5]">Freiham</station>
|
||||
<station x="550" y="810" lines="[S5]">Neuaubing</station>
|
||||
<station x="590" y="770" lines="[S5,S6,S8]">Westkreuz</station>
|
||||
<!-- East: Neuperlach Süd → Kreuzstraße -->
|
||||
<station x="1645" y="890" lines="[S5]">Neuperlach Süd</station>
|
||||
<station x="1645" y="925" lines="[S5]">Neubiberg</station>
|
||||
<station x="1645" y="960" lines="[S5]">Ottobrunn</station>
|
||||
<station x="1645" y="995" lines="[S5]">Hohenbrunn</station>
|
||||
<station x="1645" y="1030" lines="[S5]">Wächterhof</station>
|
||||
<station x="1645" y="1065" lines="[S5]">Höhenkirchen-Siegertsbrunn</station>
|
||||
<station x="1645" y="1100" lines="[S5]">Dürrnhaar</station>
|
||||
<station x="1645" y="1135" lines="[S5]">Aying</station>
|
||||
<station x="1645" y="1165" lines="[S5]">Peiß</station>
|
||||
<station x="1645" y="1200" lines="[S5]">Großhelfendorf</station>
|
||||
<station x="1645" y="1235" lines="[S5]">Kreuzstraße</station>
|
||||
</line>
|
||||
|
||||
<line name="S7" color="maroon">
|
||||
<station id="107" x="400" y="955" angle="0" textpos="right">Wolfratshausen</station>
|
||||
<station id="108" x="400" y="925" angle="0" textpos="right">Icking</station>
|
||||
<station id="109" x="400" y="900" angle="0" textpos="right">Ebenhausen-Schäftlarn</station>
|
||||
<station id="110" x="400" y="875" angle="0" textpos="right">Hohenschäftlarn</station>
|
||||
<station id="111" x="400" y="850" angle="0" textpos="right">Baierbrunn</station>
|
||||
<station id="112" x="400" y="825" angle="0" textpos="right">Buchenhain</station>
|
||||
<station id="113" x="400" y="800" angle="0" textpos="right" lines="[S7,S20]">Höllriegelskreuth</station>
|
||||
<station id="114" x="400" y="775" angle="0" textpos="right">Pullach</station>
|
||||
<station id="115" x="400" y="750" angle="0" textpos="right">Großhesselohe Isartalbahnhof</station>
|
||||
<station id="116" x="400" y="725" angle="0" textpos="right" lines="[S7,S20]">Solln</station>
|
||||
<station id="117" x="400" y="695" angle="0" textpos="right" lines="[S7,S20]">Siemenswerke</station>
|
||||
<station id="118" x="400" y="665" angle="0" textpos="right" lines="[S7,S20]">Mittersendling</station>
|
||||
<station id="119" x="400" y="635" angle="0" textpos="right">Harras</station>
|
||||
<station id="120" x="400" y="595" angle="0" textpos="right" lines="[S7,S20,U4,U5]">Heimeranplatz</station>
|
||||
|
||||
<station id="121" x="690" y="685" angle="0" textpos="right">Perlach</station>
|
||||
<station id="122" x="690" y="705" angle="0" textpos="right">Neuperlach Süd</station>
|
||||
<station id="123" x="690" y="725" angle="0" textpos="right">Neubiberg</station>
|
||||
<station id="124" x="690" y="750" angle="0" textpos="right">Ottobrunn</station>
|
||||
<station id="125" x="690" y="775" angle="0" textpos="right">Hohenbrunn</station>
|
||||
<station id="126" x="690" y="800" angle="0" textpos="right">Wächterhof</station>
|
||||
<station id="127" x="690" y="825" angle="0" textpos="right">Höhenkirchen-Siegertsbrunn</station>
|
||||
<station id="128" x="690" y="850" angle="0" textpos="right">Dürrnhaar</station>
|
||||
<station id="129" x="690" y="875" angle="0" textpos="right">Aying</station>
|
||||
<station id="130" x="690" y="900" angle="0" textpos="right">Peiß</station>
|
||||
<station id="131" x="690" y="925" angle="0" textpos="right">Großhelfendorf</station>
|
||||
<station id="132" x="690" y="955" angle="0" textpos="right">Kreuzstraße</station>
|
||||
<!-- ══════════════════════════════════════════
|
||||
S6 Tutzing – Ebersberg
|
||||
Color: #008d58
|
||||
══════════════════════════════════════════ -->
|
||||
<line name="S6" color="#008d58">
|
||||
<station x="635" y="1235" lines="[S6]">Tutzing</station>
|
||||
<station x="635" y="1184" lines="[S6]">Feldafing</station>
|
||||
<station x="635" y="1134" lines="[S6]">Possenhofen</station>
|
||||
<station x="635" y="1083" lines="[S6]">Starnberg</station>
|
||||
<station x="635" y="1033" lines="[S6]">Starnberg Nord</station>
|
||||
<station x="635" y="982" lines="[S6]">Gauting</station>
|
||||
<station x="635" y="932" lines="[S6]">Stockdorf</station>
|
||||
<station x="635" y="881" lines="[S6]">Planegg</station>
|
||||
<station x="635" y="831" lines="[S6]">Gräfelfing</station>
|
||||
<station x="635" y="780" lines="[S6]">Lochham</station>
|
||||
<!-- East stations shared with S4 – listed under S4 -->
|
||||
</line>
|
||||
|
||||
<line name="S8" color="black">
|
||||
<station id="133" x="110" y="870" angle="0" textpos="left">Herrsching</station>
|
||||
<station id="134" x="125" y="850" angle="45" textpos="left">Seefeld-Hechendorf</station>
|
||||
<station id="135" x="135" y="835" angle="45" textpos="left">Steinebach</station>
|
||||
<station id="136" x="145" y="810" angle="0" textpos="left">Weßling</station>
|
||||
<station id="137" x="160" y="765" angle="45" textpos="left">Neugilching</station>
|
||||
<station id="138" x="175" y="745" angle="45" textpos="left">Gilching-Argelsried</station>
|
||||
<station id="139" x="190" y="725" angle="45" textpos="left">Geisenbrunn</station>
|
||||
<station id="140" x="205" y="700" angle="45" textpos="left">Germering-Unterpfaffenhofen</station>
|
||||
<station id="141" x="220" y="675" angle="45" textpos="left">Harthaus</station>
|
||||
<station id="142" x="235" y="650" angle="45" textpos="left">Freiham</station>
|
||||
<station id="143" x="250" y="615" angle="45" textpos="left">Neuaubing</station>
|
||||
|
||||
<station id="144" x="760" y="465" angle="0" textpos="right">Daglfing</station>
|
||||
<station id="145" x="760" y="430" angle="0" textpos="right">Englschalking</station>
|
||||
<station id="146" x="760" y="390" angle="0" textpos="right">Johanneskirchen</station>
|
||||
<station id="147" x="760" y="350" angle="0" textpos="right">Unterföhring</station>
|
||||
<station id="148" x="760" y="310" angle="0" textpos="right">Ismaning</station>
|
||||
<station id="149" x="760" y="260" angle="0" textpos="right">Hallbergmoos</station>
|
||||
<!-- ══════════════════════════════════════════
|
||||
S7 Wolfratshausen – Ostbahnhof
|
||||
Color: #892e23
|
||||
══════════════════════════════════════════ -->
|
||||
<line name="S7" color="#892e23">
|
||||
<station x="965" y="1235" lines="[S7]">Wolfratshausen</station>
|
||||
<station x="965" y="1200" lines="[S7]">Icking</station>
|
||||
<station x="965" y="1165" lines="[S7]">Ebenhausen-Schäftlarn</station>
|
||||
<station x="965" y="1130" lines="[S7]">Hohenschäftlarn</station>
|
||||
<station x="965" y="1095" lines="[S7]">Baierbrunn</station>
|
||||
<station x="965" y="1060" lines="[S7]">Buchenhain</station>
|
||||
<station x="965" y="1025" lines="[S7,S20]">Höllriegelskreuth</station>
|
||||
<station x="965" y="990" lines="[S7]">Pullach</station>
|
||||
<station x="965" y="955" lines="[S7]">Großhesselohe Isartalbahnhof</station>
|
||||
<station x="965" y="920" lines="[S7]">Solln</station>
|
||||
<station x="965" y="885" lines="[S7]">Siemenswerke</station>
|
||||
<station x="965" y="850" lines="[S7]">Mittersendling</station>
|
||||
<station x="965" y="815" lines="[S7]">Harras</station>
|
||||
<station x="965" y="780" lines="[S7,S20]">Heimeranplatz</station>
|
||||
</line>
|
||||
|
||||
|
||||
<!-- ══════════════════════════════════════════
|
||||
S8 Herrsching – Flughafen München
|
||||
Color: #f0ac32
|
||||
(Herrsching–Westkreuz shared with S5; Stammstrecke shared;
|
||||
Berg am Laim–Daglfing diverges northeast to airport)
|
||||
══════════════════════════════════════════ -->
|
||||
<line name="S8" color="#f0ac32">
|
||||
<station x="1815" y="600" lines="[S8]">Daglfing</station>
|
||||
<station x="1815" y="550" lines="[S8]">Englschalking</station>
|
||||
<station x="1815" y="500" lines="[S8]">Johanneskirchen</station>
|
||||
<station x="1815" y="450" lines="[S8]">Unterföhring</station>
|
||||
<station x="1815" y="400" lines="[S8]">Ismaning</station>
|
||||
<station x="1815" y="350" lines="[S8]">Hallbergmoos</station>
|
||||
<!-- Flughafen München listed under S1 -->
|
||||
</line>
|
||||
|
||||
<!-- ══════════════════════════════════════════
|
||||
S20 Pasing – Deisenhofen (orbital, limited service)
|
||||
Color: #892e23
|
||||
Shares Stammstrecke and S7 southern stations.
|
||||
No unique-to-S20 stations beyond what is listed elsewhere.
|
||||
══════════════════════════════════════════ -->
|
||||
<line name="S20" color="#892e23">
|
||||
<!-- All stations shared with Stammstrecke and S7; see those lines. -->
|
||||
</line>
|
||||
|
||||
</map>
|
||||
|
||||
@@ -0,0 +1,182 @@
|
||||
<map>
|
||||
<line name="Stammstrecke" color="None">
|
||||
<station x="725" y="725" lines="[S1,S2,S3,S4,S6,S8,S20]">Pasing</station>
|
||||
<station x="825" y="630" lines="[S1,S2,S3,S4,S6,S8]">Laim</station>
|
||||
<station x="915" y="630" lines="[S1,S2,S3,S4,S6,S7,S8]">Donnersbergerbrücke</station>
|
||||
<station x="1005" y="630" lines="[S1,S2,S3,S4,S6,S7,S8]">Hackerbrücke</station>
|
||||
<station x="1095" y="630" lines="[S1,S2,S3,S4,S6,S7,S8]">Hauptbahnhof</station>
|
||||
<station x="1185" y="630" lines="[S1,S2,S3,S4,S6,S7,S8]">Karlsplatz (Stachus)</station>
|
||||
<station x="1275" y="630" lines="[S1,S2,S3,S4,S6,S7,S8]">Marienplatz</station>
|
||||
<station x="1365" y="630" lines="[S1,S2,S3,S4,S6,S7,S8]">Isartor</station>
|
||||
<station x="1455" y="630" lines="[S1,S2,S3,S4,S6,S7,S8]">Rosenheimer Platz</station>
|
||||
<station x="1545" y="725" lines="[S1,S2,S3,S4,S6,S8]">Ostbahnhof</station>
|
||||
</line>
|
||||
|
||||
<line name="S1" color="#16bae7">
|
||||
<station x="1725" y="150" lines="[S1]">Freising</station>
|
||||
<station x="1725" y="195" lines="[S1]">Pulling</station>
|
||||
<station x="1725" y="240" lines="[S1]">Neufahrn</station>
|
||||
<station x="1879" y="214" lines="[S1,S8]">Flughafen München</station>
|
||||
<station x="1824" y="269" lines="[S1,S8]">Besucherpark</station>
|
||||
<station x="1635" y="240" lines="[S1]">Eching</station>
|
||||
<station x="1545" y="240" lines="[S1]">Lohhof</station>
|
||||
<station x="1455" y="240" lines="[S1]">Unterschleißheim</station>
|
||||
<station x="1365" y="240" lines="[S1]">Oberschleißheim</station>
|
||||
<station x="1235" y="370" lines="[S1]">Feldmoching</station>
|
||||
<station x="1145" y="460" lines="[S1]">Fasanerie</station>
|
||||
<station x="1055" y="550" lines="[S1]">Moosach</station>
|
||||
</line>
|
||||
|
||||
<line name="S2" color="#76b82a">
|
||||
<station x="275" y="75" lines="[S2]">Altomünster</station>
|
||||
<station x="385" y="185" lines="[S2]">Kleinberghofen</station>
|
||||
<station x="495" y="295" lines="[S2]">Erdweg</station>
|
||||
<station x="605" y="405" lines="[S2]">Arnbach</station>
|
||||
<station x="675" y="75" lines="[S2]">Petershausen</station>
|
||||
<station x="675" y="120" lines="[S2]">Vierkirchen-Esterhofen</station>
|
||||
<station x="675" y="165" lines="[S2]">Röhrmoos</station>
|
||||
<station x="675" y="210" lines="[S2]">Hebertshausen</station>
|
||||
<station x="675" y="325" lines="[S2]">Dachau</station>
|
||||
<station x="675" y="370" lines="[S2]">Karlsfeld</station>
|
||||
<station x="675" y="415" lines="[S2]">Allach</station>
|
||||
<station x="675" y="460" lines="[S2]">Untermenzing</station>
|
||||
<station x="675" y="505" lines="[S2]">Obermenzing</station>
|
||||
<station x="1635" y="725" lines="[S2,S4,S6,S8]">Leuchtenbergring</station>
|
||||
<station x="1725" y="725" lines="[S2,S4,S6]">Berg am Laim</station>
|
||||
<station x="1815" y="725" lines="[S2]">Riem</station>
|
||||
<station x="1905" y="725" lines="[S2]">Feldkirchen</station>
|
||||
<station x="1995" y="725" lines="[S2]">Heimstetten</station>
|
||||
<station x="2085" y="725" lines="[S2]">Grub</station>
|
||||
<station x="2175" y="635" lines="[S2]">Poing</station>
|
||||
<station x="2175" y="545" lines="[S2]">Markt Schwaben</station>
|
||||
<station x="2090" y="440" lines="[S2]">Ottenhofen</station>
|
||||
<station x="2090" y="395" lines="[S2]">St. Koloman</station>
|
||||
<station x="2090" y="350" lines="[S2]">Wörth</station>
|
||||
<station x="2090" y="305" lines="[S2]">Aufhausen</station>
|
||||
<station x="2090" y="260" lines="[S2]">Altenerding</station>
|
||||
<station x="2090" y="215" lines="[S2]">Erding</station>
|
||||
</line>
|
||||
|
||||
<line name="S3" color="#e3051b">
|
||||
<station x="140" y="885" lines="[S3]">Mammendorf</station>
|
||||
<station x="230" y="795" lines="[S3]">Malching</station>
|
||||
<station x="320" y="705" lines="[S3]">Maisach</station>
|
||||
<station x="410" y="705" lines="[S3]">Gernlinden</station>
|
||||
<station x="500" y="705" lines="[S3]">Esting</station>
|
||||
<station x="590" y="705" lines="[S3]">Olching</station>
|
||||
<station x="680" y="705" lines="[S3]">Gröbenzell</station>
|
||||
<station x="1635" y="815" lines="[S3,S7]">St-Martin-Straße</station>
|
||||
<station x="1725" y="905" lines="[S3,S7]">Giesing</station>
|
||||
<station x="1815" y="995" lines="[S3]">Fasangarten</station>
|
||||
<station x="1905" y="1085" lines="[S3]">Fasanenpark</station>
|
||||
<station x="1995" y="1175" lines="[S3]">Unterhaching</station>
|
||||
<station x="2085" y="1265" lines="[S3]">Taufkirchen</station>
|
||||
<station x="2175" y="1265" lines="[S3]">Furth</station>
|
||||
<station x="2265" y="1175" lines="[S3]">Deisenhofen</station>
|
||||
<station x="2265" y="1085" lines="[S3]">Sauerlach</station>
|
||||
<station x="2265" y="995" lines="[S3]">Otterfing</station>
|
||||
<station x="2265" y="905" lines="[S3]">Holzkirchen</station>
|
||||
</line>
|
||||
|
||||
<line name="S4" color="#008d58">
|
||||
<station x="635" y="1235" lines="[S4]">Geltendorf</station>
|
||||
<station x="635" y="1185" lines="[S4]">Türkenfeld</station>
|
||||
<station x="635" y="1135" lines="[S4]">Grafrath</station>
|
||||
<station x="635" y="1085" lines="[S4]">Schöngeising</station>
|
||||
<station x="635" y="1035" lines="[S4]">Buchenau</station>
|
||||
<station x="635" y="985" lines="[S4]">Fürstenfeldbruck</station>
|
||||
<station x="635" y="935" lines="[S4]">Eichenau</station>
|
||||
<station x="635" y="885" lines="[S4]">Puchheim</station>
|
||||
<station x="635" y="835" lines="[S4]">Aubing</station>
|
||||
<station x="635" y="785" lines="[S4]">Leienfelsstraße</station>
|
||||
<station x="1815" y="815" lines="[S4,S6]">Trudering</station>
|
||||
<station x="1905" y="815" lines="[S4,S6]">Gronsdorf</station>
|
||||
<station x="1995" y="815" lines="[S4,S6]">Haar</station>
|
||||
<station x="2085" y="815" lines="[S4,S6]">Vaterstetten</station>
|
||||
<station x="2175" y="815" lines="[S4,S6]">Baldham</station>
|
||||
<station x="2265" y="815" lines="[S4,S6]">Zorneding</station>
|
||||
<station x="2265" y="905" lines="[S4,S6]">Eglharting</station>
|
||||
<station x="2265" y="995" lines="[S4,S6]">Kirchseeon</station>
|
||||
<station x="2265" y="1085" lines="[S4,S6]">Grafing Bahnhof</station>
|
||||
<station x="2265" y="1175" lines="[S4,S6]">Grafing Stadt</station>
|
||||
<station x="2265" y="1265" lines="[S4,S6]">Ebersberg</station>
|
||||
</line>
|
||||
<!--
|
||||
<line name="S5">
|
||||
<station x="1520" y="970" lines="S5">Perlach</station>
|
||||
<station x="1520" y="1005" lines="S5">Neuperlach Süd</station>
|
||||
<station x="1520" y="1030" lines="S5">Neubiberg</station>
|
||||
<station x="1520" y="1055" lines="S5">Ottobrunn</station>
|
||||
<station x="1520" y="1080" lines="S5">Hohenbrunn</station>
|
||||
<station x="1520" y="1105" lines="S5">Wächterhof</station>
|
||||
<station x="1520" y="1130" lines="S5">Höhenkirchen-Siegertsbrunn</station>
|
||||
<station x="1520" y="1165" lines="S5">Dürrnhaar</station>
|
||||
<station x="1645" y="1165" lines="S5">Aying</station>
|
||||
<station x="1645" y="1190" lines="S5">Peiß</station>
|
||||
<station x="1645" y="1215" lines="S5">Großhelfendorf</station>
|
||||
<station x="1645" y="1235" lines="S5">Kreuzstraße</station>
|
||||
</line>
|
||||
-->
|
||||
<line name="S6" color="#008d58">
|
||||
<station x="140" y="1175" lines="[S6]">Tutzing</station>
|
||||
<station x="230" y="1175" lines="[S6]">Feldafing</station>
|
||||
<station x="320" y="1175" lines="[S6]">Possenhofen</station>
|
||||
<station x="410" y="1175" lines="[S6]">Starnberg</station>
|
||||
<station x="500" y="1175" lines="[S6]">Starnberg Nord</station>
|
||||
<station x="590" y="1175" lines="[S6]">Gauting</station>
|
||||
<station x="680" y="1175" lines="[S6]">Stockdorf</station>
|
||||
<station x="770" y="1175" lines="[S6]">Planegg</station>
|
||||
<station x="860" y="1175" lines="[S6]">Gräfelfing</station>
|
||||
<station x="950" y="1175" lines="[S6]">Lochham</station>
|
||||
<station x="725" y="815" lines="[S6,S8]">Westkreuz</station>
|
||||
</line>
|
||||
|
||||
<line name="S7" color="#941c44">
|
||||
<station x="725" y="1265" lines="[S7]">Wolfratshausen</station>
|
||||
<station x="815" y="1265" lines="[S7]">Icking</station>
|
||||
<station x="905" y="1265" lines="[S7]">Ebenhausen-Schäftlarn</station>
|
||||
<station x="995" y="1265" lines="[S7]">Hohenschäftlarn</station>
|
||||
<station x="1085" y="1265" lines="[S7]">Baierbrunn</station>
|
||||
<station x="1175" y="1265" lines="[S7]">Buchenhain</station>
|
||||
<station x="1265" y="1265" lines="[S7]">Höllriegelskreuth</station>
|
||||
<station x="1355" y="1265" lines="[S7]">Pullach</station>
|
||||
<station x="1445" y="1265" lines="[S7]">Großhesselohe Isartalbf</station>
|
||||
<station x="1535" y="1265" lines="[S7,S20]">Solln</station>
|
||||
<station x="1625" y="1175" lines="[S7,S20]">Siemenswerke</station>
|
||||
<station x="1625" y="1085" lines="[S7,S20]">Mittersendling</station>
|
||||
<station x="1625" y="995" lines="[S7]">Harras</station>
|
||||
<station x="1625" y="905" lines="[S7,S20]">Heimeranplatz</station>
|
||||
<station x="1815" y="905" lines="[S7]">Perlach</station>
|
||||
<station x="1905" y="905" lines="[S7]">Neuperlach Süd</station>
|
||||
<station x="1995" y="905" lines="[S7]">Neubiberg</station>
|
||||
<station x="2085" y="905" lines="[S7]">Ottobrunn</station>
|
||||
<station x="2175" y="905" lines="[S7]">Hohenbrunn</station>
|
||||
<station x="2175" y="995" lines="[S7]">Wächterhof</station>
|
||||
<station x="2175" y="1085" lines="[S7]">Höhenkirchen-Siegertsbrunn</station>
|
||||
<station x="2175" y="1175" lines="[S7]">Dürrnhaar</station>
|
||||
<station x="2175" y="1265" lines="[S7]">Aying</station>
|
||||
<station x="2265" y="1265" lines="[S7]">Peiß</station>
|
||||
<station x="2355" y="1265" lines="[S7]">Großhelfendorf</station>
|
||||
<station x="2355" y="1175" lines="[S7]">Kreuzstraße</station>
|
||||
</line>
|
||||
|
||||
<line name="S8" color="#f29400">
|
||||
<station x="140" y="1085" lines="[S8]">Herrsching</station>
|
||||
<station x="230" y="1085" lines="[S8]">Seefeld-Hechendorf</station>
|
||||
<station x="320" y="1085" lines="[S8]">Steinebach</station>
|
||||
<station x="410" y="1085" lines="[S8]">Weßling</station>
|
||||
<station x="500" y="1085" lines="[S8]">Neugilching</station>
|
||||
<station x="590" y="1085" lines="[S8]">Gilching-Argelsried</station>
|
||||
<station x="680" y="1085" lines="[S8]">Geisenbrunn</station>
|
||||
<station x="770" y="1085" lines="[S8]">Germering-Unterpfaffenhofen</station>
|
||||
<station x="860" y="1085" lines="[S8]">Harthaus</station>
|
||||
<station x="950" y="1085" lines="[S8]">Freiham</station>
|
||||
<station x="1040" y="1085" lines="[S8]">Neuaubing</station>
|
||||
<station x="1725" y="635" lines="[S8]">Daglfing</station>
|
||||
<station x="1725" y="545" lines="[S8]">Englschalking</station>
|
||||
<station x="1725" y="455" lines="[S8]">Johanneskirchen</station>
|
||||
<station x="1725" y="365" lines="[S8]">Unterföhring</station>
|
||||
<station x="1725" y="275" lines="[S8]">Ismaning</station>
|
||||
<station x="1850" y="275" lines="[S8]">Hallbergmoos</station>
|
||||
</line>
|
||||
</map>
|
||||
@@ -0,0 +1,184 @@
|
||||
<map>
|
||||
<title>Munich S</title>
|
||||
<line name="Stammstrecke" color="None">
|
||||
<station id="1" x="345" y="525" angle="0" textpos="below" lines="[S3,S4,S6,S8,S20]">Pasing</station>
|
||||
<station id="2" x="385" y="525" angle="30" textpos="above" lines="[S1,S2,S3,S4,S6,S8]">Laim</station>
|
||||
<station id="3" x="420" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8]">Hirschgarten</station>
|
||||
<station id="4" x="455" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8,S7,S20]">Donnersbergerbrücke</station>
|
||||
<station id="5" x="490" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8]">Hackerbrücke</station>
|
||||
<station id="6" x="530" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8,S7]">Hauptbahnhof</station>
|
||||
<station id="7" x="565" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8,S7]">Karlsplatz (Stachus)</station>
|
||||
<station id="8" x="600" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8,S7]">Marienplatz</station>
|
||||
<station id="9" x="635" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8,S7]">Isartor</station>
|
||||
<station id="10" x="670" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8,S7]">Rosenheimer Platz</station>
|
||||
<station id="11" x="710" y="525" angle="90" textpos="above" lines="[S1,S2,S3,S4,S6,S8,S7]">Ostbahnhof</station>
|
||||
<station id="12" x="750" y="525" angle="90" textpos="above" lines="[S1,S2,S4,S6,S8]">Leuchtenbergring</station>
|
||||
<station id="13" x="785" y="535" angle="90" textpos="below" lines="[S2,S4,S6]">Berg am Laim</station>
|
||||
</line>
|
||||
|
||||
<line name="S1" color="cyan">
|
||||
<station id="14" x="730" y="110" angle="0" textpos="left">Freising</station>
|
||||
<station id="15" x="730" y="140" angle="0" textpos="left">Pulling</station>
|
||||
<station id="16" x="690" y="230" angle="0" textpos="above">Neufahrn</station>
|
||||
<station id="17" x="630" y="230" angle="0" textpos="above">Eching</station>
|
||||
<station id="18" x="570" y="230" angle="0" textpos="above">Lohhof</station>
|
||||
<station id="19" x="520" y="230" angle="0" textpos="above">Unterschleißheim</station>
|
||||
<station id="20" x="460" y="230" angle="0" textpos="above">Oberschleißheim</station>
|
||||
<station id="21" x="415" y="265" angle="0" textpos="right" lines="[S1,U2]">Feldmoching</station>
|
||||
<station id="22" x="385" y="315" angle="0" textpos="right">Fasanerie</station>
|
||||
<station id="23" x="355" y="365" angle="0" textpos="right" lines="[S1,U3]">Moosach</station>
|
||||
|
||||
<station id="24" x="795" y="170" angle="0" textpos="right">Flughafen München</station>
|
||||
<station id="25" x="775" y="200" angle="0" textpos="right">Flughafen Besucherpark</station>
|
||||
</line>
|
||||
|
||||
<line name="S2" color="lime">
|
||||
<station id="26" x="120" y="70" angle="0" textpos="above">Altomünster</station>
|
||||
<station id="27" x="145" y="70" angle="0" textpos="above">Kleinberghofen</station>
|
||||
<station id="28" x="170" y="70" angle="0" textpos="above">Erdweg</station>
|
||||
<station id="29" x="195" y="90" angle="0" textpos="left">Arnbach</station>
|
||||
<station id="30" x="210" y="105" angle="0" textpos="left">Markt Indersdorf</station>
|
||||
<station id="31" x="225" y="130" angle="0" textpos="left">Niederroth</station>
|
||||
<station id="32" x="240" y="155" angle="0" textpos="left">Schwabhausen</station>
|
||||
<station id="33" x="255" y="180" angle="0" textpos="left">Bachern</station>
|
||||
<station id="34" x="270" y="205" angle="0" textpos="left">Dachau Stadt</station>
|
||||
|
||||
<station id="35" x="290" y="55" angle="0" textpos="right">Petershausen</station>
|
||||
<station id="36" x="290" y="90" angle="0" textpos="right">Vierkirchen-Esterhofen</station>
|
||||
<station id="37" x="290" y="135" angle="0" textpos="right">Röhrmoos</station>
|
||||
<station id="38" x="290" y="175" angle="0" textpos="right">Hebertshausen</station>
|
||||
|
||||
<station id="39" x="290" y="250" angle="0" textpos="right">Dachau</station>
|
||||
<station id="40" x="290" y="290" angle="0" textpos="right">Karlsfeld</station>
|
||||
<station id="41" x="290" y="330" angle="0" textpos="right">Allach</station>
|
||||
<station id="42" x="290" y="370" angle="0" textpos="right">Untermenzing</station>
|
||||
<station id="43" x="290" y="410" angle="0" textpos="right">Obermenzing</station>
|
||||
|
||||
<station id="44" x="870" y="165" angle="0" textpos="right">Erding</station>
|
||||
<station id="45" x="870" y="200" angle="0" textpos="right">Altenerding</station>
|
||||
<station id="46" x="870" y="235" angle="0" textpos="right">Aufhausen</station>
|
||||
<station id="47" x="870" y="270" angle="0" textpos="right">St. Koloman</station>
|
||||
<station id="48" x="870" y="305" angle="0" textpos="right">Ottenhofen</station>
|
||||
<station id="49" x="860" y="345" angle="45" textpos="right">Markt Schwaben</station>
|
||||
<station id="50" x="850" y="365" angle="45" textpos="right">Poing</station>
|
||||
<station id="51" x="840" y="385" angle="45" textpos="right">Grub</station>
|
||||
<station id="52" x="830" y="405" angle="45" textpos="right">Heimstetten</station>
|
||||
<station id="53" x="820" y="425" angle="45" textpos="right">Feldkirchen</station>
|
||||
<station id="54" x="810" y="465" angle="45" textpos="right">Riem</station>
|
||||
</line>
|
||||
|
||||
<line name="S3" color="purple">
|
||||
<station id="55" x="160" y="255" angle="315" textpos="above">Mammendorf</station>
|
||||
<station id="56" x="175" y="270" angle="315" textpos="above">Malching</station>
|
||||
<station id="57" x="190" y="285" angle="315" textpos="above">Maisach</station>
|
||||
<station id="58" x="205" y="300" angle="315" textpos="above">Gernlinden</station>
|
||||
<station id="59" x="220" y="335" angle="315" textpos="above">Esting</station>
|
||||
<station id="60" x="235" y="350" angle="315" textpos="above">Olching</station>
|
||||
<station id="61" x="250" y="380" angle="315" textpos="above">Gröbenzell</station>
|
||||
<station id="62" x="265" y="415" angle="315" textpos="above">Lochhausen</station>
|
||||
<station id="63" x="280" y="455" angle="315" textpos="above">Langwied</station>
|
||||
|
||||
<station id="64" x="695" y="585" angle="0" textpos="right">St.-Martin-Straße</station>
|
||||
<station id="65" x="650" y="630" angle="0" textpos="right" lines="[S3,S7,U2]">Giesing</station>
|
||||
<station id="66" x="640" y="675" angle="0" textpos="left">Fasangarten</station>
|
||||
<station id="67" x="640" y="710" angle="0" textpos="left">Fasanenpark</station>
|
||||
<station id="68" x="640" y="745" angle="0" textpos="left">Unterhaching</station>
|
||||
<station id="69" x="640" y="780" angle="0" textpos="left">Taufkirchen</station>
|
||||
<station id="70" x="640" y="815" angle="0" textpos="left">Furth</station>
|
||||
<station id="71" x="640" y="850" angle="0" textpos="left">Deisenhofen</station>
|
||||
<station id="72" x="640" y="885" angle="0" textpos="left">Sauerlach</station>
|
||||
<station id="73" x="640" y="920" angle="0" textpos="left">Otterfing</station>
|
||||
<station id="74" x="640" y="955" angle="0" textpos="left">Holzkirchen</station>
|
||||
</line>
|
||||
|
||||
<line name="S4" color="red">
|
||||
<station id="75" x="60" y="685" angle="0" textpos="left">Geltendorf</station>
|
||||
<station id="76" x="80" y="660" angle="315" textpos="above">Türkenfeld</station>
|
||||
<station id="77" x="95" y="645" angle="315" textpos="above">Grafrath</station>
|
||||
<station id="78" x="105" y="635" angle="315" textpos="above">Schöngeising</station>
|
||||
<station id="79" x="115" y="625" angle="315" textpos="above">Buchenau</station>
|
||||
<station id="80" x="135" y="595" angle="315" textpos="above">Fürstenfeldbruck</station>
|
||||
<station id="81" x="155" y="550" angle="0" textpos="above">Eichenau</station>
|
||||
<station id="82" x="195" y="550" angle="0" textpos="above">Puchheim</station>
|
||||
<station id="83" x="225" y="550" angle="0" textpos="above">Aubing</station>
|
||||
<station id="84" x="255" y="550" angle="0" textpos="above">Leienfelsstraße</station>
|
||||
|
||||
<station id="85" x="815" y="540" angle="0" textpos="below">Trudering</station>
|
||||
<station id="86" x="840" y="550" angle="45" textpos="right">Gronsdorf</station>
|
||||
<station id="87" x="850" y="565" angle="45" textpos="right">Haar</station>
|
||||
<station id="88" x="860" y="580" angle="45" textpos="right">Vaterstetten</station>
|
||||
<station id="89" x="870" y="595" angle="45" textpos="right">Baldham</station>
|
||||
<station id="90" x="880" y="610" angle="45" textpos="right">Zorneding</station>
|
||||
<station id="91" x="890" y="625" angle="45" textpos="right">Eglharting</station>
|
||||
<station id="92" x="900" y="640" angle="45" textpos="right">Kirchseeon</station>
|
||||
<station id="93" x="915" y="660" angle="45" textpos="right">Grafing Bahnhof</station>
|
||||
<station id="94" x="925" y="685" angle="45" textpos="right">Grafing Stadt</station>
|
||||
<station id="95" x="935" y="710" angle="45" textpos="right">Ebersberg</station>
|
||||
</line>
|
||||
|
||||
<line name="S6" color="forestgreen">
|
||||
<station id="96" x="270" y="955" angle="0" textpos="right">Tutzing</station>
|
||||
<station id="97" x="270" y="920" angle="0" textpos="right">Feldafing</station>
|
||||
<station id="98" x="270" y="885" angle="0" textpos="right">Possenhofen</station>
|
||||
<station id="99" x="270" y="850" angle="0" textpos="right">Starnberg</station>
|
||||
<station id="100" x="270" y="815" angle="0" textpos="right">Starnberg Nord</station>
|
||||
<station id="101" x="270" y="780" angle="0" textpos="right">Gauting</station>
|
||||
<station id="102" x="270" y="745" angle="0" textpos="right">Stockdorf</station>
|
||||
<station id="103" x="270" y="710" angle="0" textpos="right">Planegg</station>
|
||||
<station id="104" x="270" y="675" angle="0" textpos="right">Gräfelfing</station>
|
||||
<station id="105" x="270" y="630" angle="0" textpos="right">Lochham</station>
|
||||
<station id="106" x="290" y="570" angle="45" textpos="left" lines="[S6,S8]">Westkreuz</station>
|
||||
</line>
|
||||
|
||||
<line name="S7" color="maroon">
|
||||
<station id="107" x="400" y="955" angle="0" textpos="right">Wolfratshausen</station>
|
||||
<station id="108" x="400" y="925" angle="0" textpos="right">Icking</station>
|
||||
<station id="109" x="400" y="900" angle="0" textpos="right">Ebenhausen-Schäftlarn</station>
|
||||
<station id="110" x="400" y="875" angle="0" textpos="right">Hohenschäftlarn</station>
|
||||
<station id="111" x="400" y="850" angle="0" textpos="right">Baierbrunn</station>
|
||||
<station id="112" x="400" y="825" angle="0" textpos="right">Buchenhain</station>
|
||||
<station id="113" x="400" y="800" angle="0" textpos="right" lines="[S7,S20]">Höllriegelskreuth</station>
|
||||
<station id="114" x="400" y="775" angle="0" textpos="right">Pullach</station>
|
||||
<station id="115" x="400" y="750" angle="0" textpos="right">Großhesselohe Isartalbahnhof</station>
|
||||
<station id="116" x="400" y="725" angle="0" textpos="right" lines="[S7,S20]">Solln</station>
|
||||
<station id="117" x="400" y="695" angle="0" textpos="right" lines="[S7,S20]">Siemenswerke</station>
|
||||
<station id="118" x="400" y="665" angle="0" textpos="right" lines="[S7,S20]">Mittersendling</station>
|
||||
<station id="119" x="400" y="635" angle="0" textpos="right">Harras</station>
|
||||
<station id="120" x="400" y="595" angle="0" textpos="right" lines="[S7,S20,U4,U5]">Heimeranplatz</station>
|
||||
|
||||
<station id="121" x="690" y="685" angle="0" textpos="right">Perlach</station>
|
||||
<station id="122" x="690" y="705" angle="0" textpos="right">Neuperlach Süd</station>
|
||||
<station id="123" x="690" y="725" angle="0" textpos="right">Neubiberg</station>
|
||||
<station id="124" x="690" y="750" angle="0" textpos="right">Ottobrunn</station>
|
||||
<station id="125" x="690" y="775" angle="0" textpos="right">Hohenbrunn</station>
|
||||
<station id="126" x="690" y="800" angle="0" textpos="right">Wächterhof</station>
|
||||
<station id="127" x="690" y="825" angle="0" textpos="right">Höhenkirchen-Siegertsbrunn</station>
|
||||
<station id="128" x="690" y="850" angle="0" textpos="right">Dürrnhaar</station>
|
||||
<station id="129" x="690" y="875" angle="0" textpos="right">Aying</station>
|
||||
<station id="130" x="690" y="900" angle="0" textpos="right">Peiß</station>
|
||||
<station id="131" x="690" y="925" angle="0" textpos="right">Großhelfendorf</station>
|
||||
<station id="132" x="690" y="955" angle="0" textpos="right">Kreuzstraße</station>
|
||||
</line>
|
||||
|
||||
<line name="S8" color="black">
|
||||
<station id="133" x="110" y="870" angle="0" textpos="left">Herrsching</station>
|
||||
<station id="134" x="125" y="850" angle="45" textpos="left">Seefeld-Hechendorf</station>
|
||||
<station id="135" x="135" y="835" angle="45" textpos="left">Steinebach</station>
|
||||
<station id="136" x="145" y="810" angle="0" textpos="left">Weßling</station>
|
||||
<station id="137" x="160" y="765" angle="45" textpos="left">Neugilching</station>
|
||||
<station id="138" x="175" y="745" angle="45" textpos="left">Gilching-Argelsried</station>
|
||||
<station id="139" x="190" y="725" angle="45" textpos="left">Geisenbrunn</station>
|
||||
<station id="140" x="205" y="700" angle="45" textpos="left">Germering-Unterpfaffenhofen</station>
|
||||
<station id="141" x="220" y="675" angle="45" textpos="left">Harthaus</station>
|
||||
<station id="142" x="235" y="650" angle="45" textpos="left">Freiham</station>
|
||||
<station id="143" x="250" y="615" angle="45" textpos="left">Neuaubing</station>
|
||||
|
||||
<station id="144" x="760" y="465" angle="0" textpos="right">Daglfing</station>
|
||||
<station id="145" x="760" y="430" angle="0" textpos="right">Englschalking</station>
|
||||
<station id="146" x="760" y="390" angle="0" textpos="right">Johanneskirchen</station>
|
||||
<station id="147" x="760" y="350" angle="0" textpos="right">Unterföhring</station>
|
||||
<station id="148" x="760" y="310" angle="0" textpos="right">Ismaning</station>
|
||||
<station id="149" x="760" y="260" angle="0" textpos="right">Hallbergmoos</station>
|
||||
</line>
|
||||
|
||||
</map>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -6,5 +6,6 @@ readme = "README.md"
|
||||
requires-python = ">=3.12"
|
||||
dependencies = [
|
||||
"argparse>=1.4.0",
|
||||
"kicad-pycbnew>=1.0.0",
|
||||
#"kicad-pycbnew>=1.0.0",
|
||||
"kicad-pycbnew @ file:///${PROJECT_ROOT}/kicad-pycbnew",
|
||||
]
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,2 +0,0 @@
|
||||
(kicad_pcb (version 20241229) (generator "pcbnew") (generator_version "9.0")
|
||||
)
|
||||
@@ -1,131 +0,0 @@
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 0,
|
||||
"active_layer_preset": "",
|
||||
"auto_track_width": true,
|
||||
"hidden_netclasses": [],
|
||||
"hidden_nets": [],
|
||||
"high_contrast_mode": 0,
|
||||
"net_color_mode": 1,
|
||||
"opacity": {
|
||||
"images": 0.6,
|
||||
"pads": 1.0,
|
||||
"shapes": 1.0,
|
||||
"tracks": 1.0,
|
||||
"vias": 1.0,
|
||||
"zones": 0.6
|
||||
},
|
||||
"selection_filter": {
|
||||
"dimensions": true,
|
||||
"footprints": true,
|
||||
"graphics": true,
|
||||
"keepouts": true,
|
||||
"lockedItems": false,
|
||||
"otherItems": true,
|
||||
"pads": true,
|
||||
"text": true,
|
||||
"tracks": true,
|
||||
"vias": true,
|
||||
"zones": true
|
||||
},
|
||||
"visible_items": [
|
||||
"vias",
|
||||
"footprint_text",
|
||||
"footprint_anchors",
|
||||
"ratsnest",
|
||||
"grid",
|
||||
"footprints_front",
|
||||
"footprints_back",
|
||||
"footprint_values",
|
||||
"footprint_references",
|
||||
"tracks",
|
||||
"drc_errors",
|
||||
"drawing_sheet",
|
||||
"bitmaps",
|
||||
"pads",
|
||||
"zones",
|
||||
"drc_warnings",
|
||||
"drc_exclusions",
|
||||
"locked_item_shadows",
|
||||
"conflict_shadows",
|
||||
"shapes"
|
||||
],
|
||||
"visible_layers": "00000000_00000000_00002aaa_aaaaaaaf",
|
||||
"zone_display_mode": 0
|
||||
},
|
||||
"git": {
|
||||
"repo_type": "",
|
||||
"repo_username": "",
|
||||
"ssh_key": ""
|
||||
},
|
||||
"meta": {
|
||||
"filename": "test.kicad_prl",
|
||||
"version": 5
|
||||
},
|
||||
"net_inspector_panel": {
|
||||
"col_hidden": [
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"col_order": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8,
|
||||
9
|
||||
],
|
||||
"col_widths": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"custom_group_rules": [],
|
||||
"expanded_rows": [],
|
||||
"filter_by_net_name": true,
|
||||
"filter_by_netclass": true,
|
||||
"filter_text": "",
|
||||
"group_by_constraint": false,
|
||||
"group_by_netclass": false,
|
||||
"show_unconnected_nets": false,
|
||||
"show_zero_pad_nets": false,
|
||||
"sort_ascending": true,
|
||||
"sorting_column": 0
|
||||
},
|
||||
"open_jobsets": [],
|
||||
"project": {
|
||||
"files": []
|
||||
},
|
||||
"schematic": {
|
||||
"selection_filter": {
|
||||
"graphics": true,
|
||||
"images": true,
|
||||
"labels": true,
|
||||
"lockedItems": false,
|
||||
"otherItems": true,
|
||||
"pins": true,
|
||||
"symbols": true,
|
||||
"text": true,
|
||||
"wires": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,284 +0,0 @@
|
||||
{
|
||||
"board": {
|
||||
"3dviewports": [],
|
||||
"design_settings": {
|
||||
"defaults": {
|
||||
"apply_defaults_to_fp_fields": false,
|
||||
"apply_defaults_to_fp_shapes": false,
|
||||
"apply_defaults_to_fp_text": false,
|
||||
"board_outline_line_width": 0.05,
|
||||
"copper_line_width": 0.2,
|
||||
"copper_text_italic": false,
|
||||
"copper_text_size_h": 1.5,
|
||||
"copper_text_size_v": 1.5,
|
||||
"copper_text_thickness": 0.3,
|
||||
"copper_text_upright": false,
|
||||
"courtyard_line_width": 0.05,
|
||||
"dimension_precision": 4,
|
||||
"dimension_units": 3,
|
||||
"dimensions": {
|
||||
"arrow_length": 1270000,
|
||||
"extension_offset": 500000,
|
||||
"keep_text_aligned": true,
|
||||
"suppress_zeroes": true,
|
||||
"text_position": 0,
|
||||
"units_format": 0
|
||||
},
|
||||
"fab_line_width": 0.1,
|
||||
"fab_text_italic": false,
|
||||
"fab_text_size_h": 1.0,
|
||||
"fab_text_size_v": 1.0,
|
||||
"fab_text_thickness": 0.15,
|
||||
"fab_text_upright": false,
|
||||
"other_line_width": 0.1,
|
||||
"other_text_italic": false,
|
||||
"other_text_size_h": 1.0,
|
||||
"other_text_size_v": 1.0,
|
||||
"other_text_thickness": 0.15,
|
||||
"other_text_upright": false,
|
||||
"pads": {
|
||||
"drill": 0.8,
|
||||
"height": 1.27,
|
||||
"width": 2.54
|
||||
},
|
||||
"silk_line_width": 0.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.1,
|
||||
"silk_text_upright": false,
|
||||
"zones": {
|
||||
"min_clearance": 0.5
|
||||
}
|
||||
},
|
||||
"diff_pair_dimensions": [],
|
||||
"drc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 2
|
||||
},
|
||||
"rule_severities": {
|
||||
"annular_width": "error",
|
||||
"clearance": "error",
|
||||
"connection_width": "warning",
|
||||
"copper_edge_clearance": "error",
|
||||
"copper_sliver": "warning",
|
||||
"courtyards_overlap": "error",
|
||||
"creepage": "error",
|
||||
"diff_pair_gap_out_of_range": "error",
|
||||
"diff_pair_uncoupled_length_too_long": "error",
|
||||
"drill_out_of_range": "error",
|
||||
"duplicate_footprints": "warning",
|
||||
"extra_footprint": "warning",
|
||||
"footprint": "error",
|
||||
"footprint_filters_mismatch": "ignore",
|
||||
"footprint_symbol_mismatch": "warning",
|
||||
"footprint_type_mismatch": "ignore",
|
||||
"hole_clearance": "error",
|
||||
"hole_to_hole": "warning",
|
||||
"holes_co_located": "warning",
|
||||
"invalid_outline": "error",
|
||||
"isolated_copper": "warning",
|
||||
"item_on_disabled_layer": "error",
|
||||
"items_not_allowed": "error",
|
||||
"length_out_of_range": "error",
|
||||
"lib_footprint_issues": "warning",
|
||||
"lib_footprint_mismatch": "warning",
|
||||
"malformed_courtyard": "error",
|
||||
"microvia_drill_out_of_range": "error",
|
||||
"mirrored_text_on_front_layer": "warning",
|
||||
"missing_courtyard": "ignore",
|
||||
"missing_footprint": "warning",
|
||||
"net_conflict": "warning",
|
||||
"nonmirrored_text_on_back_layer": "warning",
|
||||
"npth_inside_courtyard": "ignore",
|
||||
"padstack": "warning",
|
||||
"pth_inside_courtyard": "ignore",
|
||||
"shorting_items": "error",
|
||||
"silk_edge_clearance": "warning",
|
||||
"silk_over_copper": "warning",
|
||||
"silk_overlap": "warning",
|
||||
"skew_out_of_range": "error",
|
||||
"solder_mask_bridge": "error",
|
||||
"starved_thermal": "error",
|
||||
"text_height": "warning",
|
||||
"text_on_edge_cuts": "error",
|
||||
"text_thickness": "warning",
|
||||
"through_hole_pad_without_hole": "error",
|
||||
"too_many_vias": "error",
|
||||
"track_angle": "error",
|
||||
"track_dangling": "warning",
|
||||
"track_segment_length": "error",
|
||||
"track_width": "error",
|
||||
"tracks_crossing": "error",
|
||||
"unconnected_items": "error",
|
||||
"unresolved_variable": "error",
|
||||
"via_dangling": "warning",
|
||||
"zones_intersect": "error"
|
||||
},
|
||||
"rules": {
|
||||
"max_error": 0.005,
|
||||
"min_clearance": 0.0,
|
||||
"min_connection": 0.0,
|
||||
"min_copper_edge_clearance": 0.5,
|
||||
"min_groove_width": 0.0,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.0,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.5,
|
||||
"solder_mask_to_copper_clearance": 0.0,
|
||||
"use_height_for_length_calcs": true
|
||||
},
|
||||
"teardrop_options": [
|
||||
{
|
||||
"td_onpthpad": true,
|
||||
"td_onroundshapesonly": false,
|
||||
"td_onsmdpad": true,
|
||||
"td_ontrackend": false,
|
||||
"td_onvia": true
|
||||
}
|
||||
],
|
||||
"teardrop_parameters": [
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_round_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_rect_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_track_end",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
}
|
||||
],
|
||||
"track_widths": [],
|
||||
"tuning_pattern_settings": {
|
||||
"diff_pair_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 1.0
|
||||
},
|
||||
"diff_pair_skew_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
},
|
||||
"single_track_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
}
|
||||
},
|
||||
"via_dimensions": [],
|
||||
"zones_allow_external_fillets": false
|
||||
},
|
||||
"ipc2581": {
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_pairs": [],
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
"boards": [],
|
||||
"cvpcb": {
|
||||
"equivalence_files": []
|
||||
},
|
||||
"libraries": {
|
||||
"pinned_footprint_libs": [],
|
||||
"pinned_symbol_libs": []
|
||||
},
|
||||
"meta": {
|
||||
"filename": "test.kicad_pro",
|
||||
"version": 3
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.2,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
"diff_pair_width": 0.2,
|
||||
"line_style": 0,
|
||||
"microvia_diameter": 0.3,
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"priority": 2147483647,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.2,
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 4
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": []
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "",
|
||||
"plot": "",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "",
|
||||
"step": "",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"legacy_lib_dir": "",
|
||||
"legacy_lib_list": []
|
||||
},
|
||||
"sheets": [],
|
||||
"text_variables": {}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
(kicad_sch
|
||||
(version 20250114)
|
||||
(generator "eeschema")
|
||||
(generator_version "9.0")
|
||||
(uuid e717760d-b0d7-4baa-b5f9-5d59033b1f42)
|
||||
(paper "A4")
|
||||
(lib_symbols)
|
||||
(sheet_instances
|
||||
(path "/"
|
||||
(page "1")
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
+27939
-27180
File diff suppressed because it is too large
Load Diff
Generated
+8
-6
@@ -23,20 +23,22 @@ dependencies = [
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "argparse", specifier = ">=1.4.0" },
|
||||
{ name = "kicad-pycbnew", specifier = ">=1.0.0" },
|
||||
{ name = "kicad-pycbnew", directory = "kicad-pycbnew" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "kicad-pycbnew"
|
||||
version = "1.0.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
version = "1.0.1"
|
||||
source = { directory = "kicad-pycbnew" }
|
||||
dependencies = [
|
||||
{ name = "pyparsing" },
|
||||
{ name = "strenum" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/cb/96/cc2bb6d5c516f7fe05b29abdf082581e072d4786b67e7b76fa2254740bf7/kicad_pycbnew-1.0.0.tar.gz", hash = "sha256:06d102eafad45821cbaa938b533889e87b4e5893435e77037d9541b2585e95b1", size = 53537, upload-time = "2026-01-27T10:04:00.866Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/8c/bc/db88ba6b541ea1d0bcc03fc1f7ba9c0bb92602e0f6c9bae9983f618b03c5/kicad_pycbnew-1.0.0-py3-none-any.whl", hash = "sha256:d987a322ff3a2d9701319466e1255b56dd2c7b71c7ebc77e33c7ef7cdf2f3381", size = 60081, upload-time = "2026-01-27T10:03:59.539Z" },
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "pyparsing", specifier = ">=3.0,<4.0" },
|
||||
{ name = "strenum", specifier = ">=0.4" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
Reference in New Issue
Block a user