2017-01-15 11 views
2

私は掃除が必要なAddressIdsの大きなデータセットを持っています。エンドユーザーはAddressId自体に属する座標を入力することができ、結果としていくつかのAddressIdは多少(> 20)の経度と緯度がわずかに異なることがあります。例えばだから:Rの真のアドレスの場所を決定する方法

AddressID  Longitude  Latitude 
1234   77.037692  38.89864 
1234   77.037872  38.88775 
1234   77.048522  38.78553 

今、私は経度を決定したいとどの緯度は、座標が多少異なるとして、それが不可能であるように、中央値か何かを取るR.から助けを借りて、最も正確であるとはほぼ絶対に同じ座標が入力されたことはありません。

私の考えは、他の経度(それぞれの緯度)との最短距離の経度(それぞれの緯度)が最も正確なものでなければならないということです。今私はこのような質問に答えるためにどのパッケージとメソッドを使うのがベストかと思っています。

+0

何か関連しています! http://gis.stackexchange.com/questions/7555/computing-an-averaged-latitude-and-longitude-coordinates –

+0

AddressIdのレコードが2つしかない場合、最も正確なレコードはどのようになりますか?平均2つのレコードか、無作為に1つを選択しますか? – raymkchow

+0

ggmapパッケージを見てください。関数ジオコードは、Googleに基づいて住所の緯度と経度を返します。もちろん、これが「真の」ものであるかどうかはまだ議論の余地があります。 – Dave2e

答えて

2

私はコメントでリンク方法、必要なだけ基本機能を使用して行かなかった:

# Read in data. 
df <- read.table(header = TRUE, text = "AddressID  Longitude  Latitude 
1234   77.037692  38.89864 
       1234   77.037872  38.88775 
       1234   77.048522  38.78553") 


# Get the radians. 
df$LongitudeRadians <- df$Longitude * pi/180 
df$LatitudeRadians <- df$Latitude * pi/180 

# Get the cartesian coordinates. 
df$x <- sin(df$LatitudeRadians) * cos(df$LongitudeRadians) 
df$y <- sin(df$LatitudeRadians) * sin(df$LongitudeRadians) 
df$z <- cos(df$LatitudeRadians) 

# Get the means. 
avgs <- aggregate.data.frame(df[c(1,6:8)], by = list(df$AddressID), FUN = "mean") 

# Convert back to degrees. 
avgs$LongitudeRadians <- atan2(avgs$y, avgs$x) 
avgs$LatitudeRadians <- atan2(sqrt(avgs$x^2 + avgs$y^2), avgs$z) 

avgs$Longitude <- avgs$LongitudeRadians * 180/pi 
avgs$Latitude <- avgs$LatitudeRadians * 180/pi 

avgs <- avgs[c(2,8:9)] 

結果が分別異なるだけで、おそらくあなたのために、経度と緯度の手段をやってすることです与えられたlong/latはとても近いです。

しかし、今日、私は球面座標系について何かを学んだので、もしこれが地獄に落とされたとしても、私は楽しんだ。

関連する問題