2016-03-30 31 views
0

現在私は分類プロジェクトを行っています。私が使用しているデータには緯度/経度の属性が含まれています。モデルを単純にするために、生の座標を「グリッド」の単一の列に置き換えるほうが簡単かもしれないと思っています。R - 緯度と経度をグリッド番号に変換

これは、座標が任意の数のグリッドポイントをカバーし、グリッド内の各四角に番号をつけて、緯度/経度を置き換えるグリッド番号に置き換えることを意味します。たとえば、9正方形の格子は、次のようになります。私はここやGoogleで検索するの公平なビットをやったし、解決策を見つけるように見えることはできません

123 
456 
789 

。一番近いのはユニバーサル横メルカトル座標系(一部のRパッケージでサポートされています)ですが、このグリッド内の四角は大きすぎます。グリッドのサイズを自分で設定できるようにしたいと思います。

私は少し紛失していて、このフォーラムの親切な人々が、私が望むものを達成するためのRパッケージまたは技術を知っているかどうか疑問に思っていました。私は緯度/経度の列の例を追加します。ありがとう。

Latitude Longitude 
41.95469 -87.800991 
41.95469 -87.800991 
41.994991 -87.769279 
41.974089 -87.824812 
41.974089 -87.824812 
41.9216  -87.666455 
41.891118 -87.654491 
41.867108 -87.654224 
41.867108 -87.654224 
41.896282 -87.655232 
41.919343 -87.694259 
+0

に動作しますが、あなたは 'SP :: point.in.polygon'を試みたことがありますか?任意のポリゴン(四角形など)を生成し、すべての点をチェックすることができます。 – r2evans

+0

私はセンサスのブロック内部点を通常のグリッドにマッピングする同様の課題に遭遇しました。その場合、グリッド(expand.grid(lon = seq(-87.9、-87.6,0.1)、lat = seq(41.8,42、0.66)))を作成し、元のデータフレームを繰り返して各点を割り当てました元のデータフレーム内のグリッドの最も近いメンバに転送されます。エレガントではありませんが機能的です。 – jclouse

答えて

0

特にエレガントされないが、これは

pos <- data.frame(lat=c(
41.95469, 
41.95469,  
41.994991, 
41.974089, 
41.974089, 
41.9216,  
41.891118, 
41.867108, 
41.867108, 
41.896282, 
41.919343), 
long=c(
-87.824812, 
-87.769279, 
-87.800991, 
-87.800991, 
-87.824812, 
-87.666455, 
-87.654491, 
-87.654224, 
-87.654224, 
-87.655232, 
-87.694259)) 

gridx <- seq(from=-87.9,to=-87.6,by=0.01) 
gridy <- seq(from=41.8,to=42,by=0.01) 
xcell <- unlist(lapply(pos$long,function(x) min(which(gridx>x)))) 
ycell <- unlist(lapply(pos$lat,function(y) min(which(gridy>y)))) 
pos$cell <- (length(gridx) - 1) * ycell + xcell 
+0

それは仕事をするようです。ありがとうございます。 – Gary866

関連する問題