improvements to loadgisdata

This commit is contained in:
Sam
2021-02-11 12:51:59 +00:00
parent 2de6a66af1
commit 20a4040aa7
3 changed files with 81 additions and 71 deletions

View File

@@ -32,8 +32,6 @@ class Command(BaseCommand):
for layer in ds: for layer in ds:
logging.info(f"Layer {layer.name}:\n\t- Layers: {len(layer)}\n\t- Type: {layer.geom_type.name}\n\t- Features: {layer.num_feat}") logging.info(f"Layer {layer.name}:\n\t- Layers: {len(layer)}\n\t- Type: {layer.geom_type.name}\n\t- Features: {layer.num_feat}")
# create country for spain
# country = Country.objects.create(name='España')
# country instances # country instances
logging.info("loading country instances") logging.info("loading country instances")
country_counter = 0 country_counter = 0
@@ -101,8 +99,8 @@ class Command(BaseCommand):
name = location['fields']['name'] name = location['fields']['name']
new_province = None new_province = None
for feature in ds[2]: for feature in ds[2]:
import ipdb; ipdb.set_trace() # import ipdb; ipdb.set_trace()
if feature.get('NAME_1') == name: if feature.get('NAME_2') == name:
logging.debug(f"Province {name} found in GADM data") logging.debug(f"Province {name} found in GADM data")
# calculate geometry data # calculate geometry data
geom = GEOSGeometry(str(feature.geom)) geom = GEOSGeometry(str(feature.geom))
@@ -111,7 +109,8 @@ class Command(BaseCommand):
polygon_list.append(polygon) polygon_list.append(polygon)
geom_geos = MultiPolygon(polygon_list) geom_geos = MultiPolygon(polygon_list)
# create instance # create instance
parent_region = Region.objects.get(id=location['fields']['region']) import ipdb; ipdb.set_trace()
parent_region = Region.objects.get(name=feature.get('NAME_1'))
new_province = Province.objects.create( new_province = Province.objects.create(
name=name, region=parent_region, geo=geom_geos, id=location['pk'] name=name, region=parent_region, geo=geom_geos, id=location['pk']
) )

View File

