Python根据场景的经纬度批量获取周边的基站信息,并将结果拼接成字符串
最近在日常工作中需要批量获取场景周边的基站信息
主要的思路如下:
1、读取场景和工参的经纬度等信息
2、根据每个场景的经维度分别计算这个场景到所有基站的距离,将满足距离的基站信息进行拼接
3、遍历所有的场景得到最终的数据
4、将数据导出
原始的场景数据如下:需要有场景名称、经度、维度等数据
原始的基站数据如下:需要有基站id、基站名称、经度、维度等数据
下面是完整代码:
import math
import pandas as pd
import PySimpleGUI as sg
#获取
loc1 = sg.popup_get_file('请选择要读取的数据文件的位置')
file2 = sg.popup_get_folder('请选择合并数据要保存的位置')
# 读取场景和工参的数据
base_stations=pd.read_excel(loc1,sheet_name="工参")
current_location=pd.read_excel(loc1,sheet_name="场景")
# 将基站数据转换为字典
base_stations = base_stations.to_dict('records')
# 计算距离的函数
def calculate_distance(lat1, lon1, lat2, lon2):
# 使用haversine公式计算两点之间的距离
R = 6371.0 # 地球平均半径,单位为公里
lat1 = math.radians(lat1)
lon1 = math.radians(lon1)
lat2 = math.radians(lat2)
lon2 = math.radians(lon2)
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.atan2(math.sqrt(a), math.sqrt(1 - a))
return R * c
# 获取周边基站的函数
def get_nearby_base_stations(current_latitude, current_longitude, max_distance, base_stations):
str = ''
name = ''
for station in base_stations:
distance = calculate_distance(current_latitude, current_longitude, station['latitude'], station['longitude'])
# 搜索所有满足距离条件的基站
if distance <= max_distance:
if(len(str) == 0):
str = station['id']
name = station['name']
else:
#将所有满足搜索距离的基站id和基站名称拼接成字符串
str = str +';' + station['id']
name = name+ ';' + station['name']
return str,name
res = []
for index, row in current_location.iterrows():
# print(row)
# dict = {}
res1 = []
max_distance1 = 0.2 # 假设的搜索半径为200米
nearby_id,nearby_name = get_nearby_base_stations(row[2], row[3], max_distance1, base_stations)
res1.append(row[0])
res1.append(nearby_id)
res1.append(nearby_name)
res.append(res1)
# 将结果转换成dataframe数据,以便后续保存到excel文件中
data = pd.DataFrame(res)
# 将结果导出
data.to_excel(file2 + '\\test.xlsx',index=False)