Python 计算距离

  • Post category:Python

Python计算距离常用于地图应用、数据分析、交通运输等场景。下面我们通过两个示例来详细讲解Python计算距离的使用方法。

1. 使用geopy库计算两点之间的距离

geopy是Python中用于地理编码的第三方库,可以方便快捷地计算两个地点之间的距离。下面是geopy库计算距离的示例代码

from geopy.distance import geodesic

# 大连市松江路
dl_sj = (38.9179, 121.5725)
# 大连周水子国际机场
dl_zsz = (38.9689, 121.5422)

# 计算两点之间的距离,单位为千米(km)
distance = geodesic(dl_sj, dl_zsz).km
print("大连市松江路和周水子国际机场之间的距离为:{}千米".format(distance))

输出结果:

大连市松江路和周水子国际机场之间的距离为:6.184469310504764千米

2. 使用haversine公式计算两点之间的距离

haversine公式也是一种计算地球表面两点之间距离的方法,需要使用math库中的sin、cos等函数。下面是使用haversine公式计算距离的示例代码。

import math

# 北京市天安门广场
bj_tam = (39.9087, 116.3974)
# 上海市南京东路步行街
sh_njdl = (31.2387, 121.4818)

# 地球半径(单位:米)
EARTH_RADIUS = 6371 * 1000


def haversine(point1, point2):
    # 经度和纬度的差值
    lon1, lat1 = point1
    lon2, lat2 = point2
    dlat = math.radians(lat2 - lat1)
    dlon = math.radians(lon2 - lon1)
    a = math.sin(dlat / 2) ** 2 + math.cos(math.radians(lat1)) * \
        math.cos(math.radians(lat2)) * math.sin(dlon / 2) ** 2
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
    distance = c * EARTH_RADIUS
    return distance


# 计算两点之间的距离,单位为米(m)
distance = haversine(bj_tam, sh_njdl)
print("北京市天安门广场和上海市南京东路步行街之间的距离为:{}米".format(distance))

输出结果:

北京市天安门广场和上海市南京东路步行街之间的距离为:1043420.9822402米

通过上述示例,我们可以看到通过geopy库或者haversine公式都可以方便地计算两个地点之间的距离,并且可以自定义计算单位。