我想使用工具"样式向导"从谷歌地图到R中创建特定的地图样式 (https://mapstyle.withgoogle.com/)
样式向导很容易用于像我这样的编程新手,并提出了一段名为JSON的代码,显然可以在R中使用它来告诉get_googlemap()函数如何创建特定的样式化地图。 这篇文章在2015年的博客文章中有详细描述: https://www.r-bloggers.com/creating-styled-google-maps-in-ggmap/
我试图调整这个策略,但是有些事情必须改变,因为博客上描述的代码不再起作用(或者当我运行它时不起作用?)。
要指定我收到警告消息:
" panel.margin
已弃用。请改用panel.spacing
属性"
并且生成的地图根本不需要。 see picture here, left side is how it should be, right side is what I get
任何想法/提示需要调整才能使其发挥作用?
(是的,我知道get_googlemap()函数有参数" style"它可以指定这些东西,它只是很难和精心使用,我想如果有办法利用这个样式来自谷歌地图的向导,这将是非常好的!)
谢谢大家
我使用与此处博客文章(https://www.r-bloggers.com/creating-styled-google-maps-in-ggmap/)中描述的完全相同的代码:
library("RJSONIO")
library("ggmap")
library("magrittr")
style <- '[
{
"stylers": [
{ "saturation": -100 },
{ "gamma": 0.5 }
]
},{
"featureType": "poi.park",
"stylers": [
{ "color": "#ff0000" }
]
}
]'
style_list <- fromJSON(style, asText=TRUE)
create_style_string<- function(style_list){
style_string <- ""
for(i in 1:length(style_list)){
if("featureType" %in% names(style_list[[i]])){
style_string <- paste0(style_string, "feature:",
style_list[[i]]$featureType, "|")
}
elements <- style_list[[i]]$stylers
a <- lapply(elements, function(x)paste0(names(x), ":", x)) %>%
unlist() %>%
paste0(collapse="|")
style_string <- paste0(style_string, a)
if(i < length(style_list)){
style_string <- paste0(style_string, "&style=")
}
}
# google wants 0xff0000 not #ff0000
style_string <- gsub("#", "0x", style_string)
return(style_string)
}
style_string <- create_style_string(style_list)
mymap <- ggmap(get_googlemap("chicago", size=c(800,800),
style=style_string), extent="device")
ggsave(filename="pics/mymap.png", width=8, height=8)