使用R语言ggmap包get_stamenmap函数时curl报错求助
解决ggmap中get_stamenmap无法解析tile.stamen.com的问题
问题详情
调用ggmap的get_stamenmap函数时触发DNS解析错误:
error in curl::curl_fetch_memory(url, handle = handle). Could not resolve host: tile.stamen.com
执行代码:
mapa_aysen <- get_stamenmap(bbox = bbox_aysen,maptype = "toner-background", zoom=8)
已排查过:网络连接正常、URL和地图类型无误、curl包已更新、代理配置正确,但问题仍存在。
可行解决思路
切换Stamen瓦片的子域名
默认的tile.stamen.com可能在部分地区解析异常,尝试切换到a/b/c子域名,手动指定url参数:mapa_aysen <- get_stamenmap(bbox = bbox_aysen, maptype = "toner-background", zoom=8, url = "http://a.tile.stamen.com/{maptype}/{z}/{x}/{y}.png")可以轮流试a、b、c三个子域名,总有一个能正常解析。
更换本地DNS服务器
本地DNS无法解析域名是常见原因,把系统DNS改成公共DNS(比如Cloudflare的1.1.1.1或谷歌的8.8.8.8),重启R后再执行代码。用curl单独测试瓦片访问
先排除R包层面的问题,直接用curl测试具体瓦片地址:library(curl) # 替换成对应你需求的瓦片地址,这里用一个示例地址 test_url <- "http://tile.stamen.com/toner-background/8/100/100.png" resp <- curl_fetch_memory(test_url) print(resp$status_code)如果返回200,说明网络没问题,再检查ggmap的参数;如果还是报错,就得排查系统防火墙、网络路由这类底层问题。
换用其他包获取Stamen地图
如果ggmap的问题一直无法解决,试试maptiles包,它也支持Stamen地图,语法类似:library(maptiles) mapa_aysen <- get_tiles(bbox = bbox_aysen, provider = "Stamen.TonerBackground", zoom = 8)
内容的提问来源于stack exchange,提问作者Pablo Flores Oñat
相关产品推荐
相关产品推荐

