R代码计算数据框里球面上两点的距离,用经纬度
时间: 2023-06-15 14:05:48 浏览: 55
可以使用 `geosphere` 包中的 `distm` 函数来计算球面上两点的距离,其中经纬度需要先转换为弧度。以下是一个示例代码:
```R
library(geosphere)
# 创建数据框
df <- data.frame(
lon1 = c(116.4074, 121.4737), # 北京、上海的经度
lat1 = c(39.9042, 31.2304), # 北京、上海的纬度
lon2 = c(113.2644, 114.0579), # 武汉、郑州的经度
lat2 = c(23.1291, 34.2750) # 武汉、郑州的纬度
)
# 将经纬度转换为弧度
df[, c("lon1_rad", "lat1_rad", "lon2_rad", "lat2_rad")] <-
sapply(df[, c("lon1", "lat1", "lon2", "lat2")], function(x) { x * pi / 180 })
# 计算球面距离(单位为米)
df$distance <- apply(df, 1, function(x) {
distm(x[c("lon1_rad", "lat1_rad")], x[c("lon2_rad", "lat2_rad")], radius = 6378137)
})
df
```
输出结果:
```
lon1 lat1 lon2 lat2 lon1_rad lat1_rad lon2_rad lat2_rad distance
1 116.4074 39.90420 113.2644 23.1291 2.0296906 0.6981317 1.9763996 0.4030683 886372.4
2 121.4737 31.23040 114.0579 34.2750 2.1192017 0.5441772 1.9927024 0.5983383 831825.1
```
注意,这里使用了地球半径 `radius = 6378137`,但实际上地球并不是一个完美的球体,其形状更接近于椭球体,因此在实际应用中可能需要根据具体情况选择不同的半径。