mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-06-02 04:20:34 -04:00
add local authority to county mapping
map lower tier local authorities (districts within rural counties) to upper tier local authorities (administrative counties) using the new ctyua19 dataset. nb: unitary authorities (eg: Southwark) are both lower tier AND upper tier. For this first pass they turn up twice in the db, eg Southwark is in there as `lad20-E09000028` and `ctyua19-E09000028`. For now, the electoral wards within Southwark are mapped to the pre-existing `lad20-E09000028`. Both lad20 and ctyua19 have data sets in broadcast_area_features.
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import csv
|
||||
from copy import deepcopy
|
||||
from pathlib import Path
|
||||
|
||||
import geojson
|
||||
@@ -94,6 +96,15 @@ wards_filepath = source_files_path / "Electoral Wards May 2020.geojson"
|
||||
# http://geoportal.statistics.gov.uk/datasets/ward-to-westminster-parliamentary-constituency-to-local-authority-district-december-2019-lookup-in-the-united-kingdom/data
|
||||
las_filepath = source_files_path / "Electoral Wards and Local Authorities 2020.geojson"
|
||||
|
||||
# https://geoportal.statistics.gov.uk/datasets/counties-and-unitary-authorities-december-2019-boundaries-uk-bgc
|
||||
ctyua_filepath = source_files_path / "Counties_and_Unitary_Authorities__December_2019__Boundaries_UK_BGC.geojson"
|
||||
|
||||
# https://geoportal.statistics.gov.uk/datasets/lower-tier-local-authority-to-upper-tier-local-authority-december-2019-lookup-in-england-and-wales?where=LTLA19CD%20%3D%20%27E06000045%27
|
||||
ltla_utla_map_filepath = source_files_path / "Lower_Tier_Local_Authority_to_Upper_Tier_Local_Authority__December_2019__Lookup_in_England_and_Wales.csv" # noqa: E501
|
||||
|
||||
# http://geoportal.statistics.gov.uk/datasets/local-authority-districts-may-2020-boundaries-uk-bgc
|
||||
las_filepath = source_files_path / "Local Authorities May 2020.geojson"
|
||||
|
||||
ward_code_to_la_mapping = {
|
||||
f["properties"]["WD19CD"]: f["properties"]["LAD19NM"]
|
||||
for f in geojson.loads(las_filepath.read_text())["features"]
|
||||
@@ -103,9 +114,17 @@ ward_code_to_la_id_mapping = {
|
||||
for f in geojson.loads(las_filepath.read_text())["features"]
|
||||
}
|
||||
|
||||
|
||||
# the mapping dict is empty for lower tier local authorities that are also upper tier (unitary authorities, etc)
|
||||
ltla_utla_mapping_csv = csv.DictReader(ltla_utla_map_filepath.open())
|
||||
la_code_to_cty_id_mapping = {
|
||||
row['LTLA19CD']: row['UTLA19CD'] for row in ltla_utla_mapping_csv if row['LTLA19CD'] != row['UTLA19CD']
|
||||
}
|
||||
|
||||
|
||||
dataset_name = "Local authorities"
|
||||
dataset_name_singular = "local authority"
|
||||
dataset_id = "wd20-lad20"
|
||||
dataset_id = "wd20-lad20-ctyua19"
|
||||
repo.insert_broadcast_area_library(
|
||||
dataset_id,
|
||||
name=dataset_name,
|
||||
@@ -113,6 +132,9 @@ repo.insert_broadcast_area_library(
|
||||
is_group=True,
|
||||
)
|
||||
|
||||
|
||||
# electoral wards
|
||||
|
||||
areas_to_add = []
|
||||
|
||||
for f in geojson.loads(wards_filepath.read_text())["features"]:
|
||||
@@ -141,9 +163,11 @@ for f in geojson.loads(wards_filepath.read_text())["features"]:
|
||||
print("Skipping", ward_code, ward_name) # noqa: T001
|
||||
|
||||
repo.insert_broadcast_areas(areas_to_add)
|
||||
areas_to_add = []
|
||||
|
||||
las_filepath = source_files_path / "Local Authorities May 2020.geojson"
|
||||
|
||||
# local authorities
|
||||
|
||||
areas_to_add = []
|
||||
|
||||
for feature in geojson.loads(las_filepath.read_text())["features"]:
|
||||
la_id = feature["properties"]["lad20cd"]
|
||||
@@ -158,6 +182,35 @@ for feature in geojson.loads(las_filepath.read_text())["features"]:
|
||||
polygons_and_simplified_polygons(feature["geometry"])
|
||||
)
|
||||
|
||||
ctyua_id = la_code_to_cty_id_mapping.get(la_id)
|
||||
if ctyua_id:
|
||||
print(f'{group_id} {group_name} is part of {ctyua_id}') # noqa: T001
|
||||
areas_to_add.append([
|
||||
group_id,
|
||||
group_name,
|
||||
dataset_id,
|
||||
'ctyua19-' + ctyua_id if ctyua_id else None,
|
||||
feature,
|
||||
simple_feature
|
||||
])
|
||||
repo.insert_broadcast_areas(areas_to_add)
|
||||
|
||||
|
||||
# counties and unitary authorities
|
||||
|
||||
areas_to_add = []
|
||||
for feature in geojson.loads(ctyua_filepath.read_text())['features']:
|
||||
ctyua_id = feature["properties"]["ctyua19cd"]
|
||||
group_name = feature["properties"]["ctyua19nm"]
|
||||
|
||||
print('County/Unitary Authority', group_name) # noqa: T001
|
||||
|
||||
group_id = "ctyua19-" + ctyua_id
|
||||
|
||||
feature, simple_feature = (
|
||||
polygons_and_simplified_polygons(feature["geometry"])
|
||||
)
|
||||
|
||||
areas_to_add.append([
|
||||
group_id, group_name,
|
||||
dataset_id, None,
|
||||
|
||||
Reference in New Issue
Block a user