Commit 36cbeaa9 authored by Thomas Graichen's avatar Thomas Graichen
Browse files

Add Readme and region code filtering as argument

parent 22576317
This Python toolset can be used for converting ZHV data (German: Daten des Zentralen Haltestellenverzeichnisses) to OSM.
Use case of the converted data is the mapping of accessibility barriers at public transport stops with the [OPENER App](
The tool's software is licensed under the GPL 3.0.
Further information can be found at the German-speaking [project website of OPENER](
The development of this app is sponsored by the Federal Ministry of Transport and Digital Infrastructure under the project ID VB18F1016A
within the digital innovation program mFUND.
## Dependencies:
- Python 3.8
- pyosmium
- lxml
## Usage:
python zHV_aktuell_xml.2020-05-05.xml --regionfilter SACHSEN
The output file is in your current working directory and has the name "yyyy-mm-dd-stop_places.osm" (e.g. 2020-05-08-stop_places.osm).
## XML-Scheme of ZHV:
The ZHV classes were generated by [generateDS]( using a [ZHV XML scheme](data/scheme/zhv_scheme.xsd).
Regeneration of these classes can be done by:
generateDS -o zhv_scheme.xsd
\ No newline at end of file
This diff is collapsed.
......@@ -7,7 +7,7 @@ from zhv_parser.ZhvClasses import StopPlace
class RegionCode(Enum):
ALL = ""
......@@ -26,6 +26,8 @@ class RegionCode(Enum):
def isStopPlaceInRegion(self, stop_place: StopPlace):
if self == RegionCode.ALL:
return True
dhid = stop_place.get_DHID()
region_code = self.value
found = str(dhid).find(region_code, 3, 5)
import argparse
import os
import sys
from datetime import date
......@@ -88,7 +89,7 @@ class ZhvConverter:
def __init__(self):
self.unused_osm_id = 0
def parse(self, xml_file):
def parse(self, xml_file, region_code: RegionCode = RegionCode.ALL):
today =
# dd/mm/YY
d1 = today.strftime("%Y-%m-%d-")
......@@ -104,7 +105,7 @@ class ZhvConverter:
stop_place_class = ZhvClasses.StopPlace
stop_place = stop_place_class.factory()
if not self.is_stop_place_in_region(RegionCode.SACHSEN, stop_place):
if not self.is_stop_place_in_region(region_code, stop_place):
(stop_place_relation, nodes) = self.stop_place_to_osm(stop_place, context)
......@@ -240,11 +241,19 @@ def usage():
def main():
args = sys.argv[1:]
if len(args) != 1:
infile_name = args[0]
parser = argparse.ArgumentParser()
parser.add_argument("inputfile", help="ZHV input file")
parser.add_argument("--regionfilter", help="zhv")
args = parser.parse_args()
infile_name = args.inputfile
if args.regionfilter:
region_code = RegionCode[args.regionfilter]
region_code = RegionCode.ALL
print(f'Start conversion with region filer {region_code}')
ZhvConverter().parse(infile_name, region_code)
if __name__ == '__main__':
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment