【问题标题】:Calculate distance between two long lat coordinates in a dataframe计算数据框中两个长纬度坐标之间的距离
【发布时间】:2017-06-26 10:39:02
【问题描述】:

我想计算几个 GPS 点之间的距离。 我试过了

distm(c(lon1,lat1), c(lon2,lat2), fun = distHaversine)

这仅适用于一点,但不适用于我的数据框中的列。

所以我按照这里的建议尝试了:

Calculate distance between 2 lat longs

但是对于这两个计算,我确实得到了不同的结果:

df <- read.table(sep=",", col.names=c("lat1", "lon1", "lat2", "lon2"),text="
7.348687,53.36575,7.348940,53.36507 
7.348940, 53.36507,7.350939,53.36484")


# as recommended in the link above
distHaversine(df[,2:1], df[,4:3])

[1]  80.18433 223.97181

# with distm
distm(c(7.348687,53.36575), c(7.348940,53.36507), fun = distHaversine)

         [,1]
[1,] 77.54033

distm(c(7.348940, 53.36507), c(7.350939,53.36484), fun = distHaversine)

         [,1]
 [1,] 135.2317

那么如何计算数据框列中两个 GPS 点之间的正确距离(即 distm(c(lon1,lat1), c(lon2,lat2), fun = distHaversine))?我仔细检查了如此多的距离,以至于我知道我以这种方式得到了正确的距离。

提前致谢。

【问题讨论】:

    标签: r distance


    【解决方案1】:

    鉴于您要存储在新列中的输出是这样的:

    77.54033 135.23165
    

    试试这个

    df$distance<-distHaversine(df[,1:2], df[,3:4])
    

    哪个应该返回

    > df
          lat1     lon1     lat2     lon2  distance
    1 7.348687 53.36575 7.348940 53.36507  77.54033
    2 7.348940 53.36507 7.350939 53.36484 135.23165
    

    【讨论】:

    • 也许我应该更精确一点。我的数据框包含 250 行,这使得数据的更改更加复杂。此外,我想将输出作为另一列。
    【解决方案2】:

    问题到底是什么?你不是已经有了distHaversine() 所需的所有距离吗?

    您想将距离添加为数据框中的列吗?给你:

    f$dist <- distm(x = df[, c('lon1', 'lat1')], 
                    y = df[, c('lon2', 'lat2')],
                    fun = distHaversine
                    )
    

    【讨论】:

      【解决方案3】:

      我找到了解决问题的另一种方法

      for (i in 1:2) {
      
        a<-df$lon1[i]
        b<-df$lat1[i]
        c<-df$lon2[i]
        d<-df$lat2[i]
      
        df$distance[i]<-distm(c(a,b),c(c,d), fun = distHaversine)
        }
      
      write.xlsx(df, file = "C:/Users/distances.xlsx")
      

      【讨论】:

        猜你喜欢
        • 2013-09-01
        • 2011-09-16
        • 2015-11-05
        • 1970-01-01
        • 1970-01-01
        • 2018-06-11
        • 2020-02-12
        • 2018-06-12
        • 1970-01-01
        相关资源
        最近更新 更多