@@ -17,9 +17,12 @@ class Command(BaseCommand):
help = 'Load GIS data into database' help = 'Load GIS data into database'
def handle(self, *args, **kwargs): def handle(self, *args, **kwargs):
logging.info('Deleting all instances of Country, Region, Province, City')
print(self.help) City.objects.all().delete()
Province.objects.all().delete()
Region.objects.all().delete()
Country.objects.all().delete()
print('Deleted all instances of Country, Region, Province, City')
ds = DataSource('datasets/gadm36_ESP.gpkg') ds = DataSource('datasets/gadm36_ESP.gpkg')
@@ -31,86 +34,94 @@ class Command(BaseCommand):
# country instances # country instances
logging.info("loading country instances") logging.info("loading country instances")
print('Creating Country instances')
country_counter = 0 country_counter = 0
for feature in ds[0]: for feature in ds[0]:
geom = GEOSGeometry(str(feature['geometry'])) try:
if feature['geometry']['type'] == "MultiPolygon": # calculate geometry data
poly_list = [] geom = GEOSGeometry(str(feature.geom))
for poly in geom: polygon_list = []
poly_list.append(poly) for polygon in geom:
print(poly_list) polygon_list.append(polygon)
else: geom_geos = MultiPolygon(polygon_list)
poly_list = geom # create instance
name = feature.get('NAME_0')
geom_geos = MultiPolygon(poly_list) if name == 'Spain':
SPAIN = Country.objects.create(name='España',geo=geom_geos)
name = feature['properties']['NAME_1'] Country.objects.create(name=name,geo=geom_geos)
if name == 'España': country_counter += 1
SPAIN = Country.objects.create(name=name,poly=geom_geos) logging.info(f"Country instance created for: {name}")
Country.objects.create(name=name,poly=geom_geos) except Exception as e:
country_counter += 1 logging.error(f"[{type(e)}] {str(e)}")
logging.info(f"Country instance created for: {name}") import ipdb; ipdb.set_trace()
# region instances # region instances
logging.info("loading region instances") logging.info("loading region instances")
print('Creating Region instances')
region_counter = 0 region_counter = 0
for feature in ds[1]: for feature in ds[1]:
geom = GEOSGeometry(str(feature['geometry'])) try:
if feature['geometry']['type'] == "MultiPolygon": # calculate geometry data
poly_list = [] geom = GEOSGeometry(str(feature.geom))
for poly in geom: polygon_list = []
poly_list.append(poly) for polygon in geom:
print(poly_list) polygon_list.append(polygon)
else: geom_geos = MultiPolygon(polygon_list)
poly_list = geom # get region name
name = feature.get('NAME_1')
geom_geos = MultiPolygon(poly_list) # create instance
Region.objects.create(name=name, geo=geom_geos, country=SPAIN)
name = feature['properties']['NAME_1'] region_counter += 1
Region.objects.create(name=name,poly=geom_geos, country=SPAIN) logging.info(f"Region instance created for: {name}")
region_counter += 1 except Exception as e:
logging.info(f"Region instance created for: {name}") logging.error(f"[{type(e)}] {str(e)}")
import ipdb; ipdb.set_trace()
# province instances # province instances
logging.info("loading province instances") logging.info("loading province instances")
print('Creating Province instances')
province_counter = 0 province_counter = 0
for feature in ds[2]: for feature in ds[2]:
geom = GEOSGeometry(str(feature['geometry'])) try:
if feature['geometry']['type'] == "MultiPolygon": # calculate geometry data
poly_list = [] geom = GEOSGeometry(str(feature.geom))
for poly in geom: polygon_list = []
poly_list.append(poly) for polygon in geom:
print(poly_list) polygon_list.append(polygon)
else: geom_geos = MultiPolygon(polygon_list)
poly_list = geom # get name and parent
name = feature['properties']['NAME_2']
geom_geos = MultiPolygon(poly_list) parent_region = Region.objects.get(name=feature.get('NAME_1'))
# create instance
name = feature['properties']['NAME_1'] Province.objects.create(name=name, geo=geom_geos, region=parent_region)
parent_region = Region.objects.get(id=location['fields']['region']) province_counter += 1
Province.objects.create(name=name,poly=geom_geos, country=SPAIN) logging.info(f"Province instance created for: {name}")
province_counter += 1 except Exception as e:
logging.info(f"Province instance created for: {name}") logging.error(f"[{type(e)}] {str(e)}")
import ipdb; ipdb.set_trace()
# city instances # city instances
logging.info("loading city instances") logging.info("loading city instances")
print('Creating City instances')
city_counter = 0 city_counter = 0
for feature in ds[4]: for feature in ds[4]:
geom = GEOSGeometry(str(feature['geometry'])) try:
if feature['geometry']['type'] == "MultiPolygon": # calculate geometry data
poly_list = [] geom = GEOSGeometry(str(feature.geom))
for poly in geom: polygon_list = []
poly_list.append(poly) for polygon in geom:
print(poly_list) polygon_list.append(polygon)
else: geom_geos = MultiPolygon(polygon_list)
poly_list = geom
geom_geos = MultiPolygon(poly_list) # get name and parent
name = feature['properties']['NAME_3']
name = feature['properties']['NAME_1'] parent_province = Region.objects.get(name=feature.get('NAME_2'))
City.objects.create(name=name,poly=geom_geos, country=SPAIN) City.objects.create(name=name, geo=geom_geos, province=parent_province)
city_counter += 1 city_counter += 1
logging.debug(f"City instance created for: {name}") logging.debug(f"City instance created for: {name}")
except Exception as e:
logging.error(f"[{type(e)}] {str(e)}")
import ipdb; ipdb.set_trace()
logging.info(f"Country instances created: {country_counter}") logging.info(f"Country instances created: {country_counter}")
logging.info(f"Region instances created: {region_counter}") logging.info(f"Region instances created: {region_counter}")

View File

@@ -3920,7 +3920,7 @@
"GID_0": "ESP", "GID_0": "ESP",
"NAME_0": "Spain", "NAME_0": "Spain",
"GID_1": "ESP.17_1", "GID_1": "ESP.17_1",
"NAME_1": "Asturias", "NAME_1": "Principado de Asturias",
"VARNAME_1": "Ast\u00farias|Asturie|Asturien|Asturies|Ast\u00faries|Asturias", "VARNAME_1": "Ast\u00farias|Asturie|Asturien|Asturies|Ast\u00faries|Asturias",
"NL_NAME_1": "", "NL_NAME_1": "",
"TYPE_1": "Comunidad Aut\u00f3noma", "TYPE_1": "Comunidad Aut\u00f3noma",