2014-02-10 108 views
0

我有由三列,「部分一致」「經度」和「緯度」從經度和緯度的列表中找到的接近點

Point_Name    Longitude Latitude 
University of Arkansas 36.067832 -94.173655 
Lehigh University  40.601458 -75.360063 
Harvard University  42.379393 -71.115897 

的數據幀是否存在的R包我可以用它來計算距離每個點之間?其目的是讓R「測量」點之間的距離,然後產生一個點的數據幀,該點的另一個點在距離半徑「X」(例如500米)內或產生一個像這樣的數據幀...

Point_Name    Longitude Latitude Nearest_Point  Distance_km 
University of Arkansas 36.067832 -94.173655 Lehigh University 1750   
Lehigh University  40.601458 -75.360063 Harvard University 450 
Harvard University  42.379393 -71.115897 Lehigh University 450 
+0

這可能會有幫助。我還沒有嘗試過:http://r.789695.n4.nabble.com/Geographic-distance-between-lat-long-points-in-R-td3442338.html特別是,您可以嘗試dirknbr提供的代碼。 –

+0

當我使用dirknbr提供的代碼時,我得不到與使用網站時相同的結果:http://www.movable-type.co.uk/scripts/latlong.html這也提供了代碼,但不是R.如果沒有人在24小時內回答,我可能會嘗試將第二個網站上的代碼轉換爲R,看看我能否重現估計。 –

回答

0

這個怎麼樣

df<-read.table(header=T, text="Point_Name|Longitude|Latitude 
University of Arkansas|36.067832|-94.173655 
Lehigh University|40.601458|-75.360063 
Harvard University|42.379393|-71.115897", sep="|") 

great_circle_distance <- function(lat1, long1, lat2, long2) { 
    a <- sin(0.5 * (lat2*pi/180 - lat1*pi/180)) 
    b <- sin(0.5 * (long2*pi/180 - long1*pi/180)) 
    12742 * asin(sqrt(a * a + cos(lat1*pi/180) * cos(lat2*pi/180) * b * b)) 
} 

cross<-expand.grid(1:nrow(df),1:nrow(df)) 

cross$dist<-apply(cross,1,function(x){great_circle_distance(df[x[1],3], 
               df[x[1],2], 
               df[x[2],3], 
               df[x[2],2]) 
} 
    ) 

cross$from<-df[cross$Var1,1] 
cross$to<-df[cross$Var2,1] 

require(plyr) 
ddply(cross[cross$Var1!=cross$Var2,],.(from),summarise,min(dist),to[dist==min(dist)]) 

from  ..1    ..2 
1  Harvard University 475.3078 Lehigh University 
2  Lehigh University 475.3078 Harvard University 
3 University of Arkansas 2090.8387 Lehigh University 
+0

距離單位是多少? –

+0

在原始文章中提供的經緯度單位是度。從羅塞塔石碑的功能,將它們轉換爲弧度:http://rosettacode.org/wiki/Haversine_formula#R您的代碼不包括代碼轉換爲弧度,這或許可以解釋爲什麼你的距離是如此之大。 –

+0

對不起應該是km,但忘記了輸入的度數不是弧度。我已經更新了配方,它應該是在千米 – Troy

相關問題