用python编写航线管理系统,实现航线信息的录入,航线信息的自动计算(时间差的秒数,平均速度(航点间距/时间差),上一航点距离(时间差*下一航点平均速度),隐患问题距平台距离(距平台距离+上一航点距离)),使发生错误的时候可以进行修改,也可以查询已录入的信息的代码
时间: 2024-03-03 18:52:47 浏览: 30
好的,下面是一个简单的航线管理系统的代码实现,供你参考:
```python
from math import radians, sin, cos, sqrt
class Waypoint:
def __init__(self, name, lat, lon, alt, arr_time, dep_time):
self.name = name
self.lat = lat
self.lon = lon
self.alt = alt
self.arr_time = arr_time
self.dep_time = dep_time
class Route:
def __init__(self, name, start, end):
self.name = name
self.start = start
self.end = end
self.waypoints = []
self.total_distance = 0
self.total_time = 0
def add_waypoint(self, name, lat, lon, alt, arr_time, dep_time):
waypoint = Waypoint(name, lat, lon, alt, arr_time, dep_time)
if len(self.waypoints) > 0:
last_waypoint = self.waypoints[-1]
distance = self.distance(last_waypoint.lat, last_waypoint.lon, lat, lon)
time_diff = self.time_diff(last_waypoint.dep_time, arr_time)
speed = distance / time_diff
last_waypoint.next_distance = distance
last_waypoint.next_speed = speed
last_waypoint.next_arr_time = arr_time
waypoint.prev_distance = distance
waypoint.prev_speed = speed
waypoint.prev_dep_time = last_waypoint.dep_time
self.total_distance += distance
self.total_time += time_diff
self.waypoints.append(waypoint)
def modify_waypoint(self, index, name, lat, lon, alt, arr_time, dep_time):
if index < 0 or index >= len(self.waypoints):
print('Invalid index')
return
if index == 0:
self.start = name
elif index == len(self.waypoints) - 1:
self.end = name
else:
prev_waypoint = self.waypoints[index - 1]
next_waypoint = self.waypoints[index + 1]
prev_distance = self.distance(prev_waypoint.lat, prev_waypoint.lon, lat, lon)
next_distance = self.distance(next_waypoint.lat, next_waypoint.lon, lat, lon)
time_diff = self.time_diff(prev_waypoint.dep_time, arr_time)
prev_speed = prev_distance / time_diff
next_speed = next_distance / self.time_diff(arr_time, next_waypoint.arr_time)
prev_waypoint.next_distance = prev_distance
prev_waypoint.next_speed = prev_speed
prev_waypoint.next_arr_time = arr_time
next_waypoint.prev_distance = next_distance
next_waypoint.prev_speed = next_speed
next_waypoint.prev_dep_time = arr_time
self.total_distance += prev_distance + next_distance - self.waypoints[index].prev_distance
self.total_time += time_diff + self.time_diff(arr_time, next_waypoint.arr_time)
self.waypoints[index] = Waypoint(name, lat, lon, alt, arr_time, dep_time)
def delete_waypoint(self, index):
if index < 0 or index >= len(self.waypoints):
print('Invalid index')
return
if index == 0:
self.start = self.waypoints[1].name
self.waypoints.pop(0)
elif index == len(self.waypoints) - 1:
self.end = self.waypoints[-2].name
self.waypoints.pop()
else:
prev_waypoint = self.waypoints[index - 1]
next_waypoint = self.waypoints[index + 1]
prev_waypoint.next_distance = next_waypoint.prev_distance
prev_waypoint.next_speed = next_waypoint.prev_speed
prev_waypoint.next_arr_time = next_waypoint.arr_time
self.total_distance -= self.waypoints[index].prev_distance + next_waypoint.prev_distance
self.total_time -= self.time_diff(prev_waypoint.dep_time, self.waypoints[index].arr_time) + self.time_diff(self.waypoints[index].dep_time, next_waypoint.arr_time)
self.waypoints.pop(index)
def search_by_name(self, name):
for i, waypoint in enumerate(self.waypoints):
if waypoint.name == name:
return i, waypoint
return None
def search_by_latlon(self, lat, lon):
for i, waypoint in enumerate(self.waypoints):
if waypoint.lat == lat and waypoint.lon == lon:
return i, waypoint
return None
@staticmethod
def distance(lat1, lon1, lat2, lon2):
R = 6371000
dlat = radians(lat2 - lat1)
dlon = radians(lon2 - lon1)
a = sin(dlat / 2) * sin(dlat / 2) + cos(radians(lat1)) * cos(radians(lat2)) * sin(dlon / 2) * sin(dlon / 2)
c = 2 * atan2(sqrt(a), sqrt(1 - a))
return R * c
@staticmethod
def time_diff(t1, t2):
return (t2 - t1).total_seconds()
def print_route(self):
print('Route:', self.name)
print('Start:', self.start)
print('End:', self.end)
print('Total distance:', round(self.total_distance, 2), 'm')
print('Total time:', self.total_time, 's')
print('Waypoints:')
for waypoint in self.waypoints:
print('Name:', waypoint.name)
print('Lat/Lon:', waypoint.lat, waypoint.lon)
print('Alt:', waypoint.alt)
print('Arrival time:', waypoint.arr_time)
print('Departure time:', waypoint.dep_time)
if hasattr(waypoint, 'prev_distance'):
print('Previous distance:', round(waypoint.prev_distance, 2), 'm')
print('Previous speed:', round(waypoint.prev_speed, 2), 'm/s')
print('Previous departure time:', waypoint.prev_dep_time)
if hasattr(waypoint, 'next_distance'):
print('Next distance:', round(waypoint.next_distance, 2), 'm')
print('Next speed:', round(waypoint.next_speed, 2), 'm/s')
print('Next arrival time:', waypoint.next_arr_time)
print('')
def calculate_problem_distance(self, problem_lat, problem_lon):
for i, waypoint in enumerate(self.waypoints):
if hasattr(waypoint, 'prev_distance'):
problem_distance = self.distance(problem_lat, problem_lon, waypoint.lat, waypoint.lon) + waypoint.prev_distance
print('Waypoint:', waypoint.name)
print('Problem distance:', round(problem_distance, 2), 'm')
```
这个代码实现包含了航线信息类 `Route` 和航点信息类 `Waypoint`,以及一些操作方法,包括添加航点信息、修改航点信息、删除航点信息、查询航点信息、计算隐患问题距平台距离等。你可以根据需要进行调整和扩展。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)