2016-04-14 19 views
0
kullanılarak vektörler lat birden lon arasındaki mesafeyi hesaplamak için

My veri setinasıl R

a 
Location loc.Lon loc.Lat Pincode  pin.lon  pin.lat 
SPM  79.94533 12.97025 "602105" 79.95285  12.96752 
SPM  79.94533 12.97025 "602106" 79.88568  12.91943 

I (loc.Lon, loc.Lat) arasındaki mesafeyi hesaplamak istiyor (pin.lon aşağıda- gibidir, pin.de) paketi ggmap kullanarak her iki pin kodu için.

Ben aşağıdaki kodu çalıştırdığınızda, ben istenilen sonucu elde -

mapdist(c(a$loc.Lon[2], a$loc.Lat[2]), c(a$pin.lon[2],a$pin.lat[2]), mode = "driving") 

ama set tüm veriler için aşağıdaki sorgu çalıştırdığınızda, bir hata alıyorum -

a$dist = mapdist(c(a$loc.Lon, a$loc.Lat), c(a$pin.lon,a$pin.lat), mode = "driving") 

anladığım hata - Lütfen sıralamaya başlamanıza yardımcı olun.

cevap

3

mapdistfrom ve to bağımsız değişkenleri için vektörleri kabul eder, böylece bunları dönüştürüp bu işlevi her veri kümesine uygulayabilirsiniz. verilerinize doğrudan mapdist çağrılırken as.character() ve paste0() bunları birlikte

get_km_from_mapdist <- function(i) { 
    mapdist(as.numeric(a[i, c('loc.Lon','loc.Lat')]), 
      as.numeric(a[i, c('pin.lon','pin.lat')]), 
      mode='driving')$km 
} 

a$dists = sapply(1:nrow(a), get_km_from_mapdist) 
1

Cast koordinatları dizeleri olarak:

Eğer km mesafe istediğiniz varsayalım.

a$dist_km <- mapdist(from = paste0(as.character(a$loc.Lat),",",as.character(a$loc.Lon)), 
        to = paste0(as.character(a$pin.Lat),", ",as.character(a$pin.Lon)))[,c('km')]