在他的文章中,Kyle Walker展示了一种在Leaflet中制作Voronoi多边形的方法。他通过以下代码绘制了Fort Worth每家星巴克咖啡馆周围的Voronoi多边形:
library(leaflet); library(rgeos)
library(rgdal); library(spatstat)
library(maptools)
starbucks <- read.csv('starbucks.csv')
fw <- subset(starbucks, City == 'Fort Worth')
coords <- cbind(fw$Longitude, fw$Latitude)
## Spatial points w/the WGS84 datum
sp_fw <- SpatialPointsDataFrame(coords = coords, data = fw,
proj4string = CRS("+proj=longlat +datum=WGS84"))
sp_fw_proj <- spTransform(sp_fw, CRS("+init=epsg:26914"))
fw_coords <- sp_fw_proj@coords
## Create the window for the polygons
window <- owin(range(fw_coords[,1]), range(fw_coords[,2]))
## Create the polygons
d <- dirichlet(as.ppp(fw_coords, window))
## Convert to a SpatialPolygonsDataFrame and calculate an "area" field.
dsp <- as(d, "SpatialPolygons")
dsp_df <- SpatialPolygonsDataFrame(dsp,
data = data.frame(id = 1:length(dsp@polygons)))
proj4string(dsp_df) <- CRS("+init=epsg:26914")
dsp_df$area <- round((gArea(dsp_df, byid = TRUE) / 1000000), 1)
dsp_xy <- spTransform(dsp_df, CRS("+proj=longlat +datum=WGS84"))
## Map it!
leaflet() %>%
addMarkers(data = fw,
lat = ~ Latitude,
lng = ~ Longitude,
popup = fw$Name) %>%
addPolygons(data = dsp_xy,
color = "green",
fill = "green",
popup = paste0("Area: ",
as.character(dsp_xy$area),
" square km")) %>%
addTiles()
我想给他的地图添加一个额外的功能:我想为一个多边形分配一个特定的颜色。该颜色取决于最近标记(质心)的特征。
例如,用星巴克的质心“绿色”着色每个多边形,并用唐恩·肯德基的质心“紫色”着色。(假设starbucks.csv也包括唐恩·肯德基的坐标)
换句话说,我想将质心(“fw”)的数据与其所属的多边形(“dsp_xy”)的数据合并。
有人能帮我解决这个问题吗?
sp::over
会有用。 - user3603486