Membangun dari jawaban genorama di atas, Anda juga dapat mengubah output bkde2D menjadi raster daripada garis kontur, menggunakan nilai fhat sebagai nilai sel raster
library("leaflet")
library("data.table")
library("sp")
library("rgdal")
# library("maptools")
library("KernSmooth")
library("raster")
inurl <- "https://data.cityofchicago.org/api/views/22s8-eq8h/rows.csv?accessType=DOWNLOAD"
infile <- "mvthefts.csv"
## LOAD DATA
## Also, clean up variable names, and convert dates
if(!file.exists(infile)){
download.file(url = inurl, destfile = infile)
}
dat <- data.table::fread(infile)
setnames(dat, tolower(colnames(dat)))
setnames(dat, gsub(" ", "_", colnames(dat)))
dat <- dat[!is.na(longitude)]
dat[ , date := as.IDate(date, "%m/%d/%Y")]
## Create kernel density output
kde <- bkde2D(dat[ , list(longitude, latitude)],
bandwidth=c(.0045, .0068), gridsize = c(100,100))
# Create Raster from Kernel Density output
KernelDensityRaster <- raster(list(x=kde$x1 ,y=kde$x2 ,z = kde$fhat))
#create pal function for coloring the raster
palRaster <- colorNumeric("Spectral", domain = KernelDensityRaster@data@values)
## Leaflet map with raster
leaflet() %>% addTiles() %>%
addRasterImage(KernelDensityRaster,
colors = palRaster,
opacity = .8) %>%
addLegend(pal = palRaster,
values = KernelDensityRaster@data@values,
title = "Kernel Density of Points")
Ini adalah output Anda. Perhatikan bahwa nilai kerapatan rendah masih muncul sebagai berwarna di raster.
Kami dapat menghapus sel dengan kerapatan rendah ini dengan yang berikut:
#set low density cells as NA so we can make them transparent with the colorNumeric function
KernelDensityRaster@data@values[which(KernelDensityRaster@data@values < 1)] <- NA
#create pal function for coloring the raster
palRaster <- colorNumeric("Spectral", domain = KernelDensityRaster@data@values, na.color = "transparent")
## Redraw the map
leaflet() %>% addTiles() %>%
addRasterImage(KernelDensityRaster,
colors = palRaster,
opacity = .8) %>%
addLegend(pal = palRaster,
values = KernelDensityRaster@data@values,
title = "Kernel Density of Points")
Sekarang setiap sel raster dengan nilai kurang dari 1 transparan.
Jika Anda ingin raster yang di biner, gunakan fungsi colorBin daripada fungsi colorNumeric:
palRaster <- colorBin("Spectral", bins = 7, domain = KernelDensityRaster@data@values, na.color = "transparent")
## Leaflet map with raster
leaflet() %>% addTiles() %>%
addRasterImage(KernelDensityRaster,
colors = palRaster,
opacity = .8) %>%
addLegend(pal = palRaster,
values = KernelDensityRaster@data@values,
title = "Kernel Density of Points")
Untuk membuatnya lebih lancar, cukup tambahkan ukuran grid pada fungsi bkde2D. Ini meningkatkan resolusi raster yang dihasilkan. (Saya mengubahnya menjadi
gridsize = c(1000,1000)
Keluaran: