根据经纬度计算距离,Python+Pandas实现例子

要了解原理的,看这里:纬度计算距离公式原理.

目录

  • 一、经纬度计算距离公式:
  • 二、实战例子

一、经纬度计算距离公式:

在这里插入图片描述
其中:
1、Long1 Lat1表示A点经纬度, Long2 Lat2表示B点经纬度;

2、a=Lat1 – Lat2 为两点纬度之差 b=Long1 -Long2 为两点经度之差;

3、6378.137为地球半径,单位为千米;

4、计算出来的结果单位为千米,若将半径改为米为单位则计算的结果单位为米;

5、计算精度与谷歌地图的距离精度差不多,相差范围在0.2米以下。

二、实战例子

处理前的数据长这样:

根据经纬度计算距离,Python+Pandas实现例子_第1张图片
接下来就使用pandas包处理,这里要注意:这里数据的纬度、经度使用的是“度分”表示的,也就是说前两位用的是度,后两位用的是分,所以需要变换成”度“,再换算成“弧度”计算才合适。

import pandas as pd
import math


def read_file(filename):
    f = pd.read_excel(filename)
    print(f.iloc[:, [1, 3, 4]])
    station_number = f.iloc[:, [1]]  # 后面要加“[]”,不然就自动转换成了series类型,不能使用iloc函数了
    lat = f.iloc[:, [3]]
    long = f.iloc[:, [4]]
    return station_number, lat, long


# 由经纬度计算节点之间的距离
def jisuan_jiedian_juli(filename):
    station_number, lat, long = read_file(filename)
    stage = [] # 定义列表,存放每两个站点之间的距离
    for i in range(len(station_number)):
        for j in range(i+1, len(station_number)):
            lat1 = jiaodu_zhuanhuan_hudu(lat.iloc[i, 0])
            lat2 = jiaodu_zhuanhuan_hudu(lat.iloc[j, 0])
            long1 = jiaodu_zhuanhuan_hudu(long.iloc[i, 0])
            long2 = jiaodu_zhuanhuan_hudu(long.iloc[j, 0])
            a = lat1 - lat2  # 纬度差的绝对值
            b = long1 - long2  # 经度差的绝对值
            ant = pow(math.sin(a/2), 2) + math.cos(lat1)*math.cos(lat2)*pow(math.sin(b/2), 2)  # 公式
            s = 2*6378.137*math.asin(pow(ant, 0.5))
            stage.append([i, j, s])
    print(stage)
    f = pd.DataFrame(stage, columns=["from", "to", "cost"])
    f.to_csv("zhandian.csv", index=None)  # 保存成.csv文件


# 将角度转换为弧度
def jiaodu_zhuanhuan_hudu(degree_minute):
    degree = degree_minute // 100  # 度
    minute = degree_minute % 100  # 分
    degree = degree + minute / 60  # 将分转换为度,并相加
    degree = float("%.2f" % degree)  # 保留两位小数

    rad = degree * math.pi / 180
    return rad


if __name__ == "__main__":
    jisuan_jiedian_juli(r"C:\Users\MSZ\Desktop\dataset\zhandian.xlsx")
    print("finish!")

结果:

根据经纬度计算距离,Python+Pandas实现例子_第2张图片

你可能感兴趣的:(数据与处理,Python)