【发布时间】:2015-06-05 20:31:32
【问题描述】:
如何向我的数据框中添加一个新列,其中包含每个观测值的测地距离?我的数据框中的行是对租用汽车的观察,包括旅行的起点(经度 + 纬度)和终点(经度 + 纬度)。
测地线距离使用以下 R 函数计算:
haversine<- function(long1, lat1, long2, lat2) {
stopifnot(is.numeric(long1),
is.numeric(lat1),
is.numeric(long2),
is.numeric(lat2),
long1 > -180,
long1 < 180,
lat1 > -180,
lat1 < 180,
long2 > -180,
long2 < 180,
lat2 > -180,
lat2 < 180
)
long1 <- long1*pi/180
lat1 <- lat1*pi/180
long2 <- long2*pi/180
lat2 <- lat2*pi/180
R <- 6371 # Earth mean radius [km]
delta.long <- (long2 - long1)
delta.lat <- (lat2 - lat1)
a <- sin(delta.lat/2)^2 + cos(lat1) * cos(lat2) * sin(delta.long/2)^2
c <- 2 * asin(min(1,sqrt(a)))
d = R * c
return(d) # Distance in km
}
用这个公式可以计算距离:
distance <- haversine(longitude1,latitude1,longitude2,latitude2)
由于我的数据框包含超过 100,000 个观测值,我想在我的数据框中添加一列,其中包含汽车旅行的所有测地线距离。
我试过了:
df["GeoDist"] <- haversine(LongitudeStart, LatitudeStart, LongitudeEnd, LatitudeEnd)
这导致了一个额外的列,但是该列中的所有距离都为零。当我使用前面的公式手动计算时,这些距离不为零。
【问题讨论】: