improvements to loadgisdata
This commit is contained in:
@@ -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']
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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':
|
|
||||||
SPAIN = Country.objects.create(name=name,poly=geom_geos)
|
|
||||||
Country.objects.create(name=name,poly=geom_geos)
|
|
||||||
country_counter += 1
|
country_counter += 1
|
||||||
logging.info(f"Country instance created for: {name}")
|
logging.info(f"Country instance created for: {name}")
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"[{type(e)}] {str(e)}")
|
||||||
|
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.objects.create(name=name,poly=geom_geos, country=SPAIN)
|
|
||||||
region_counter += 1
|
region_counter += 1
|
||||||
logging.info(f"Region instance created for: {name}")
|
logging.info(f"Region instance created for: {name}")
|
||||||
|
except Exception as e:
|
||||||
|
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.objects.create(name=name,poly=geom_geos, country=SPAIN)
|
|
||||||
province_counter += 1
|
province_counter += 1
|
||||||
logging.info(f"Province instance created for: {name}")
|
logging.info(f"Province instance created for: {name}")
|
||||||
|
except Exception as e:
|
||||||
|
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}")
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user