使用googleVis的gvisMap部署网站地图时缺失API密钥报错求助
解决googleVis gvisMap部署网站时API密钥缺失的问题
你的问题根源在于Google Maps JavaScript API现在强制要求使用API密钥访问,而googleVis默认使用的旧版Google Loader(https://www.google.com/jsapi)已经被弃用,无法正确传递API密钥,导致部署到网站时触发权限报错。下面给你两种可行的解决方案:
方案1:修改googleVis生成的HTML代码,手动注入API密钥
因为googleVis的gvisMap没有直接支持API密钥的参数,我们需要手动修改生成的HTML内容,替换旧的加载脚本并添加密钥:
- 首先去Google Cloud控制台生成你的Google Maps JavaScript API密钥(启用Maps JavaScript API服务后创建密钥,记得设置合适的网站引用限制)。
- 然后修改你的R代码,替换HTML中的加载脚本:
example <- structure(list(id = c(1497L, 1509L, 1583L, 5572L, 7361L, 8102L, 8584L, 8734L, 9593L, 9614L), LatLong = c("-22.0267575:-44.3184877", "-22.6966783:-49.4322738", "-10.713746:-62.2545373", "-11.1369864:-42.1125701", "-9.9167727:-37.2763875", "-13.5779092:-39.2167652", "-5.7867453:-35.202613", "-22.017958:-44.5125127", "-4.8522095:-39.5748619", "-13.0786111:-39.0011556" )), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -10L), .Names = c("id", "LatLong")) library(googleVis) mapa_tdp <- gvisMap(example, "LatLong" , options=list(showTip=TRUE, showLine=TRUE, enableScrollWheel=TRUE, mapType='terrain', useMapTypeControl=TRUE)) # 替换旧的Google Loader脚本为带API密钥的新脚本 YOUR_API_KEY <- "你的Google Maps API密钥" new_script <- sprintf('<script async defer src="https://maps.googleapis.com/maps/api/js?key=%s"></script>', YOUR_API_KEY) mapa_tdp$html$chart <- gsub('<script type="text/javascript" src="https://www.google.com/jsapi"></script>', new_script, mapa_tdp$html$chart) # 移除旧的google.load调用(新API加载方式不需要这一步) mapa_tdp$html$chart <- gsub("google.load\\('visualization', '1', {'packages':['map']}\\);", "", mapa_tdp$html$chart) # 保存修改后的HTML zz <- file(description="html_chart_mapa_obras.txt", open="w", encoding="UTF-8") cat(mapa_tdp$html$chart, file=zz) close(zz)
这样修改后的HTML就能正确加载Google Maps API并通过密钥验证,部署到网站后就不会再报错了。
方案2:改用更现代的R地图包(推荐)
googleVis的维护进度较慢,对于现代Google Maps API的支持不够友好。推荐使用googleway包,它原生支持API密钥,功能更强大:
library(googleway) # 拆分LatLong列为单独的纬度和经度 example$lat <- as.numeric(sapply(strsplit(example$LatLong, ":"), `[`, 1)) example$lon <- as.numeric(sapply(strsplit(example$LatLong, ":"), `[`, 2)) # 设置你的Google Maps API密钥 set_key("你的Google Maps API密钥") # 创建地形风格的地图,并添加标记 google_map(data = example, lat = "lat", lon = "lon") %>% add_markers() %>% map_style(style = map_style_terrain())
googleway生成的地图可以直接通过save_widget()函数保存为HTML,部署到网站时完全兼容现代API要求,不需要额外修改。
内容的提问来源于stack exchange,提问作者Manoel Galdino
相关产品推荐
相关产品推荐

