构建暴雨灾害链和地震灾害链DBN模型

This commit is contained in:
wzy-warehouse
2026-06-05 16:10:46 +08:00
parent c9cd96cca2
commit 844fa7d719
15 changed files with 3055 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
"""
空间计算工具模块
提供纯数学计算功能(不涉及数据库查询)
"""
import math
from typing import Tuple
class SpatialUtils:
"""空间计算工具类 - 纯数学计算"""
EARTH_RADIUS = 6371000 # 地球半径(米)
@staticmethod
def haversine_distance(lon1: float, lat1: float, lon2: float, lat2: float) -> float:
"""
使用Haversine公式计算两点间的球面距离
Args:
lon1: 点1经度
lat1: 点1纬度
lon2: 点2经度
lat2: 点2纬度
Returns:
距离(米)
"""
lon1, lat1, lon2, lat2 = map(math.radians, [lon1, lat1, lon2, lat2])
dlon = lon2 - lon1
dlat = lat2 - lat1
a = math.sin(dlat / 2) ** 2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon / 2) ** 2
c = 2 * math.asin(math.sqrt(a))
distance = SpatialUtils.EARTH_RADIUS * c
return distance
@staticmethod
def calculate_buffer_area(radius: float) -> float:
"""
计算缓冲区面积
Args:
radius: 半径(米)
Returns:
面积(平方米)
"""
return math.pi * radius ** 2
@staticmethod
def calculate_density(total_length: float, area: float) -> float:
"""
计算密度(长度/面积)
Args:
total_length: 总长度(米)
area: 面积(平方米)
Returns:
密度(m/m²)
"""
if area <= 0:
return 0.0
return total_length / area
# 创建全局实例
spatial_utils = SpatialUtils()