File size: 5,125 Bytes
1dc1f73
 
 
 
 
 
 
a5a279f
 
1dc1f73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
775ff71
 
 
 
 
1dc1f73
 
 
 
0d035ae
1dc1f73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3dae0f4
1dc1f73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import pandas as pd
import numpy as np
import geopandas as gpd

import requests

#url = "https://Projects-by-IF-model-temp-api-v2.hf.space/model-effect"
url = "https://digmmuni-protoai-api.hf.space/model-effect"
#url = "http://model-temp-api-v2:7860/model-effect"
headers = {"Content-Type": "application/json"}

cell_area = 100*100 #in square meters

def make_XYT(df, treatment_col = 'Pct_CoberturaVeg', target_col = 'LST'):
    
    Y = df[target_col].values

    T = df[treatment_col].values

    X = df.drop(columns=[treatment_col, target_col]).values
    
    
    return X, Y, T
    
def prepare_data(og_file):
    original_df = pd.read_csv(og_file, index_col=0)
    # df = pd.read_csv(training_file, index_col=0)

    original_df = original_df.round(2)
    
    df = original_df[['Elevacion', 'Neighbor_NDBI', 'Proximidad_agua',
       'Neighbor_%CoberturaVeg', 'Pct_CoberturaVeg', 'LST']].copy()
    df = df.astype(np.float32)

    X, Y, T = make_XYT(df)
    
    return original_df, df, X, Y, T


def prepare_treatment_df(original_df, df):
    treatment_df = original_df[['x','y','Pct_CoberturaVeg']].copy()
    treatment_df.loc[:, 'Pct_Construccion'] = original_df['Pct_Construccion'].values
    treatment_df.loc[:, 'LST'] = df['LST'].values
    
    treatment_df = treatment_df.reset_index()
    return treatment_df


def run_treatment_increase(X, T, original_df, df, value, name, simulation_mode):
    
    treatment_df = prepare_treatment_df(original_df, df)

    if simulation_mode == "Usar control deslizante":
        T_sim = T.copy()  
        value_num = 1+ (value/100)
        T_sim = T_sim*value_num
    else:
        if 'simulacion_arboles' in original_df.columns:
            T_sim = original_df['simulacion_arboles']
        else:
            print("⚠️ Columna 'simulacion_arboles' no encontrada. Usando valores originales de T.")
            T_sim = T.copy()
    data = {"X": X.tolist(), "T0":T.tolist(), "T1":(T_sim).tolist()}
    response = requests.post(url, headers=headers, json=data)
    if response.ok:
        result = response.json()
       # print("Model response:", result["effect"])
    else:
        print("Request failed:", response.status_code, response.text)
    
    treatment_df[name] = result["effect"]
    treatment_df['pct_total_trees'] = T_sim
    treatment_df['pp_trees_increase'] = treatment_df['pct_total_trees'] - treatment_df['Pct_CoberturaVeg']

    return treatment_df

def process_data_trees_to_temp(value, simulation_mode, original_df, df, X, Y, T):
    name = 'temp_decrease'
    treatment_df = run_treatment_increase(X, T, original_df, df, value, name, simulation_mode)

    treatment_df['new_temp'] = treatment_df['LST'] + treatment_df[name]

    #add columns translated to square meters
    treatment_df['sqm_trees_increase'] = (treatment_df['pp_trees_increase']/100)*cell_area
    treatment_df['sqm_total_trees'] = (treatment_df['pct_total_trees']/100)*cell_area

    col_order = ['index', 'x', 'y', 'Pct_CoberturaVeg', 'Pct_Construccion','LST','temp_decrease',
    'new_temp', 'pp_trees_increase','pct_total_trees', 'sqm_trees_increase','sqm_total_trees',]  # to match gdf trees

    treatment_df = treatment_df[col_order]

    gdf = gpd.GeoDataFrame(treatment_df, geometry=gpd.points_from_xy(treatment_df.x, treatment_df.y))

    return gdf


def run_temp_decrease(X, original_df, df, goal, name,simulation_mode):
    
    treatment_df = prepare_treatment_df(original_df, df)
    data = {"X": X.tolist()}
    response = requests.post(url, headers=headers, json=data)
    if response.ok:
        result = response.json()
        # print("Model response:", result["effect"])
    else:
        print("Request failed:", response.status_code, response.text)
    
    if simulation_mode == "Usar control deslizante":
        treatment_df['temp_decrease'] = -goal
        treatment_df['new_temp'] = treatment_df['LST'] + treatment_df['temp_decrease']
    else:
        treatment_df['new_temp'] = original_df['simulacion_temp']
        treatment_df['temp_decrease'] = treatment_df['new_temp'] - treatment_df['LST']
    
    treatment_effects = np.array(result["effect"])
    treatment_df[name] = treatment_df['temp_decrease'] / treatment_effects

    return treatment_df
    
def process_data_temp_to_trees(goal, simulation_mode, original_df, df, X, Y, T):
    name = 'pp_trees_increase'
    treatment_df = run_temp_decrease(X, original_df, df, goal, name,simulation_mode)

    treatment_df['pct_total_trees'] = treatment_df['Pct_CoberturaVeg'] + treatment_df[name]

    #add columns translated to square meters
    treatment_df['sqm_total_trees'] = (treatment_df['pct_total_trees']/100)*cell_area
    treatment_df['sqm_trees_increase'] = (treatment_df['pp_trees_increase']/100)*cell_area

    col_order = ['index', 'x', 'y', 'Pct_CoberturaVeg','Pct_Construccion','LST','temp_decrease',
    'new_temp', 'pp_trees_increase','pct_total_trees', 'sqm_trees_increase','sqm_total_trees',]  # to match gdf trees

    treatment_df = treatment_df[col_order]

    gdf = gpd.GeoDataFrame(treatment_df, geometry=gpd.points_from_xy(treatment_df.x, treatment_df.y))

    return gdf