public_library_map/merge_to_topo.py
Hugh Rundle 23aee37ca8 normalise service names
- titlecase all library service short names in csv file
- rename `short_name` to `name` in csv
- replace merge_service_data.py with merge_to_topo.py in preparation to resolve #18 and #34

NEW WORKFLOW if changing boundary shapes

- update boundaries.geojson if needed
- geo2topo -q 12000
- THEN run merge_to_topo.py (i.e. we merge the topoJSON not the geoJSON)

NEW WORKFLOW if changing service data

- merge pull request containing changes to library_services_information.csv
- run Action which runs merge_to_topo and then updates main HEAD topofile
2021-01-26 14:37:22 +11:00

31 lines
1.1 KiB
Python

#!/usr/bin/env python3
import csv
import json
# files to merge
csv_file = 'website/data/library_services_information.csv'
topojson_file = 'website/data/boundaries.topo.json'
geo = open(topojson_file, 'r') # open the topo.json file
json_data = json.loads(geo.read()) # read the file and load into a dict
# for each feature, if the name in the json matches the name in the csv, add new properties to the json
for feature in json_data['objects']['boundaries']['geometries']:
with open(csv_file, newline='') as f:
# use DictReader so we can use the header names
reader = csv.DictReader(f)
for row in reader:
# look for match
if row['name'] == feature['properties']['name']:
# create new properties in topojson
for k in row:
if k != "long_name" and k != "": # ignore long_name and any blank column names
feature['properties'][k] = row[k]
f.close() # close csv
geo.close() # close geo and flush
# open topojson file again and overwrite it
with open(topojson_file, 'w') as newfile:
json.dump(json_data, newfile, separators=(',', ':'))
newfile.close()