You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言leaflet地图中实现谷歌搜索图片作为标记弹窗

解决方案

要实现将城市谷歌搜索首张图片作为leaflet标记弹窗内容,需分获取图片URL和嵌入弹窗两个核心步骤,以下是具体实现方案:

1. 准备依赖包与API配置

首先安装并加载所需包,其中googleImageR用于调用谷歌图片搜索API(需提前在谷歌云平台申请API密钥并启用"Custom Search API"):

install.packages(c("leaflet", "googleImageR", "dplyr"))
library(leaflet)
library(googleImageR)
library(dplyr)

# 配置谷歌图片搜索API密钥(替换为你的密钥)
g_auth(key = "YOUR_GOOGLE_CUSTOM_SEARCH_API_KEY")

2. 批量获取城市图片URL

编写函数从谷歌搜索结果中提取每个城市的首张图片URL,并添加到你的dataframe中:

# 定义获取首张图片URL的函数
get_first_city_image <- function(city_name) {
  # 搜索关键词可按需调整(比如"城市地标""城市风光"等)
  search_res <- google_image_search(search_string = paste(city_name, "city scenery"), num_results = 1)
  if (nrow(search_res) > 0) {
    return(search_res$image_url[1])
  } else {
    # 无搜索结果时返回默认占位图
    return("https://via.placeholder.com/200x150?text=No+Image")
  }
}

# 为dataframe添加图片URL列
df <- df %>%
  mutate(image_url = sapply(Nombres, get_first_city_image))

3. 修改leaflet代码嵌入图片弹窗

调整原代码,通过popup参数将图片HTML标签传入,实现点击标记显示图片的效果:

mapa <- leaflet(data = df) %>%
  # 使用Esri地图底图(移除冗余的addTiles)
  addProviderTiles(providers$Esri.NatGeoWorldMap) %>%
  addMarkers(
    lat = ~Latitudes,
    lng = ~Longitudes,
    label = ~Nombres,
    # 生成带图片的弹窗,可自定义宽高
    popup = ~paste0('<img src="', image_url, '" width="200" height="150" alt="', Nombres, ' 图片">')
  ) %>%
  setView(lat = 40.416775, lng = -3.703790, zoom = 5)

# 渲染地图
mapa

关键注意事项

  • API限制:谷歌Custom Search API每月有100次免费调用额度,超出后需付费,建议根据使用量调整。
  • 反爬替代方案:若不想使用API,可尝试用rvest包爬取谷歌图片搜索结果,但需注意谷歌的反爬机制,可能导致不稳定。
  • 图片加载优化:可在HTML标签中添加loading="lazy"提升地图加载性能,或限制图片尺寸避免弹窗过大。

内容的提问来源于stack exchange,提问作者user23004030

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 06:40:20