如何通过经纬度计算两点之间的距离
时间: 2023-05-11 07:02:00 浏览: 273
可以使用 Haversine 公式来计算两点之间的距离,公式如下:
a = sin²(Δlat/2) + cos(lat1) * cos(lat2) * sin²(Δlon/2)
c = 2 * atan2( √a, √(1−a) )
d = R * c
其中,lat1 和 lat2 分别为两点的纬度,lon1 和 lon2 分别为两点的经度,Δlat 和 Δlon 分别为两点纬度和经度的差值,R 为地球半径,d 为两点之间的距离。
以下是 Python 代码实现:
import math
def distance(lat1, lon1, lat2, lon2):
R = 6371 # 地球半径,单位为千米
lat1, lon1, lat2, lon2 = map(math.radians, [lat1, lon1, lat2, lon2])
dlat = lat2 - lat1
dlon = lon2 - lon1
a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2)**2
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
d = R * c
return d
# 示例
print(distance(39.9, 116.3, 31.2, 121.5)) # 1068.7 千米
相关问题
通过经纬度计算两点之间的距离的公式
通过经纬度计算两点之间距离的常用公式如下:
设点 A 的纬度为 $lat_A$,经度为 $lon_A$,点 B 的纬度为 $lat_B$,经度为 $lon_B$,则两点之间的距离 $d$ 为:
$d = R \cdot \arccos(\sin(lat_A) \cdot \sin(lat_B) + \cos(lat_A) \cdot \cos(lat_B) \cdot \cos(lon_B - lon_A))$
其中 $R$ 为地球半径,一般取值为 $6371$ 公里。
注意:纬度和经度都是弧度制,所以需要把角度制转换成弧度制。可以使用以下公式:
$radians = \frac{\pi}{180} \cdot degrees$
$degrees = \frac{180}{\pi} \cdot radians$
高德地图根据经纬度计算两点之间距离
在高德地图中,你可以利用高德地图提供的`AMap.Geocoder`和`AMap.distanceTransform`服务来计算两点之间的经度纬度距离。以下是一个简单的步骤:
1. 首先,你需要获取到两点的经纬度信息,例如:
```javascript
var point1 = new AMap.LngLat(x1, y1); // x1,y1是经度和纬度
var point2 = new AMap.LngLat(x2, y2);
```
2. 然后创建一个Geocode实例,用于解码地址坐标:
```javascript
var geocoder = new AMap.Geocoder();
```
3. 调用`geocode`方法将经纬度转换为地址点,然后获取地址点的位置:
```javascript
geocoder.getAddress(point1).then(function(result) {
if (result.info === 'OK') {
point1 = result.regeocode.point;
}
});
geocoder.getAddress(point2).then(function(result) {
if (result.info === 'OK') {
point2 = result.regeocode.point;
}
});
```
4. 使用`distanceTransform`服务计算两点之间的距离:
```javascript
var distanceTransform = new AMap.DistanceTransform();
var distance = distanceTransform.calculateDistance(point1, point2);
```
`distance`将会返回两点间的距离,单位默认为米。
注意:`getAddress`方法可能会有延时,因为需要向服务器请求地址解析。如果速度要求较高,可以预先缓存经纬度对应的地址点。
阅读全文