forked from DanteLore/national-rail
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathloadstations.py
45 lines (32 loc) · 1.38 KB
/
loadstations.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import argparse
from osgb import osgb_to_lonlat
from osgb.convert import eastnorth_to_osgb
from utils.database import insert_into_db, empty_table, execute_sql
# Loads data from here: https://data.gov.uk/dataset/naptan
def read_stations(filename):
with open(filename, 'r') as input_file:
for line in input_file.readlines()[1:]:
splits = line.strip().split(",")
yield {
"crs": splits[2],
"name": splits[3],
"easting": long(splits[6]),
"northing": long(splits[7])
}
def convert(row):
e = row["easting"]
n = row["northing"]
lon, lat = osgb_to_lonlat(eastnorth_to_osgb(e, n, digits=4))
row["latitude"] = lat
row["longitude"] = lon
return row
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='National Rail Data Collector')
parser.add_argument('--filename', help='Input CSV file', default="data/RailReferences.csv")
parser.add_argument('--db', help='SQLite DB Name', default="data/trains.db")
args = parser.parse_args()
execute_sql(args.db, "create table if not exists stations (crs TEXT, name TEXT, easting INT, northing INT, latitude DOUBLE, longitude DOUBLE);")
rows = read_stations(args.filename)
stations = map(convert, rows)
empty_table(args.db, "stations")
insert_into_db(args.db, "stations", stations)