python3关于经纬度、方向角、目标距离
博主搞了半天haversin公式倒腾距离之后,发现有现成的geopy可用,且网上查到的一些函数用法似乎有改变,遂整理如下
已知两点经纬度求距离
from geopy.distance import geodesicnodes = [(-22.8981672 -43.2219277),(-22.8835229 -43.2631313)]#以千米为单位求两点之间距离
distance = geodesic(nodes[0],nodes[1]).kilometers
print('两点之间距离:',distance)
注意以上geodesic是geopy2.0版本的用法,在1.19版本中使用时为VincentyDistance
已知两点经纬度求方向角(方向角:与正北顺时针夹角)
from math import sin, cos, atan2, pi#计算方向角
def calcu_azimuth(lat1, lon1, lat2, lon2):lat1_rad = lat1 * pi / 180lon1_rad = lon1 * pi / 180lat2_rad = lat2 * pi / 180lon2_rad = lon2 * pi / 180y = sin(lon2_rad - lon1_rad) * cos(lat2_rad)x = cos(lat1_rad) * sin(lat2_rad) - sin(lat1_rad) * cos(lat2_rad) * cos(lon2_rad - lon1_rad)brng = atan2(y, x) / pi * 180return float((brng + 360.0) % 360.0)
已知一点经纬度、方向角、目标距离,求下一点经纬度
import geopynode = (-22.8981672 -43.2219277)
distance = 1
#把int型距离转化为geopy.distance的格式,单位千米
distance = geopy.distance.geodesic(distance)#计算下一个点坐标
next = distance.destination(node, direction)
next_node = (next.latitude, next.longitude)
print(next_node)
haversin公式已知两点坐标求距离,精度逊于geopy
from math import cos, asin, sqrt, pi#haversin公式求球面两点间距离
def distance(lat1, lon1, lat2, lon2):r = 6731 # 地球平均半径p = pi / 180a = 0.5 - cos((lat2 - lat1) * p) / 2 + cos(lat1 * p) * cos(lat2 * p) * (1 - cos((lon2 - lon1) * p)) / 2return 2 * r * asin(sqrt(a))
geopy的根据坐标查地址,或者根据地址查坐标功能,博主没有用到,需要的移步这篇:Python地理位置信息库geopy的使用(一):基本使用
更多geopy应用见:geopy官方文档
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
