Source code for egon.data.datasets.emobility.heavy_duty_transport.data_io
"""
Read data from DB and download.
"""
from pathlib import Path
from loguru import logger
import geopandas as gpd
import pandas as pd
from egon.data import config
from egon.data.db import select_geodataframe
DATASET_CFG = config.datasets()["mobility_hgv"]
WORKING_DIR = Path(".", "heavy_duty_transport").resolve()
TESTMODE_OFF = (
config.settings()["egon-data"]["--dataset-boundary"] == "Everything"
)
[docs]def get_data():
"""
Load all necessary data.
"""
return boundary_gdf(), bast_gdf(), nuts3_gdf()
[docs]def boundary_gdf():
"""
Get outer boundary from database.
"""
srid = DATASET_CFG["tables"]["srid"]
gdf = select_geodataframe(
"""
SELECT id, geometry FROM boundaries.vg250_lan
ORDER BY id
""",
geom_col="geometry",
index_col="id",
).to_crs(epsg=srid)
return gdf.dissolve()
[docs]def bast_gdf():
"""
Reads BAST data.
"""
sources = DATASET_CFG["original_data"]["sources"]
file = sources["BAST"]["file"]
path = WORKING_DIR / file
relevant_columns = sources["BAST"]["relevant_columns"]
df = pd.read_csv(
path,
delimiter=r",",
decimal=r",",
thousands=r".",
encoding="ISO-8859-1",
usecols=relevant_columns,
)
init_srid = sources["BAST"]["srid"]
final_srid = DATASET_CFG["tables"]["srid"]
gdf = gpd.GeoDataFrame(
df[relevant_columns[0]],
geometry=gpd.points_from_xy(
df[relevant_columns[1]],
df[relevant_columns[2]],
crs=f"EPSG:{init_srid}",
),
).to_crs(epsg=final_srid)
logger.debug("Read in BAST data.")
return gdf
[docs]def nuts3_gdf():
"""Read in NUTS3 geo shapes."""
srid = DATASET_CFG["tables"]["srid"]
sql = """
SELECT nuts as nuts3, geometry FROM boundaries.vg250_krs
WHERE gf = 4
ORDER BY nuts
"""
gdf = select_geodataframe(
sql, geom_col="geometry", index_col="nuts3"
).to_crs(epsg=srid)
gdf["area"] = gdf.geometry.area
logger.debug("Read in NUTS 3 districts.")
return gdf