AltoAdige - Südtirol/SASA Bus Stops Import
About
Import of bus stops from the opensasa.info dataset. These are bus stops served by the SASA operated bus network in South Tyrol, Italy.
Goals
SASA is an operator of public transport in South Tyrol. SASA operates city bus lines in the cities Bolzano/Bozen and Merano/Meran, as well as some regional bus lines to the surrounding towns.
Recently, SASA published some of its data as “quasi open data” (CC-BY-NC) at opensasa.info. This includes list of bus stops for the lines they operate on. The data contains location, stop name, serviced lines and some information about facilities at the bus stop (benches, shelter).
We would like to use the list to complete OpenStreetMaps data about bus stops in this region. A special permission for importing this data into OpenStreetMap has already been arranged and confirmed.
Schedule
After several discussions, the import was approved and finally done on October 9, 2013.
Import Data
Background
SASA started its open-data website opensasa.info in early 2013. Shortly after that, the OSM community began to get interested in the data because of its richness and completeness. Unfortunately, because of the relatively restrictive original data license (CC-3.0-BY-SA-NC), we had to negotiate a special permission to import the data.
Data source site: http://opensasa.info/doku.php?id=de:haltestellen
Data license: Special permission to use the bus stop data for OpenStreetMap (data donation).[1]
Attribution: SASA SpA-AG | opensasa.info
Contact: open[at]sasabz[dot]it
ODbL Compliance verified: Yes
Description
The original bus-stops data set contains a large variety of fields, of which only a few are of interest for OSM: the (localized) names, available amenities at the stop (shelter, bench), a list of serviced bus routes and the reference number.
Comparison With OSM Data
The following table compares the opensasa.info dataset with the bus stops in OSM (that lie in a 100m buffer) as of 2013-10-01:
opensasa.info | OSM | |
---|---|---|
total | 888 | 376 |
named | 888 | 187 |
named and localized | 888 | 74 |
shelter | 307 | 67 |
bench | 108 | 21 |
shelter & bench | 0 | 19 |
Import Type
This is a manual one-time-import. JOSM will be used for checking, validation, conflation and upload of the data.
Data Preparation
Data Reduction & Simplification
Only data fields that contain meaningful properties of the bus stops will be imported.
Tagging Plans
The following tags are used for the imported bus stops:
OSM tag | Description |
---|---|
highway=bus_stop | |
operator=SASA | |
name=* | The name of the bus stop |
name:de=* | German name of bus stop |
name:it=* | Italian name of bus stop |
shelter=yes | only if the stop offers some kind of shelter |
bench=yes | only if the stop has benches[1] |
internal reference number of the stop given and used by SASA[2] | |
route_ref=* | list of bus lines that perform service on the respective stop |
[3] |
- ↑ unfortunately, the data set does only provide information about benches on bus stops without shelter
- ↑ it's probably best to not import this information, as it is hard to maintain by mappers and only of very limited use for data-consumers.
- ↑ having a source tag on each stop is probably not very useful, as the origin of the data is already visible in the changeset's tags.
Data Transformation
The necessary data transformations of the raw data is conducted in two steps:
- the two cvs-tables is imported into a temporary sqlite3 database
- a simple sql-query strips all unnecessary columns and does some data transformation (i.e. splitting the name into its language parts)
- the final conversion will be done by hand in JOSM
Special care will be taken on how we treat the multilingual bus stop names: The original data has only one name field that contains both the Italian and German names in the form "<Italian name> - <German name>". The respective localized names name:it=* and name:de=* are automatically extracted from this string. For name=* we will use the concatenated name "<Italian name> - <German name>" in cities and towns where Italian is dominant, and "<German name> - <Italian name>" will be used elsewhere (as outlined here). For bus stops with names that are the same in both languages, the name will be in the non-concatenated form.
Furthermore, as the original dataset isn't very consistent with capitalization of (Italian) names and the use of abbreviations (Str. instead of Straße, v.le instead of viale, etc.) there is a separate post-processing step: This makes the names harmonize better with the naming convention of nearby OSM objects (such as street names, etc.).
Data Transformation Results
A preview of the ready-to-be-merged-into-OSM data is found here: https://github.com/tyrasd/sasa-bus-stops/blob/master/sasa-bus-stops.geojson
Changeset Tags
We will use the following changeset tags:
- comment=Import of opensasa.info bus stops: …
- created_by=JOSM/version
- source=opensasa.info
- type=import
- url=http://wiki.openstreetmap.org/wiki/AltoAdige_-_Südtirol/SASA_Bus_Stops_Import
A dedicated user, SASA bus stops import was created for this import.
Data Merge Workflow
Team Approach
If any volunteers come by we can easily split the import over multiple shoulders. Otherwise I'll be doing it by myself.
References
This import has been announced on @talk-it-southtyrol on 2013-09-23, as a diary post on 2013-09-25 and on @imports on 2013-09-27.
Workflow & Conflation
An automated script filters out bus stops that are not in the vicinity of already existing stops. The used buffer size was 100m – samples showed that this is a safe limit. The resulting subset of stops can be uploaded right away. The rest has to be conflated manually. This was split by administrative boundaries (communes) and is going to be conflated manually with JOSM.
The resulting osm files can be found on Github.
Progress
file | #stops | import status |
---|---|---|
outside_buffer_100m.osm | 427 | imported – 18261329 (achavi, OSMLab) |
inside_buffer_100m.osm | 461 | not imported, see individual conflate_*.osm files |
conflate_Algund.osm | 16 | imported – 18265485 (achavi, OSMLab) |
conflate_Andrian.osm | 2 | imported – 18265554 (achavi, OSMLab) |
conflate_Bozen.osm | 186 | imported – 18261567 (achavi, OSMLab) |
conflate_Branzoll.osm | 8 | imported – 18265647 (achavi, OSMLab) |
conflate_Burgstall.osm | 11 | imported – 18265692 (achavi, OSMLab) |
conflate_Karneid.osm | 19 | imported – 18265778 (achavi, OSMLab) |
conflate_Kuens.osm | 3 | imported – 18265819 (achavi, OSMLab) |
conflate_Lana.osm | 6 | imported – 18265870 (achavi, OSMLab) |
conflate_Leifers.osm | 38 | imported – 18266028 (achavi, OSMLab) |
conflate_Marling.osm | 11 | imported – 18271642 (achavi, OSMLab) |
conflate_Meran.osm | 85 | imported – 18272316 (achavi, OSMLab) |
conflate_Nals.osm | 13 | imported – 18271781 (achavi, OSMLab) |
conflate_Pfatten.osm | 6 | imported – 18266088 (achavi, OSMLab) |
conflate_Riffian.osm | 1 | imported – 18271824 (achavi, OSMLab) |
conflate_Schenna.osm | 1 | imported – 18271824 (achavi, OSMLab) |
conflate_Terlan.osm | 16 | imported – 18271898 (achavi, OSMLab) |
conflate_Tirol.osm | 20 | imported – 18271975 (achavi, OSMLab) |
conflate_Tisens.osm | 5 | imported – 18272014 (achavi, OSMLab) |
conflate_Toell.osm | 13 | imported – 18272092 (achavi, OSMLab) |
conflate_Tscherms.osm | 6 | imported – 18272119 (achavi, OSMLab) |