Desejo fornecer um exemplo de como plotar plotagens de mapa 3D com o pacote deckgl em R. Gero um gráfico de barras em um layout de mapa do Mapbox.
Primeiro, defino nossa função de geocodificação Open Street Map, encontrada em datascienceplus.com . Ele geocodifica strings de endereço em coordenadas de longitude e latitude usando a API Open Street Map (OSM-API).
## documentation: http://wiki.openstreetmap.org/wiki/Nominatim
# source: https://datascienceplus.com/osm-nominatim-with-r-getting-locations-geo-coordinates-by-its-address/
osm_geocoder <- function(address = NULL)
{
if(suppressWarnings(is.null(address)))
return(data.frame())
tryCatch(
d <- jsonlite::fromJSON(
gsub('\\@addr\\@', gsub('\\s+', '\\%20', address),
'http://nominatim.openstreetmap.org/search/@addr@?format=json&addressdetails=0&limit=1')
), error = function(c) return(data.frame())
)
if(length(d) == 0)
return(data.frame())
return(data.frame(lon = as.numeric(d$lon), lat = as.numeric(d$lat)))
}
Depois disso, construo uma lista com nomes de cidades. Eu alimento esta lista para a função de geocodificação, gerando assim um quadro de dados geocodificados.
city_list <- c("Frankfurt, Germany",
"Dortmund, Germany",
"Berlin, Germany",
"Stuttgart, Germany",
"Karlsruhe, Germany",
"Zurich, Switzerland",
"Wien, Austria",
"Bern, Switzerland",
"Munich, Germany",
"Marburg, Germany",
"Giessen, Germany",
"Pforzheim, Germany",
"Cologne, Germany",
"Essen, Germany",
"Heidelberg, Germany",
"Kassel, Germany",
"Paderborn, Germany",
"Leipzig, Germany",
"Dresden, Germany",
"Nuremberg, Germany",
"Augsburg, Germany",
"Regensburg, Germany",
"Pilsen, Czech Republic",
"Linz, Austria",
"Innsbruck, Austria",
"Bamberg, Germany",
"Fulda, Germany",
"Hanover, Germany",
"Wolfsburg, Germany",
"Magdeburg, Germany",
"Jena, Germany",
"Chemnitz, Germany",
"Zwickau, Germany",
"Cottbus, Germany",
"Bautzen, Germany",
"Mainz, Germany",
"Bonn, Germany",
"Duesseldorf, Germany",
"Trier, Germany",
"Mannheim, Germany",
"Aachen, Germany",
"Freiburg, Germany",
"Ulm, Germany",
"Kempten, Germany",
"Ingolstadt, Germany")
# lets generate a data frame that we can use for the add_grid_layer function
data_df_columns <- data.frame(matrix(nrow=3500*length(city_list),ncol=4))
colnames(data_df_columns) <- c("ADDRESS","RACKS","SPACES","COORDINATES")
data_df_columns$RACKS <- 2
data_df_columns$SPACES <- 4
for(i in 1:length(city_list)){
print(i)
dum_coord <- osm_geocoder(city_list[i])
for(j in 1:3500){
data_df_columns$ADDRESS <- paste0(city_list[i]," : ",j)
dum_long <- rnorm(1, mean=as.numeric(dum_coord[1]),sd=0.75)
dum_lat <- rnorm(1,mean=as.numeric(dum_coord[2]),sd=0.75)
data_df_columns$COORDINATES[(i-1)*3500+j] <- list(c(dum_long, dum_lat))
}
}
properties_grid <- list(
pickable = TRUE,
extruded = TRUE,
cellSize = 1600,
elevationScale = 8,
coverage = 0.5,
colorRange = list(c(0,255,255),
c(0,204,255),
c(0,153,255),
c(0,51,255),
c(0,0,255),
c(0,0,204)),
getPosition = JS("data => data.COORDINATES"),
getTooltip = JS("object => object.count")
)
Depois de ter um conjunto de dados com meus pontos de dados espaciais criados artificialmente, geocodificados com a função de geocodificação, posso plotá-los usando o pacote deckgl em R. Os mapas base são criados no Mapbox.
deckgl(zoom = 10, pitch = 120, longitude = 8.682092, latitude = 50.11064) %>%
add_grid_layer(data = data_df_columns,properties = properties_grid) %>%
add_mapbox_basemap(style = "mapbox://styles/linnartsf/cjq6p9q8f8zwf2rp74qf2o3d5")

Publiquei algumas outras postagens de visualização de dados espaciais em R que você pode querer conferir.

Cientista de dados com foco em simulação, otimização e modelagem em R, SQL, VBA e Python
Leave a Reply