# -*-coding:utf-8-*- import os import json from flask import Flask, request, make_response, jsonify from logzero import logger current_path = os.path.dirname(os.path.abspath(__file__)) # for local wind_product_path = f"{current_path}/wind/wind_product.xlsx" # current_path = "/app" # for docker logger.info(f"{current_path}") app = Flask(__name__) from pv.eva_pv import calculate_pv_potential, get_slope_from_api from wind.wind_total import wind_farm_analysis terrain_config = { "耕地": 1.1, "裸地": 1.1, "草地": 1.2, "灌木": 1.4, "湿地": 1.65, "林地": 1.65, "建筑": 1.35, "水域": 1.35 } @app.route('/pv_power/', methods=["POST"]) def get_pv_potential(): resp_info = dict() if request.method == "POST": logger.info(request.get_json()) latitude = request.json.get('latitude') longitude = request.json.get('longitude') available_area_sq_km = float(request.json.get('available_area_sq_km')) pv_type = request.json.get('pv_type') terrain_type = request.json.get('terrain_type') component_name = request.json.get('component_name') electricity_price = float(request.json.get('electricity_price')) terrain_complexity = terrain_config.get(terrain_type) try: # 通过 API 获取坡度 slope_deg = get_slope_from_api(latitude, longitude) logger.info(f"使用参数:坡度={slope_deg:.2f}°,地形复杂性因子={terrain_complexity}") pv_potential = calculate_pv_potential( available_area_sq_km=available_area_sq_km, component_name=component_name, longitude=longitude, latitude=latitude, slope_deg=slope_deg, terrain_complexity=terrain_complexity, pv_type=pv_type, terrain_type=terrain_type, electricity_price=electricity_price ) resp_info["code"] = 200 resp_info["data"] = pv_potential except Exception as e: logger.info(e) resp_info["code"] = 406 resp_info["data"] = str(e) resp = make_response(json.dumps(resp_info)) resp.status_code = 200 return resp @app.route('/wind_power/', methods=["POST"]) def get_wind_potential(): resp_info = dict() if request.method == "POST": area_km2 = float(request.json.get('available_area_sq_km')) device_name = request.json.get('component_name') electricity_price = float(request.json.get('electricity_price')) v_avg = float(request.json.get("velocity_avg")) t_avg = float(request.json.get("temp_avg")) try: wind_potential = wind_farm_analysis( device_name=device_name, area_km2=area_km2, electricity_price=electricity_price, file_path=wind_product_path, velocity_avg=v_avg, T_avg=t_avg ) resp_info["code"] = 200 resp_info["data"] = wind_potential except Exception as e: logger.info(e) resp_info["code"] = 406 resp_info["data"] = str(e) resp = make_response(json.dumps(resp_info)) resp.status_code = 200 return resp if __name__ == '__main__': app.run(port=12123, host="0.0.0.0", debug=False)