下载本文代码
如何计算地图中两点距离及角度
例如北京市北纬40.1,东经116.6; 哈尔滨市北纬45.7567, 东经126.6424
感兴趣的童鞋也可去看问题出处
在回答中,看到有地理信息系统Python包geographiclib,可以计算两点距离和角度。
安装geographiclib
https://geographiclib.sourceforge.io/1.52/python/
!pip3 install geographiclib==1.52
计算距离
注意,在接下来的计算中,将北纬、东经表示为正数。将南纬、西经表示为负数。
def distance(beiwei1, dongjing1, beiwei2, dongjing2):
"""
beiwei1: 地点1的纬度数,如果地点在北半球,北纬为正;反之为负。
dongjing1: 地点2的经度数, 如果位于东半球,东经数为正;反之为负
beiwei2: 地点2的纬度数
dongjing2: 地点2的经度数
"""
from geographiclib.geodesic import Geodesic
geod = Geodesic.WGS84
g = geod.Inverse(beiwei1, dongjing1, beiwei2, dongjing2)
distance = g['s12']/1000
return distance
#北京Beijing与哈尔滨harbin
distance(40.1, 116.6, 45.7567, 126.6424)
Run
1031.617791888516
方位角azimuth
两个地点在地图中所处的相对位置,称之为方位角azimuth。方位角最大度数360度,
- 0度表示正北
- 90度表示正西
- 180度表示正南
- 270度表示正西
- 360度表示正北
def azimuth(beiwei1, dongjing1, beiwei2, dongjing2):
"""
beiwei1: 地点1的纬度数,如果地点在北半球,北纬为正;反之为负。
dongjing1: 地点2的经度数, 如果位于东半球,东经数为正;反之为负
beiwei2: 地点2的纬度数
dongjing2: 地点2的经度数
"""
from geographiclib.geodesic import Geodesic
geod = Geodesic.WGS84
l = geod.InverseLine(beiwei1, dongjing1, beiwei2, dongjing2)
s12 = distance(beiwei1, dongjing1, beiwei2, dongjing2)
g = l.Position(s12, Geodesic.STANDARD | Geodesic.LONG_UNROLL)
return g['azi2']
#北京 哈尔滨
azimuth(40.1, 116.6, 45.7567, 126.6424)
56.03961942267271
按照azimuth定义,56度的解读为 哈尔滨位于北京的东北方向。
同理可以计算西安与杭州
#西安, 杭州
azimuth(34.2658, 108.9541, 30.2741, 120.1552)
115.1506923699206
杭州位于西安的115度,即东南方向