numpy数组
这个数据使用列表还有其余的差距还是很大的
参考下面这两个代码,第二个是变快以后得
'''
计算每个CSV文件的终点坐标
进行1万次计算,得到值最小的距离,将CSV文件名前嘴,终点机场,机场ID,机场坐标,距离,存储在CSV文件中
'''
import os
import pandas as pd
import pandas as pd
import math
# 哈弗辛公式计算两点之间的距离
def haversine(coord1, coord2):
lon1, lat1 = map(math.radians, coord1)
lon2, lat2 = map(math.radians, coord2)
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))
# 地球半径,单位公里
r = 6371.0
distance = r * c
return distance
# 查找与输入坐标距离最小的点
def find_nearest_point(input_coord, df):
min_distance = float('inf') # 设置初始的最小距离为无穷大
nearest_name = None
nearest_coord = None
# 遍历df中的每一行,计算距离
for index, row in df.iterrows():
df_coord = (row['lon'],row['lat'] )
distance = haversine(input_coord, df_coord)
if distance < min_distance:
min_distance = distance
nearest_name = row['name']
nearest_coord = df_coord
return nearest_name, nearest_coord, min_distance
# 定义函数返回文件名前缀和终点坐标
def get_file_prefix_and_coordinates(directory):
result = []
# 遍历文件夹中的所有文件
for filename in os.listdir(directory):
if filename.endswith('.csv'):
# 获取文件名前缀(假设前缀是文件名去掉扩展名部分)
file_prefix = os.path.splitext(filename)[0]
# 读取CSV文件
file_path = os.path.join(directory, filename)
df = pd.read_csv(file_path)
# 假设终点坐标是CSV文件中的最后一行的'lat'和'lon'列
if 'lat' in df.columns and 'lon' in df.columns:
endpoint_lat = df['lat'].iloc[-1]
endpoint_lon = df['lon'].iloc[-1]
# 将文件名前缀和终点坐标添加到结果中
result.append((file_prefix, endpoint_lon, endpoint_lat))
return result
import math
#经纬度计算公里数
def haversine(coord1, coord2):
# 坐标转换为弧度
lat1, lon1 = map(math.radians, coord1)
lat2, lon2 = map(math.radians, coord2)
# 哈弗辛公式
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))
# 地球半径(公里)
r = 6371.0
distance = r * c
return distance
# 指定CSV文件夹路径
directory = '/data/lh123/lh/track_prediction_820/code/RNN-LSTM-GRU--based-Aircraft-Trajectory-Prediction-main/8_21/data_926/data'
# 调用函数并打印结果
file_prefix_and_coordinates = get_file_prefix_and_coordinates(directory)
#得到飞机场坐标信息
import pandas as pd
# 指定输入和输出文件路径
input_file = '/data/lh123/lh/track_prediction_820/code/RNN-LSTM-GRU--based-Aircraft-Trajectory-Prediction-main/8_21/data_930/all_data_3column.csv'
# 读取CSV文件,并指定只读取'name', 'lat', 'lon'三列
df = pd.read_csv(input_file, usecols=['name', 'lat', 'lon'])
# 打印读取的内容,确认已读取的内容正确
print(df)
airport_list=[]#飞机场
min_distance_list=[]
file_name_list=[]
airportlon_list=[]
airportlat_list=[]
num =0
for file_name,lon,lat in file_prefix_and_coordinates: #对
num =num +1
print(num)
# coord1 = (31.2304, 121.4737) # 洛杉矶
# coord2 = (39.9042,116.4074) # 纽约
airport, (airportlon,airportlat), min_distance = find_nearest_point((lon,lat), df)
airport_list.append(airport)
min_distance_list.append(min_distance)
file_name_list.append(file_name)
airportlon_list.append(airportlon)
airportlat_list.append(airportlat)
# print(f"最近的地点: {nearest_name}")
# print(f"最近的坐标: {nearest_coord}")
print(f"相距: {min_distance:.2f} 公里")
# 创建一个字典
data = {
'csv_name': file_name_list,
'airport_name': airport_list,
'airport_lon': airportlon_list,
'airport_lat': airportlat_list,
'min_distance': min_distance_list
}
# 转换为DataFrame
df = pd.DataFrame(data)
```python
import os
import pandas as pd
import numpy as np
import math
# 哈弗辛公式计算两点之间的距离
def haversine(coord1, coord2):
lon1, lat1 = map(math.radians, coord1)
lon2, lat2 = map(math.radians, coord2)
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))
# 地球半径,单位公里
r = 6371.0
return r * c
# 查找与输入坐标距离最小的点
def find_nearest_point(input_coord, df):
df_coords = df[['lon', 'lat']].to_numpy()
distances = np.array([haversine(input_coord, (lon, lat)) for lon, lat in df_coords])
min_index = np.argmin(distances)
return df['name'].iloc[min_index], df_coords[min_index], distances[min_index]
# 定义函数返回文件名前缀和终点坐标
def get_file_prefix_and_coordinates(directory):
result = []
for filename in os.listdir(directory):
if filename.endswith('.csv'):
file_prefix = os.path.splitext(filename)[0]
file_path = os.path.join(directory, filename)
df = pd.read_csv(file_path)
if 'lat' in df.columns and 'lon' in df.columns:
endpoint_lat = df['lat'].iloc[-1]
endpoint_lon = df['lon'].iloc[-1]
result.append((file_prefix, endpoint_lon, endpoint_lat))
return result
# 指定CSV文件夹路径
directory = '/data/lh123/lh/track_prediction_820/code/RNN-LSTM-GRU--based-Aircraft-Trajectory-Prediction-main/8_21/data_926/data'
file_prefix_and_coordinates = get_file_prefix_and_coordinates(directory)
# 得到飞机场坐标信息
input_file = '/data/lh123/lh/track_prediction_820/code/RNN-LSTM-GRU--based-Aircraft-Trajectory-Prediction-main/8_21/data_930/all_data_3column.csv'
df = pd.read_csv(input_file, usecols=['name', 'lat', 'lon'])
airport_list = []
min_distance_list = []
file_name_list = []
airportlon_list = []
airportlat_list = []
for num, (file_name, lon, lat) in enumerate(file_prefix_and_coordinates, start=1):
print(num)
airport, (airportlon, airportlat), min_distance = find_nearest_point((lon, lat), df)
airport_list.append(airport)
min_distance_list.append(min_distance)
file_name_list.append(file_name)
airportlon_list.append(airportlon)
airportlat_list.append(airportlat)
print(f"相距: {min_distance:.2f} 公里")
# 创建一个字典
data = {
'csv_name': file_name_list,
'airport_name': airport_list,
'airport_lon': airportlon_list,
'airport_lat': airportlat_list,
'min_distance': min_distance_list
}
# 转换为DataFrame并保存
output_df = pd.DataFrame(data)
output_df.to_csv('output.csv', index=False)