File size: 2,202 Bytes
0399906
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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
#     )