import mathdef distance(lat1, lon1, lat2, lon2): R = 6371 # 地球半径,单位为公里 dLat = math.radians(lat2 - lat1) dLon = math.radians(lon2 - lon1) a = math.sin(dLat / 2) * math.sin(dLat / 2) + \ math.cos(math.radians(lat1)) * math.cos(math.radians(lat2)) * \ math.sin(dLon / 2) * math.sin(dLon / 2) c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)) return R * c * 1000 # 返回距离,单位为米# 示例坐标lat1, lon1 = 39.9087, 116.3975# 判断另一个点是否在 500 米范围内lat2, lon2 = 39.9087, 116.401if distance(lat1, lon1, lat2, lon2) <= 500: print('在范围内')else: print('不在范围内')
时间: 2023-05-21 10:00:48 浏览: 95
这是一个Python函数,用于计算两个经纬度坐标点之间的距离。其中,lat1和lon1表示第一个点的纬度和经度,lat2和lon2表示第二个点的纬度和经度。R表示地球半径,这里取值为6371千米。函数中使用了math库中的sin、cos、sqrt等函数来进行计算。
相关问题
# k-means 算法的支持函数:球面距离计算(补全代码) """ Parameters: vecA - 点A向量 vecB - 点B向量 Returns: 球面距离 """ #d = R * arccos(sin(纬度1) * sin(纬度2) + cos(经度1) * cos(经度2) * cos(经度2 - 经度1)) #R=6371(地球半径) def distSLC(vecA, vecB):
以下是可能的代码实现:
```
import numpy as np
def distSLC(vecA, vecB):
"""
计算两个经纬度坐标点之间的球面距离
@param vecA: 经纬度1,形如 [longitude1, latitude1]
@param vecB: 经纬度2,形如 [longitude2, latitude2]
@return: 两个经纬度坐标点之间的球面距离
"""
# 补全代码
# 将经纬度转换为弧度
lon1, lat1, lon2, lat2 = np.radians([vecA[0], vecA[1], vecB[0], vecB[1]])
# 使用 Haversine 公式计算球面距离
dlon = lon2 - lon1
dlat = lat2 - lat1
a = np.sin(dlat / 2) ** 2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon / 2) ** 2
c = 2 * np.arcsin(np.sqrt(a))
r = 6371 # 地球半径,单位为公里
return c * r
```
该函数接收两个参数,分别为两个经纬度坐标点的经度和纬度,计算它们之间的球面距离并返回。在实现中,我们使用 `numpy` 库将经纬度转换为弧度,然后使用 Haversine 公式计算球面距离。最后,我们将球面距离乘以地球半径,得到距离的单位为公里。
// 计算两者之间的距离 distance() { const R = 6371; // 地球半径,单位千米 const lat1 = this.markers[0].latitude; const lon1 = this.markers[0].longitude; const lat2 = this.markersn[0].latitude const lon2 = this.markersn[0].longitude const dLat = this.rad(lat2 - lat1); const dLon = this.rad(lon2 - lon1); const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(this.rad(lat1)) * Math.cos(this.rad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2); const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); const d = R * c * 1000; // 转为米 return d.toFixed(2); }, // 辅助方法,将角度转为弧度 rad(d) { return d * Math.PI / 180.0; }, uniapp中,令以上代码每隔一秒钟便自动调用一次
你可以使用 `setInterval` 函数来实现每隔一秒钟自动调用 `distance` 方法。
示例代码:
```javascript
// 在页面加载完成后调用
mounted() {
// 每隔一秒钟调用一次 distance 方法
setInterval(() => {
const d = this.distance();
console.log(`距离为:${d} 米`);
}, 1000);
},
```
请注意,`setInterval` 函数的第二个参数是时间间隔,单位是毫秒。在上面的示例中,我们将时间间隔设置为 1000 毫秒(即 1 秒钟)。