修改错误的日志调用
This commit is contained in:
parent
e6e1965289
commit
c7e16eed9c
@ -201,7 +201,7 @@ def get_aircraft_route_params():
|
||||
"data": None
|
||||
}), 404
|
||||
|
||||
logging.info(f"进港路由参数查询: flightNo={flight_no}, params={route_params}")
|
||||
logger.info(f"进港路由参数查询: flightNo={flight_no}, params={route_params}")
|
||||
return jsonify({
|
||||
"status": 200,
|
||||
"msg": "进港路由参数查询成功",
|
||||
@ -225,7 +225,7 @@ def get_aircraft_route_params():
|
||||
"data": None
|
||||
}), 404
|
||||
|
||||
logging.info(f"出港路由参数查询: flightNo={flight_no}, params={route_params}")
|
||||
logger.info(f"出港路由参数查询: flightNo={flight_no}, params={route_params}")
|
||||
return jsonify({
|
||||
"status": 200,
|
||||
"msg": "出港路由参数查询成功",
|
||||
@ -1069,11 +1069,11 @@ def convert_route_to_cgcs2000(route_data: dict) -> dict:
|
||||
try:
|
||||
# 检查当前坐标系类型
|
||||
current_coordinate_system = route_data.get("coordinateSystem", "WGS84")
|
||||
logging.info(f"转换路由数据坐标系: 当前={current_coordinate_system} -> 目标=CGCS2000")
|
||||
logger.info(f"转换路由数据坐标系: 当前={current_coordinate_system} -> 目标=CGCS2000")
|
||||
|
||||
# 如果已经是CGCS2000坐标系,直接返回
|
||||
if current_coordinate_system == "CGCS2000":
|
||||
logging.info("路由数据已经是CGCS2000坐标系,无需转换")
|
||||
logger.info("路由数据已经是CGCS2000坐标系,无需转换")
|
||||
return converted_route
|
||||
|
||||
# 如果是WGS84坐标系,需要转换为CGCS2000
|
||||
@ -1081,7 +1081,7 @@ def convert_route_to_cgcs2000(route_data: dict) -> dict:
|
||||
geo_path = converted_route.get("geoPath", {})
|
||||
features = geo_path.get("features", [])
|
||||
|
||||
logging.info(f"开始转换WGS84坐标到CGCS2000,共有 {len(features)} 个feature")
|
||||
logger.info(f"开始转换WGS84坐标到CGCS2000,共有 {len(features)} 个feature")
|
||||
|
||||
for feature in features:
|
||||
geometry = feature.get("geometry", {})
|
||||
@ -1099,7 +1099,7 @@ def convert_route_to_cgcs2000(route_data: dict) -> dict:
|
||||
x, y = coordinate_system.wgs84_to_cgcs2000(latitude, longitude)
|
||||
converted_coordinates.append([x, y])
|
||||
|
||||
logging.debug(f"WGS84坐标转换: lon={longitude}, lat={latitude} -> CGCS2000: x={x}, y={y}")
|
||||
logger.debug(f"WGS84坐标转换: lon={longitude}, lat={latitude} -> CGCS2000: x={x}, y={y}")
|
||||
|
||||
# 更新坐标数据
|
||||
geometry["coordinates"] = converted_coordinates
|
||||
@ -1107,12 +1107,12 @@ def convert_route_to_cgcs2000(route_data: dict) -> dict:
|
||||
# 更新坐标系标识
|
||||
converted_route["coordinateSystem"] = "CGCS2000"
|
||||
|
||||
logging.info(f"WGS84到CGCS2000坐标转换完成,共转换 {len(features)} 个feature")
|
||||
logger.info(f"WGS84到CGCS2000坐标转换完成,共转换 {len(features)} 个feature")
|
||||
|
||||
return converted_route
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"路由数据坐标转换失败: {str(e)}")
|
||||
logger.error(f"路由数据坐标转换失败: {str(e)}")
|
||||
# 转换失败时返回原始数据,但确保坐标系标识为CGCS2000
|
||||
converted_route["coordinateSystem"] = "CGCS2000"
|
||||
return converted_route
|
||||
@ -1135,9 +1135,9 @@ def merge_discontinuous_route_for_flight(route_data: dict, flight_no: str) -> di
|
||||
codes_str = route_data.get("codes", "")
|
||||
if codes_str:
|
||||
code_order = [code.strip() for code in codes_str.split(",")]
|
||||
logging.info(f"航班 {flight_no} codes顺序: {code_order}")
|
||||
logger.info(f"航班 {flight_no} codes顺序: {code_order}")
|
||||
else:
|
||||
logging.warning(f"航班 {flight_no} 缺少codes字段,无法验证方向")
|
||||
logger.warning(f"航班 {flight_no} 缺少codes字段,无法验证方向")
|
||||
code_order = []
|
||||
|
||||
# 收集所有LineString路径段,并记录每段的code标识
|
||||
@ -1161,7 +1161,7 @@ def merge_discontinuous_route_for_flight(route_data: dict, flight_no: str) -> di
|
||||
# 如果成功合并为单条路径
|
||||
if isinstance(merged_geometry, LineString):
|
||||
continuous_coords = list(merged_geometry.coords)
|
||||
logging.info(f"✅ 航班 {flight_no} 合并为连续路径,包含 {len(continuous_coords)} 个坐标点")
|
||||
logger.info(f"✅ 航班 {flight_no} 合并为连续路径,包含 {len(continuous_coords)} 个坐标点")
|
||||
|
||||
# 基于codes字段验证和修正路径方向
|
||||
if len(code_order) >= 2:
|
||||
@ -1182,14 +1182,14 @@ def merge_discontinuous_route_for_flight(route_data: dict, flight_no: str) -> di
|
||||
else:
|
||||
# 无法合并就报错,不能保持原样掩盖问题
|
||||
error_msg = f"❌ 航班 {flight_no} 路径无法合并为连续路径,存在不连续段"
|
||||
logging.error(error_msg)
|
||||
logger.error(error_msg)
|
||||
raise RuntimeError(error_msg)
|
||||
|
||||
except ImportError:
|
||||
logging.warning(f"Shapely库未安装,跳过路径合并")
|
||||
logger.warning(f"Shapely库未安装,跳过路径合并")
|
||||
return route_data
|
||||
except Exception as e:
|
||||
logging.error(f"航班 {flight_no} 路径合并失败: {str(e)}")
|
||||
logger.error(f"航班 {flight_no} 路径合并失败: {str(e)}")
|
||||
return route_data
|
||||
|
||||
|
||||
@ -1224,26 +1224,26 @@ def _verify_and_correct_path_direction(continuous_coords: list, original_feature
|
||||
start_code = find_point_code(continuous_coords[0])
|
||||
end_code = find_point_code(continuous_coords[-1])
|
||||
|
||||
logging.info(f"航班 {flight_no} 端点检查: 起点在{start_code}, 终点在{end_code}, 期望顺序{code_order}")
|
||||
logger.info(f"航班 {flight_no} 端点检查: 起点在{start_code}, 终点在{end_code}, 期望顺序{code_order}")
|
||||
|
||||
# 检查方向是否正确 - 只使用实际存在的路径段codes进行判断
|
||||
expected_start = code_order[0] # F1
|
||||
# 对于MU5123进港,应该从F1开始,但终点138不是路径段code,所以检查起点即可
|
||||
|
||||
logging.info(f"航班 {flight_no} 方向检查: 期望从{expected_start}开始, 实际起点{start_code}, 终点{end_code}")
|
||||
logger.info(f"航班 {flight_no} 方向检查: 期望从{expected_start}开始, 实际起点{start_code}, 终点{end_code}")
|
||||
|
||||
# 通用路径方向检查逻辑
|
||||
if start_code == expected_start:
|
||||
logging.info(f"✅ 航班 {flight_no} 路径方向正确: 从{expected_start}开始")
|
||||
logger.info(f"✅ 航班 {flight_no} 路径方向正确: 从{expected_start}开始")
|
||||
else:
|
||||
# 方向相反,需要反转
|
||||
continuous_coords.reverse()
|
||||
logging.info(f"✅ 航班 {flight_no} 路径方向已修正: 从{expected_start}开始 (原起点: {start_code})")
|
||||
logger.info(f"✅ 航班 {flight_no} 路径方向已修正: 从{expected_start}开始 (原起点: {start_code})")
|
||||
|
||||
return continuous_coords
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"航班 {flight_no} 路径方向验证失败: {str(e)}")
|
||||
logger.error(f"航班 {flight_no} 路径方向验证失败: {str(e)}")
|
||||
return continuous_coords
|
||||
|
||||
def validate_route_data_integrity(route_data: dict, flight_no: str) -> dict:
|
||||
@ -1262,10 +1262,10 @@ def validate_route_data_integrity(route_data: dict, flight_no: str) -> dict:
|
||||
features = geo_path.get("features", [])
|
||||
|
||||
if len(features) == 0:
|
||||
logging.warning(f"⚠️ 航班 {flight_no} 路径数据为空,无路径段")
|
||||
logger.warning(f"⚠️ 航班 {flight_no} 路径数据为空,无路径段")
|
||||
return route_data
|
||||
|
||||
logging.info(f"✅ 航班 {flight_no} 路径数据完整:包含 {len(features)} 个路径段")
|
||||
logger.info(f"✅ 航班 {flight_no} 路径数据完整:包含 {len(features)} 个路径段")
|
||||
|
||||
# 验证每个路径段的数据完整性
|
||||
valid_segments = 0
|
||||
@ -1282,22 +1282,22 @@ def validate_route_data_integrity(route_data: dict, flight_no: str) -> dict:
|
||||
if len(coordinates) >= 2:
|
||||
valid_segments += 1
|
||||
total_coordinates += len(coordinates)
|
||||
logging.debug(f" 路径段 {i+1}: 代码={code}, 坐标点数={len(coordinates)} ✅")
|
||||
logger.debug(f" 路径段 {i+1}: 代码={code}, 坐标点数={len(coordinates)} ✅")
|
||||
else:
|
||||
logging.warning(f" 路径段 {i+1}: 代码={code}, 坐标点数不足({len(coordinates)}) ⚠️")
|
||||
logger.warning(f" 路径段 {i+1}: 代码={code}, 坐标点数不足({len(coordinates)}) ⚠️")
|
||||
else:
|
||||
logging.warning(f" 路径段 {i+1}: 非LineString类型 ({geometry.get('type')}) ⚠️")
|
||||
logger.warning(f" 路径段 {i+1}: 非LineString类型 ({geometry.get('type')}) ⚠️")
|
||||
|
||||
logging.info(f"✅ 航班 {flight_no} 数据验证完成:{valid_segments}/{len(features)} 有效路径段,共 {total_coordinates} 个坐标点")
|
||||
logger.info(f"✅ 航班 {flight_no} 数据验证完成:{valid_segments}/{len(features)} 有效路径段,共 {total_coordinates} 个坐标点")
|
||||
|
||||
# 验证坐标系信息
|
||||
coordinate_system = route_data.get("coordinateSystem", "未知")
|
||||
logging.info(f"✅ 航班 {flight_no} 坐标系:{coordinate_system}")
|
||||
logger.info(f"✅ 航班 {flight_no} 坐标系:{coordinate_system}")
|
||||
|
||||
return route_data
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"航班 {flight_no} 路径数据完整性验证异常: {str(e)}")
|
||||
logger.error(f"航班 {flight_no} 路径数据完整性验证异常: {str(e)}")
|
||||
return route_data
|
||||
|
||||
def parse_route_path(route_data: dict) -> list[tuple[float, float]]:
|
||||
@ -1315,12 +1315,12 @@ def parse_route_path(route_data: dict) -> list[tuple[float, float]]:
|
||||
try:
|
||||
# 检查坐标系类型
|
||||
coordinate_system_type = route_data.get("coordinateSystem", "CGCS2000")
|
||||
logging.info(f"路由数据坐标系: {coordinate_system_type}")
|
||||
logger.info(f"路由数据坐标系: {coordinate_system_type}")
|
||||
|
||||
geo_path = route_data.get("geoPath", {})
|
||||
features = geo_path.get("features", [])
|
||||
|
||||
logging.info(f"解析路径,共有 {len(features)} 个feature")
|
||||
logger.info(f"解析路径,共有 {len(features)} 个feature")
|
||||
|
||||
for feature in features:
|
||||
geometry = feature.get("geometry", {})
|
||||
@ -1335,23 +1335,23 @@ def parse_route_path(route_data: dict) -> list[tuple[float, float]]:
|
||||
if coordinate_system_type == "WGS84":
|
||||
# 如果已经是WGS84坐标,直接使用 (经度, 纬度)
|
||||
lat, lon = y, x
|
||||
logging.debug(f"WGS84坐标直接使用: lon={lon}, lat={lat}")
|
||||
logger.debug(f"WGS84坐标直接使用: lon={lon}, lat={lat}")
|
||||
else:
|
||||
# 如果是CGCS2000坐标,需要转换
|
||||
lat, lon = coordinate_system.cgcs2000_to_wgs84(x, y)
|
||||
logging.debug(f"CGCS2000坐标转换: {x},{y} -> lat={lat}, lon={lon}")
|
||||
logger.debug(f"CGCS2000坐标转换: {x},{y} -> lat={lat}, lon={lon}")
|
||||
|
||||
path_points.append((lat, lon))
|
||||
|
||||
logging.info(f"路径解析完成,坐标系={coordinate_system_type},共生成 {len(path_points)} 个坐标点")
|
||||
logger.info(f"路径解析完成,坐标系={coordinate_system_type},共生成 {len(path_points)} 个坐标点")
|
||||
|
||||
# 暂时禁用过滤,保留所有路径点用于测试
|
||||
logging.info(f"保留所有 {len(path_points)} 个路径点")
|
||||
logger.info(f"保留所有 {len(path_points)} 个路径点")
|
||||
|
||||
return path_points
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"路径解析失败: {str(e)}")
|
||||
logger.error(f"路径解析失败: {str(e)}")
|
||||
return []
|
||||
|
||||
def haversine_distance(lat1: float, lon1: float, lat2: float, lon2: float) -> float:
|
||||
@ -1398,7 +1398,7 @@ class AircraftRouteFollower:
|
||||
# 根据航班号获取对应的路由数据
|
||||
flight_routes = aircraft_routes.get(self.flight_no)
|
||||
if not flight_routes:
|
||||
logging.warning(f"未找到航班 {self.flight_no} 的路由数据,使用MU5123的路由作为默认")
|
||||
logger.warning(f"未找到航班 {self.flight_no} 的路由数据,使用MU5123的路由作为默认")
|
||||
flight_routes = aircraft_routes.get("MU5123", {})
|
||||
|
||||
# 解析进港路径
|
||||
@ -1406,20 +1406,20 @@ class AircraftRouteFollower:
|
||||
|
||||
# 验证MU5123进港路径的数据完整性,然后合并为连续路径
|
||||
if self.flight_no == "MU5123" and arrival_route:
|
||||
logging.info(f"验证 {self.flight_no} 进港路径数据完整性")
|
||||
logger.info(f"验证 {self.flight_no} 进港路径数据完整性")
|
||||
arrival_route = validate_route_data_integrity(arrival_route, self.flight_no)
|
||||
|
||||
# 将31个路径段合并为连续路径,让飞机能够完整运行
|
||||
logging.info(f"将 {self.flight_no} 的分散路径段合并为连续路径")
|
||||
logger.info(f"将 {self.flight_no} 的分散路径段合并为连续路径")
|
||||
arrival_route = merge_discontinuous_route_for_flight(arrival_route, self.flight_no)
|
||||
|
||||
self.arrival_points = parse_route_path(arrival_route)
|
||||
logging.info(f"航空器 {self.flight_no} 进港路径: {len(self.arrival_points)} 个点")
|
||||
logger.info(f"航空器 {self.flight_no} 进港路径: {len(self.arrival_points)} 个点")
|
||||
|
||||
# 解析出港路径
|
||||
departure_route = flight_routes.get("departure", {})
|
||||
self.departure_points = parse_route_path(departure_route)
|
||||
logging.info(f"航空器 {self.flight_no} 出港路径: {len(self.departure_points)} 个点")
|
||||
logger.info(f"航空器 {self.flight_no} 出港路径: {len(self.departure_points)} 个点")
|
||||
|
||||
# 设置机位坐标(138号机位的大概位置)
|
||||
if self.arrival_points:
|
||||
@ -1431,7 +1431,7 @@ class AircraftRouteFollower:
|
||||
self.gate_position = (36.354068, 120.083410)
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"路径解析失败: {str(e)}")
|
||||
logger.error(f"路径解析失败: {str(e)}")
|
||||
self.arrival_points = []
|
||||
self.departure_points = []
|
||||
self.gate_position = (36.354068, 120.083410)
|
||||
@ -1446,7 +1446,7 @@ class AircraftRouteFollower:
|
||||
self.is_at_gate = False
|
||||
self.flight_status = 'in_route' # 设置为路径运行状态
|
||||
self.wait_until = 0.0 # 清除等待时间
|
||||
logging.info(f"航空器 {self.flight_no} 开始进港路径跟随")
|
||||
logger.info(f"航空器 {self.flight_no} 开始进港路径跟随")
|
||||
|
||||
elif route_type == "departure" and self.departure_points:
|
||||
self.current_route_type = "departure"
|
||||
@ -1456,10 +1456,10 @@ class AircraftRouteFollower:
|
||||
self.is_at_gate = False
|
||||
self.flight_status = 'in_route' # 设置为路径运行状态
|
||||
self.wait_until = 0.0 # 清除等待时间
|
||||
logging.info(f"航空器 {self.flight_no} 开始出港路径跟随")
|
||||
logger.info(f"航空器 {self.flight_no} 开始出港路径跟随")
|
||||
|
||||
else:
|
||||
logging.warning(f"航空器 {self.flight_no} 无效的路径类型: {route_type}")
|
||||
logger.warning(f"航空器 {self.flight_no} 无效的路径类型: {route_type}")
|
||||
|
||||
def update_position_on_route(self, aircraft: dict[str, Any], speed_kmh: float, elapsed_time: float) -> bool:
|
||||
"""
|
||||
@ -1522,7 +1522,7 @@ class AircraftRouteFollower:
|
||||
self.flight_status = 'at_gate' if self.is_at_gate else 'completed'
|
||||
# 设置5秒等待时间
|
||||
self.wait_until = current_time + self.waiting_duration
|
||||
logging.info(f"航空器 {self.flight_no} 完成 {self.current_route_type} 路径,等待{self.waiting_duration}秒后重新开始")
|
||||
logger.info(f"航空器 {self.flight_no} 完成 {self.current_route_type} 路径,等待{self.waiting_duration}秒后重新开始")
|
||||
return True
|
||||
|
||||
# 更新到下一个目标点
|
||||
@ -1622,12 +1622,12 @@ class AircraftRouteManager:
|
||||
if follower.route_points:
|
||||
aircraft["latitude"] = follower.route_points[0][0]
|
||||
aircraft["longitude"] = follower.route_points[0][1]
|
||||
logging.info(f"航空器 {aircraft.get('flightNo')} 等待结束,重新开始进港路径")
|
||||
logger.info(f"航空器 {aircraft.get('flightNo')} 等待结束,重新开始进港路径")
|
||||
|
||||
route_completed = follower.update_position_on_route(aircraft, speed, elapsed_time)
|
||||
if route_completed and follower.flight_status != 'waiting':
|
||||
# 路径完成,已设置5秒等待时间,无需立即重新开始
|
||||
logging.info(f"航空器 {aircraft.get('flightNo')} 进港完成,将等待{follower.waiting_duration}秒后重新开始")
|
||||
logger.info(f"航空器 {aircraft.get('flightNo')} 进港完成,将等待{follower.waiting_duration}秒后重新开始")
|
||||
|
||||
def _update_departure_only_aircraft(self, aircraft: dict[str, Any], follower: AircraftRouteFollower,
|
||||
speed: float, elapsed_time: float):
|
||||
@ -1641,12 +1641,12 @@ class AircraftRouteManager:
|
||||
if follower.route_points:
|
||||
aircraft["latitude"] = follower.route_points[0][0]
|
||||
aircraft["longitude"] = follower.route_points[0][1]
|
||||
logging.info(f"航空器 {aircraft.get('flightNo')} 等待结束,重新开始出港路径")
|
||||
logger.info(f"航空器 {aircraft.get('flightNo')} 等待结束,重新开始出港路径")
|
||||
|
||||
route_completed = follower.update_position_on_route(aircraft, speed, elapsed_time)
|
||||
if route_completed and follower.flight_status != 'waiting':
|
||||
# 路径完成,已设置5秒等待时间,无需立即重新开始
|
||||
logging.info(f"航空器 {aircraft.get('flightNo')} 出港完成,将等待{follower.waiting_duration}秒后重新开始")
|
||||
logger.info(f"航空器 {aircraft.get('flightNo')} 出港完成,将等待{follower.waiting_duration}秒后重新开始")
|
||||
|
||||
|
||||
# 创建全局路径跟随管理器
|
||||
@ -2025,7 +2025,6 @@ class BackgroundUpdateManager:
|
||||
self.update_thread = threading.Thread(target=self._update_loop, daemon=True)
|
||||
self.update_thread.start()
|
||||
logger.info("后台更新管理器已启动")
|
||||
logger.handlers[0].flush() # 立即刷新日志
|
||||
|
||||
def stop(self):
|
||||
"""停止后台更新线程"""
|
||||
@ -2052,19 +2051,11 @@ class BackgroundUpdateManager:
|
||||
update_vehicle_position(vehicle, UPDATE_INTERVAL)
|
||||
vehicle["time"] = int(current_time * 1000)
|
||||
|
||||
# 定期刷新日志到文件(每10个周期)
|
||||
if int(current_time) % 10 == 0:
|
||||
for handler in logger.handlers:
|
||||
handler.flush()
|
||||
|
||||
# 休眠到下一个更新周期
|
||||
time.sleep(UPDATE_INTERVAL)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"后台更新出错: {str(e)}")
|
||||
# 错误发生时立即刷新日志
|
||||
for handler in logger.handlers:
|
||||
handler.flush()
|
||||
time.sleep(1.0) # 出错时短暂休眠后继续
|
||||
|
||||
# 全局后台更新管理器实例
|
||||
|
||||
Loading…
Reference in New Issue
Block a user