import os import pandas as pd import geopandas as gpd import glob def get_data_path(): # Ermittelt immer den absoluten Pfad zum "Data"-Ordner (relativ zum Projektroot) return os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'data')) def load_heatingsystem_csv(filename): data_path = get_data_path() csv_path = os.path.join(data_path, filename) return pd.read_csv(csv_path, delimiter=';') def load_scenario_table(): data_path = get_data_path() csv_path = os.path.join(data_path, 'Szenario-Input.csv') df = pd.read_csv(csv_path, delimiter=';', encoding='latin1', skip_blank_lines=True) # Nur Zeilen, bei denen mindestens eine Szenario-Spalte belegt ist scenario_cols = [col for col in df.columns if col.startswith("Szenario_")] df = df.dropna(subset=scenario_cols, how="all") return df def load_data_from_parquet(parquet_dir, bbox_geom, columns): parts = [] files = glob.glob(os.path.join(parquet_dir, "*.parquet")) for f in files: gdf = gpd.read_parquet(f, columns=columns) # Filter nach Bounding Box! gdf = gdf[gdf.geometry.intersects(bbox_geom)] parts.append(gdf) if parts: return gpd.GeoDataFrame(pd.concat(parts, ignore_index=True), crs=parts[0].crs) else: return gpd.GeoDataFrame(columns=columns) def load_data(_bbox_geom): cols = [ "Fest_ID", "Strasse", "HAUSNR", "HAUSNR_Zusatz", "GEBAEUDETYP", "NF", "RW_WW", "JAZ_Luft", "geometry" ] parquet_dir = "LANUK_Daten" return load_data_from_parquet( parquet_dir=parquet_dir, bbox_geom=_bbox_geom, columns=cols ) # def load_data(_bbox_geom): # cols = [ # "Fest_ID", "beheizt", "Strasse", "HAUSNR", "HAUSNR_Zusatz", "GEBAEUDETYP", "sanierungsstand", # "NF", "RW_WW", "JAZ_Luft", "San_Jahr", "San_Niveau", "San_Tiefe", "geometry" # ] # return gpd.read_file( # "Warmebedarf_NRW.gdb", # layer="Raumwaermebedarf_ist", # engine="pyogrio", # use_arrow=True, # columns=cols, # bbox=_bbox_geom # )