Python求经纬度直线距离

Python求经纬度直线距离

  1. 方法:两个经纬度点之间的直线距离
    def get_distance(longitude_1, latitude_1, longitude_2, latitude_2):
        """"
    
        计算两个经纬度点之间的直线距离
        :param longitude_1: 第1个点经度
        :param latitude_1: 第1个点维度
        :param longitude_2: 第2个点经度
        :param latitude_2: 第2个点维度
        :return: 距离 km
        """
        # 经纬度转换成弧度
        # lng1,lat1,lng2,lat2 = (120.12802999999997,30.28708,115.86572000000001,28.7427) 
        lng1, lat1, lng2, lat2 = map(radians, [float(longitude_1) / 1000000, float(latitude_1) / 1000000, float(longitude_2) / 1000000, float(latitude_2) / 1000000])
        d_lon = lng2 - lng1
        d_lat = lat2 - lat1
        a = sin(d_lat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(d_lon / 2) ** 2
        distance = 2 * asin(sqrt(a)) * 6371 * 1000  # 地球平均半径,6371km
        distance = round(distance / 1000, 3)
    
        return distance
  2. 方法:求df经纬度直线距离
    def get_distance_df(df_1):
        """
    
        计算每个点持续的经纬度直线距离
        :param df_1:
        :return: 返回带有距离差 的df
        """
        # 经纬度直线距离
        df_1.reset_index(inplace=True)
        # print("ds:", len(df_1) - 2)
        for i in range(len(df_1) - 1):
            # 条件判断,表明当前行有下一行
            distance = get_distance(df_1.loc[i, 'lon'], df_1.loc[i, 'lat'], df_1.loc[i+1, 'lon'], df_1.loc[i+1, 'lat'])
            df_1.loc[i, 'delta_distance'] = distance
    
        return df_1
  3. 实现:df求经纬度直线距离
    # delta_distance
    df = get_distance_df(df)
    print("delta_distance:\n", df)

你可能感兴趣的:(python)