File size: 1,802 Bytes
0e880ac
 
2dca1ab
0e880ac
 
2dca1ab
 
 
 
 
 
0e880ac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2dca1ab
 
0e880ac
2dca1ab
 
 
 
 
 
0e880ac
 
 
2dca1ab
 
 
0e880ac
 
2dca1ab
0e880ac
 
2dca1ab
0e880ac
 
2dca1ab
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
import os
import numpy as np
from flask import Flask, request, jsonify
import rasterio
from rasterio.fill import fillnodata
from sklearn.preprocessing import StandardScaler

app = Flask(__name__)

time_steps_image = 4
target_img_size = (224, 224)

def preprocess_dem(dem_path):
    with rasterio.open(dem_path) as src:
        dem_data = src.read(1)
        filled_dem = fillnodata(dem_data, mask=src.read_masks(1))

        processed_dem_path = "processed_dem.tif"
        with rasterio.open(
            processed_dem_path, "w", **src.meta
        ) as dest:
            dest.write(filled_dem, 1)

    return processed_dem_path

def simulate_flood(dem_path, lake_elevation, output_path):
    with rasterio.open(dem_path) as src:
        dem_data = src.read(1)
        meta = src.meta

    flood_map = np.where(dem_data <= lake_elevation, 1, 0)

    with rasterio.open(output_path, "w", **meta) as dest:
        dest.write(flood_map.astype(rasterio.uint8), 1)

    return output_path

@app.route('/predict_flood', methods=['POST'])
def predict_flood():
    try:
        dem_file = request.files['dem']
        lake_elevation = float(request.form['lake_elevation'])

        dem_path = os.path.join("uploads", "input_dem.tif")
        os.makedirs("uploads", exist_ok=True)
        dem_file.save(dem_path)

        processed_dem_path = preprocess_dem(dem_path)

        output_dir = "outputs"
        os.makedirs(output_dir, exist_ok=True)
        flood_map_path = os.path.join(output_dir, "flood_map.tif")
        simulate_flood(processed_dem_path, lake_elevation, flood_map_path)

        return jsonify({"message": "Flood map generated", "flood_map_path": flood_map_path})

    except Exception as e:
        return jsonify({"error": str(e)}), 500

if __name__ == "__main__":
    app.run(debug=True)