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

Create hexagonal grid over city and associate with lon / lat points (in R)

我已经对此进行了一段时间的研究,但还没有找到适合我的需要或者我可以充分转换以在我的案例中工作的任何解决方案:

我有多个城市的大型汽车共享数据集,其中我有每个位置的充电需求(例如行 = 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,...但是 none 它们让我我想去的地方。非常感谢您的帮助!

停车数据示例:

                  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

我认为您确实可以使用 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 绘图的坐标。例如,您可以查看此 .