Source code for egon.data.datasets.vg250_mv_grid_districts
"""The module containing all code to map MV grid districts to federal states.
"""
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
import geopandas as gpd
import pandas as pd
from egon.data import config, db
Base = declarative_base()
from egon.data.datasets import Dataset
[docs]class Vg250MvGridDistricts(Dataset):
"""
Maps MV grid districts to federal states and writes it to database.
*Dependencies*
* :py:class:`Vg250 <egon.data.datasets.vg250.Vg250>`
* :py:class:`MvGridDistricts <egon.data.datasets.mv_grid_districts.mv_grid_districts_setup>`
*Resulting tables*
* :py:class:`boundaries.egon_map_mvgriddistrict_vg250 <MapMvgriddistrictsVg250>`
is created and filled
"""
#:
name: str = "Vg250MvGridDistricts"
#:
version: str = "0.0.1"
def __init__(self, dependencies):
super().__init__(
name=self.name,
version=self.version,
dependencies=dependencies,
tasks=(mapping),
)
[docs]class MapMvgriddistrictsVg250(Base):
"""
Class definition of table boundaries.egon_map_mvgriddistrict_vg250.
"""
__tablename__ = "egon_map_mvgriddistrict_vg250"
__table_args__ = {"schema": "boundaries"}
bus_id = Column(Integer, primary_key=True)
vg250_lan = Column(String)
[docs]def create_tables():
"""
Create table for mapping grid districts to federal states.
"""
db.execute_sql("CREATE SCHEMA IF NOT EXISTS boundaries;")
engine = db.engine()
MapMvgriddistrictsVg250.__table__.drop(bind=engine, checkfirst=True)
MapMvgriddistrictsVg250.__table__.create(bind=engine, checkfirst=True)
[docs]def mapping():
"""
Map MV grid districts to federal states and write to database.
Newly creates and fills table boundaries.egon_map_mvgriddistrict_vg250.
"""
# Create table
create_tables()
# Select sources and targets from dataset configuration
sources = config.datasets()["map_mvgrid_vg250"]["sources"]
target = config.datasets()["map_mvgrid_vg250"]["targets"]["map"]
# Delete existing data
db.execute_sql(f"DELETE FROM {target['schema']}.{target['table']}")
# Select sources from database
mv_grid_districts = db.select_geodataframe(
f"""
SELECT bus_id as bus_id, ST_Centroid(geom) as geom
FROM {sources['egon_mv_grid_district']['schema']}.
{sources['egon_mv_grid_district']['table']}
""",
index_col="bus_id",
)
federal_states = db.select_geodataframe(
f"""
SELECT gen,geometry
FROM {sources['federal_states']['schema']}.
{sources['federal_states']['table']}
""",
geom_col="geometry",
index_col="gen",
)
# Join mv grid districts and federal states
df = pd.DataFrame(
gpd.sjoin(mv_grid_districts, federal_states)["index_right"]
)
# Rename columns
df.rename({"index_right": "vg250_lan"}, axis=1, inplace=True)
# Insert to database
df.to_sql(
target["table"],
schema=target["schema"],
if_exists="append",
con=db.engine(),
)