构建暴雨灾害链和地震灾害链DBN模型
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user