在城市上创建六边形网格并与lon / lat点相关联(在R中)

时间:2017-03-19 23:42:33

标签: r geospatial raster sp rgdal

我已经研究了一段时间了,但是没有遇到任何符合我需要的解决方案,或者我可以充分改造以适应我的情况:

我有一个大型汽车共享多个城市的数据集,其中我有每个位置的充电需求(例如,行= carID,55.63405,12.58818,充电需求)。我现在想把城市上方的区域(上面的示例是哥本哈根)分成六边形网格并用ID标记每个停车位置(例如,行= carID,55.63405,12.58818,充电需求,单元格ABC),所以我知道哪个它所属的六角形细胞。

所以我的问题是双重的: (1)如何在这个区域创建这样一个边长为124米(约40000平方米,相当于200x200米,但六边形更好)的蜂窝网格:

my_area <- structure(list(longitude = c(12.09980, 12.09980, 12.67843, 12.67843), 
                       latitude = c(55.55886, 55.78540, 55.55886, 55.78540)), 
                  .Names = c("longitude", "latitude"), 
                  class = "data.frame", row.names = c(NA, -4L))

(2)如何将地图上的所有点与某个网格单元关联起来?

我真的迷失在这一点上,我试图使用大量的软件包,如rgdal,hexbin,sp,raster,rgeos,rasterVis,dggridR,......但是没有一个能让我到达我想去的地方。非常感谢帮助!

停车数据示例:

                  id latitude longitude           timestamp charging_demand
1: WBY1Z210X0V307780 55.68387  12.60167 2016-07-30 12:35:07              22
2: WBY1Z210X0V307780 55.63405  12.58818 2016-07-30 16:35:07              27
3: WBY1Z210X0V307780 55.68401  12.49015 2016-08-02 16:00:08              44
4: WBY1Z210X0V307780 55.68694  12.49146 2016-08-03 13:40:07               1
5: WBY1Z210X0V307780 55.68564  12.48824 2016-08-03 14:00:07              66
6: WBY1Z210X0V307780 55.66065  12.60569 2016-08-04 16:19:15              74

1 个答案:

答案 0 :(得分:2)

我认为你确实可以使用hexbin包。像这样调用函数:

h <- hexbin(data_x, data_y, nbins, range_x, range_y, IDs = TRUE)

结果有一列cID,告诉您观察所在的单元格。你可以使用它来例如计算每个细胞的平均充电需求:

tapply(charging_demand, h@cID, FUN = function(z) sum(z)/length(z))

此外,您可以使用hcell2xy获取可用于使用ggplot进行绘图的坐标。例如,您可以查看此answer