我有两个数据框,
DF1
和DF2
,包含北美尺度的经度/纬度空间数据,它们的投影是EPSG:4326
。我想计算 M1
的 y 坐标的平均值 (DF1
) 和 M2
的 y 坐标的平均值 (DF2
) 之间的差值,并且我希望表达差值以公里为单位。在我的情况下,我不确定使用哪种投影系统将经度和纬度转换为公里。
我发现了函数
terra::expanse()
通过使用经度/纬度 CRS 来计算非 NA 的栅格单元覆盖的区域。据说最好用经纬度CRS来计算面积。
我找不到这个函数的源代码,看看是否有办法将值
M1
和 M2
转换为 km。我是GIS新手,非常感谢您的帮助。这是我的数据框以及值 M1
和 M2
的摘要:
> summary(DF1 [,c(“x”, “y”)])
decimalLongitude decimalLatitude
Min. :-171.62 Min. :14.88
1st Qu.:-118.62 1st Qu.:41.88
Median :-103.38 Median :53.38
Mean :-104.81 Mean :51.95
3rd Qu.: -87.88 3rd Qu.:63.62
Max. : -52.88 Max. :76.38
> summary(DF2 [,c(“x”, “y”)])
decimalLongitude decimalLatitude
Min. :-171.62 Min. :15.62
1st Qu.:-118.62 1st Qu.:42.12
Median :-103.12 Median :53.38
Mean :-104.70 Mean :52.04
3rd Qu.: -87.88 3rd Qu.:63.62
Max. : -52.88 Max. :76.38
> M1 <- mean(DF1[,c(“y”)], na.rm = TRUE)
> M1
[1] 51.95062
> M2 <- mean(DF2[,c(“y”)], na.rm = TRUE)
> M2
[1] 52.03755
> M2 - M1
[1] 0.08692784 ## how to convert to km ?
您可以使用
geosphere::distm
计算第一个 data.frame 中的每个点到第二个 data.frame 中的每个点的距离
示例数据
d1 <- data.frame(lon=0:1, lat=0:1)
d2 <- data.frame(lon=30:33, lat=20:23)
解决方案
m <- geosphere::distm(d1, d2, distGeo)
mean(m) / 1000
#[1] 4088.824