R - 将纬度和经度转换为网格数

时间:2016-03-30 16:34:48

标签: r machine-learning coordinates

我目前正在进行分类项目,而我使用的数据包括lat / long属性。为了简化模型,我认为用一列“网格”替换原始坐标可能更容易。号。

我的意思是将坐标覆盖的区域切割成任意数量的网格点,对网格中的每个方格进行编号,然后将纬度/长度数字替换为它们所属的网格数。例如,9平方网格看起来像这样:

123
456
789

我已经在这里和谷歌进行了相当多的搜索,似乎无法找到解决方案。我能找到的最接近的是Universal Transverse Mercator坐标系(有些R包支持),但是这个网格中的方块太大了。我希望能够自己设置网格的大小。

我有点茫然,并且想知道这个论坛的善良人士是否知道任何R套餐或技术来实现我的目标。我将附加我的lat / long列的示例。感谢。

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

1 个答案:

答案 0 :(得分:1)

不是特别优雅,但这有效

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