python 计算两个经纬度的距离_python实现两个经纬度点之间的距离和方位角的方法...

本文介绍了如何使用Python精确计算两个经纬度点之间的距离和方位角。提供了详细的函数实现,包括getDegree()用于获取方位角,getDistance()用于计算距离,涉及地理坐标转换和地球椭球模型的相关计算。
摘要由CSDN通过智能技术生成

最近做有关GPS轨迹上有关的东西,花费心思较多,对两个常用的函数总结一下,求距离和求方位角,比较精确,欢迎交流!

1. 求两个经纬点的方位角,P0(latA, lonA), P1(latB, lonB)(很多博客写的不是很好,这里总结一下)

def getDegree(latA, lonA, latB, lonB):

"""

Args:

point p1(latA, lonA)

point p2(latB, lonB)

Returns:

bearing between the two GPS points,

default: the basis of heading direction is north

"""

radLatA = radians(latA)

radLonA = radians(lonA)

radLatB = radians(latB)

radLonB = radians(lonB)

dLon = radLonB - radLonA

y = sin(dLon) * cos(radLatB)

x = cos(radLatA) * sin(radLatB) - sin(radLatA) * cos(radLatB) * cos(dLon)

brng = degrees(atan2(y, x))

brng = (brng + 360) % 360

return brng

2. 求两个经纬点的距离函数:P0(latA, lonA), P1(latB, lonB)

Python中,你可以使用haversine库来计算基于给定的距离、中心经纬度以及方位角的新坐标。Haversine公式用于估算地球上两之间的大圆距离,这里需要将方位角转换为弧度。以下是一个简单的步骤: 1. 首先,安装haversine库,如果还没有安装的话: ```bash pip install haversine ``` 2. 导入必要的库并定义一些辅助函数: ```python from math import radians, sin, cos, sqrt, asin import haversine def calculate_bearing(start_lat, start_lng, end_lat, end_lng): # 计算初始和目标之间方位角度) bearing = degrees( atan2(sin(radians(end_lng) - radians(start_lng)) * cos(radians(end_lat)), cos(radians(start_lat)) * sin(radians(end_lat)) - sin(radians(start_lat)) * cos(radians(end_lat)) * cos(radians(end_lng - start_lng))) ) return bearing def distance_to_new_location(distance, center_lat, center_lng, start_lat, start_lng, bearing): # 使用haversine库计算新位置 lat_new = center_lat + (distance / 111.32) * sin(bearing) lng_new = center_lng + (distance / 111.32) * cos(bearing) return lat_new, lng_new # 用法示例 center_lat = 39.9042 center_lng = 116.4074 # 北京中心经纬度 distance = 100 # 单位通常是公里,这里假设是千米 start_lat = start_lng = None # 指定从中心开始的位置 bearing = calculate_bearing(start_lat, start_lng, center_lat, center_lng) # 获取初始方向 new_lat, new_lng = distance_to_new_location(distance, center_lat, center_lng, start_lat, start_lng, bearing) print(f"新的经度: {new_lng}, 新的纬度: {new_lat}")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值