修改降雨逻辑

This commit is contained in:
wzy-warehouse
2026-05-06 13:07:58 +08:00
parent 5b04de9e7c
commit fe7614b99e
4 changed files with 341 additions and 94 deletions
+25 -10
View File
@@ -34,7 +34,7 @@ async def get_rainfall_grid(request: RainfallGridRequest):
返回适合Cesium渲染的GeoJSON格式数据。
Args:
request: 包含时间分辨率的请求
request: 包含时间分辨率和持续时间的请求
Returns:
GeoJSON格式的栅格数据
@@ -44,10 +44,15 @@ async def get_rainfall_grid(request: RainfallGridRequest):
now = datetime.now()
query_time = datetime.fromisoformat(request.time) if request.time else now
# 调用服务层生成栅格(自动查询前12小时数据)
# 验证duration参数
if request.duration not in [12, 24]:
raise ValueError("duration参数必须为12或24")
# 调用服务层生成栅格(自动查询前12小时或24小时数据)
geojson_data = rainfall_service.generate_rainfall_grid(
query_time=query_time,
resolution=request.resolution
resolution=request.resolution,
duration=request.duration
)
if not geojson_data:
@@ -75,13 +80,15 @@ async def get_rainfall_grid(request: RainfallGridRequest):
@router.get("/stations", response_model=StationsResponse, summary="获取雨量站点数据")
async def get_rainfall_stations(
time: str = Query(..., description="查询时间 ISO格式(自动查询前12小时数据)")
time: str = Query(..., description="查询时间 ISO格式(自动查询前12小时或24小时数据)"),
duration: int = Query(12, description="持续时间(小时),可选12或24", ge=12, le=24)
):
"""
获取指定时间的雨量站点原始数据
Args:
time: 查询时间
duration: 持续时间(12或24小时)
Returns:
站点列表,包含经纬度和降雨量
@@ -89,9 +96,10 @@ async def get_rainfall_stations(
try:
query_time = datetime.fromisoformat(time)
# 调用服务层获取站点数据(自动查询前12小时数据)
# 调用服务层获取站点数据(自动查询前12小时或24小时数据)
stations = rainfall_service.get_stations_data(
query_time=query_time
query_time=query_time,
duration=duration
)
return StationsResponse(
@@ -112,7 +120,8 @@ async def get_rainfall_stations(
async def get_rainfall_at_point(
longitude: float,
latitude: float,
time: Optional[str] = None
time: Optional[str] = None,
duration: int = Query(12, description="持续时间(小时),可选12或24", ge=12, le=24)
):
"""
查询指定经纬度位置的降雨量
@@ -120,7 +129,8 @@ async def get_rainfall_at_point(
Args:
longitude: 经度
latitude: 纬度
time: 查询时间(可选,默认当前时间,自动查询前12小时数据)
time: 查询时间(可选,默认当前时间,自动查询前12小时或24小时数据)
duration: 持续时间(12或24小时)
Returns:
该点位的降雨量信息
@@ -132,12 +142,17 @@ async def get_rainfall_at_point(
now = datetime.now()
query_time = datetime.fromisoformat(time) if time else now
# 调用服务层查询(自动查询前12小时数据)
# 验证duration参数
if duration not in [12, 24]:
raise ValueError("duration参数必须为12或24")
# 调用服务层查询(自动查询前12小时或24小时数据)
service = RainfallService()
rainfall_info = service.get_rainfall_at_point(
longitude=longitude,
latitude=latitude,
query_time=query_time
query_time=query_time,
duration=duration
)
if not rainfall_info: