比较dfs与最近的经纬度(Python,Pandas)
创始人
2024-12-13 12:30:21
0

下面是一个使用深度优先搜索(DFS)算法比较最近经纬度的示例代码,使用Python和Pandas库:

import pandas as pd
import math

def calc_distance(lat1, lon1, lat2, lon2):
    # 将经纬度转换为弧度
    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))
    distance = 6371 * c  # 地球半径为6371千米
    return distance

def dfs_compare_distance(df, lat, lon, visited=set()):
    visited.add((lat, lon))  # 将当前经纬度添加到已访问集合

    nearest_distance = float('inf')
    nearest_lat = None
    nearest_lon = None

    # 遍历数据框中的每个经纬度
    for index, row in df.iterrows():
        curr_lat = row['latitude']
        curr_lon = row['longitude']

        # 计算当前经纬度与目标经纬度的距离
        distance = calc_distance(lat, lon, curr_lat, curr_lon)
        
        # 如果距离更近,则更新最近经纬度和距离
        if distance < nearest_distance:
            nearest_distance = distance
            nearest_lat = curr_lat
            nearest_lon = curr_lon

        # 如果当前经纬度未访问过,则递归进行DFS比较
        if (curr_lat, curr_lon) not in visited:
            dfs_compare_distance(df, curr_lat, curr_lon, visited)

    # 打印最近经纬度和距离
    print(f"最近的经纬度:{nearest_lat}, {nearest_lon}")
    print(f"距离:{nearest_distance}千米")

# 创建一个示例数据框
data = {'latitude': [39.9042, 40.7128, 37.7749],
        'longitude': [116.4074, -74.0060, -122.4194]}
df = pd.DataFrame(data)

# 比较最近经纬度
dfs_compare_distance(df, 39.9042, 116.4074)

这段代码首先定义了一个calc_distance函数,用于计算两个经纬度之间的距离。然后定义了一个dfs_compare_distance函数,用于使用DFS算法比较最近的经纬度。该函数以给定的经纬度作为起点,遍历数据框中的每个经纬度,计算距离并更新最近经纬度和距离。同时,使用一个visited集合来记录已访问过的经纬度,避免重复访问。最后,打印出最近经纬度和距离。

在示例代码中,我们创建了一个包含三个经纬度的数据框,然后调用dfs_compare_distance函数来比较最近的经纬度。起点经纬度为(39.9042, 116.4074)(对应北京的经纬度)。程序将打印出最近的经纬度和距离。

相关内容

热门资讯

记者揭秘!智星菠萝辅助(透视辅... 记者揭秘!智星菠萝辅助(透视辅助)拱趴大菠萝辅助神器,扑克教程(有挂细节);模式供您选择,了解更新找...
一分钟揭秘!约局吧能能开挂(透... 一分钟揭秘!约局吧能能开挂(透视辅助)hhpoker辅助靠谱,2024新版教程(有挂教学);约局吧能...
透视辅助!wepoker模拟器... 透视辅助!wepoker模拟器哪个好用(脚本)hhpoker辅助挂是真的,科技教程(有挂技巧);囊括...
透视代打!hhpkoer辅助器... 透视代打!hhpkoer辅助器视频(辅助挂)pokemmo脚本辅助,2024新版教程(有挂教程);风...
透视了解!约局吧德州真的有透视... 透视了解!约局吧德州真的有透视挂(透视脚本)德州局HHpoker透视脚本,必胜教程(有挂分析);亲,...
六分钟了解!wepoker挂底... 六分钟了解!wepoker挂底牌(透视)德普之星开辅助,详细教程(有挂解密);德普之星开辅助是一种具...
9分钟了解!wpk私人辅助(透... 9分钟了解!wpk私人辅助(透视)hhpoker德州透视,插件教程(有挂教学);风靡全球的特色经典游...
推荐一款!wepoker究竟有... 推荐一款!wepoker究竟有透视(脚本)哈糖大菠萝开挂,介绍教程(有挂技术);囊括全国各种wepo...
每日必备!wepoker有人用... 每日必备!wepoker有人用过(脚本)wpk有那种辅助,线上教程(有挂规律);wepoker有人用...
玩家必备教程!wejoker私... 玩家必备教程!wejoker私人辅助软件(脚本)哈糖大菠萝可以开挂,可靠技巧(有挂神器)申哈糖大菠萝...