shapefile zu gpx-Datei mit "Text"?

Hallo,
durch diesen Beitrag hier im Forum: ( https://forum.openstreetmap.org/viewtopic.php?pid=750588#p750588 ) bin ich auf diese shape-Dateien ( https://data.deutschebahn.com/dataset/geo-kilometer/resource/e6db874f-3478-4776-ab75-ebae9cf0c10a ) mit der DB-Kilometrierung gestossen. Ich habe versucht diese shape Datei in eine gpx -Datei zu konvertieren. Das ist mir auch in JOSM gelungen; leider allerdings ohne die zugehörigen Tags in denen dann auch die Streckennummer und die Kilometeranzeige “versteckt” ist. Ich möchte die Daten nicht in osm versorgen, sondern mir eine gpx-Datei erstellen welche ich bei Bedarf in osmand einblenden kann und so die Kilometrierung sehen kann. Wie aber schon weiter oben beschrieben bekomme ich nur eine GPX-Datei in der zwar die Koordinaten der Punkte gespeichert sind, aber leider nicht die (wichtigen) erläuternden Texte. Somit wird mir zwar der Punkt an der richtigen Stelle, aber nicht der Name und die Kilometrierung angezeigt.
Gibt es da eine (am besten einfache) Möglichkeit das Gewünschte zu erreichen?

Wenn ich das richtig sehe, dann bekommst Du in der *.gpx eine Liste von way points (wpt). In der importierten Datei gibt es tags wie km_i und km_j. Wenn ich das richtig sehe, müsstest Du vor dem Export alle importierten tags in ein name transformieren. Das name tag wird nämlich exportiert.
Weiss aber nicht, wie man das automatisieren kann. Vielleicht mit dem scripting plugin?

…gibt es sonst eventuell ein (open source) programm zum Konvertieren von shape-Dateien?

klar, ohne Ende :wink:
ogr2ogr, oder ein beliebiges freies GIS wie QGis, Grass GIS, etc.

@blaubaer11 ich hab nicht das Gefühl, dass in den Kilometer-Daten noch weitere Daten drinstehen außer Streckennummern und Kilometerangaben.

Suchst du sowas?
https://umap.openstreetmap.fr/en/map/untitled-map_332222


#!/usr/bin/python3.7

import subprocess
import re
from lxml import etree

dbf = [
    line.split(maxsplit=4)
    for line in subprocess.check_output(['dbfdump', 'kilometer_point.dbf'], text=True).splitlines()[1:]
]

shp = []
for line in subprocess.check_output(['shpdump', 'kilometer_point.shp'], text=True).splitlines():
    m = re.match(r'^\s+\(([0-9.]+),([0-9.]+),', line)
    if m:
        shp.append(m.group(2, 1))

gpx = etree.Element('gpx')
for km, coord in sorted(zip(dbf, shp), key=lambda arg: (int(arg[0][1]), int(arg[0][3]))):
    wpt = etree.SubElement(gpx, 'wpt', lat=coord[0], lon=coord[1])
    etree.SubElement(wpt, 'name').text = f'{km[1]} | {km[4].strip()}'

with open('bahn.gpx', 'wb') as fp:
    fp.write(etree.tostring(gpx, pretty_print=True))

Hallo Wulf,
ja ich würde gerne so ein “Overlay” für osmand aus den shape Daten erstellen. Mehr als Strecke und Kilometerangaben bräuchte ich nicht.
Wie müsste ich denn dazu den von Dir aufgelisteten Code wo einsetzen? So sagt mir das leider nichts :wink:

@dieterdreist: Wie bekäm ich das mit einem dieser Programme denn hin?

Gruß
Blaubaer

MIt deiner bevorzugten Linux-Distro. Unter Debian:

apt install shapelib python3.7 python3-lxml

GPX findest du hier. Vielleicht reicht das so. http://wulf.eu.org/osm/bahnkilometer.gpx

Hallo Wulf,

vielen Dank für die gpx-Datei, das ist genau das was ich haben bzw. “bauen” wollte!

Dankeschön ;-))