Python根据场景的经纬度批量获取周边的基站信息,并将结果拼接成字符串

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)





  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值