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

如何用R绘制NASAGIBS.ViirsEarthAtNight2012风格的可自定义地图

问题描述
  • "NASAGIBS.ViirsEarthAtNight2012"是leaflet和leafletCN包中addProviderTiles函数的可选图层参数。
  • 我非常喜欢该地图的夜景绘制效果。
  • 现寻求实现方法:如何绘制与该地图风格相似,但具备更多自定义选项(而非仅单一图层)的地图?
  • 该地图效果为:深色背景搭配夜间城市灯光的全球夜景地图。

原始示例代码

# Required packages
library(leaflet)  # Load the leaflet package for interactive maps
library(leaflet.extras)  # Load additional leaflet extras
library(leafletCN)  # Load leaflet for Chinese maps
# Generate data
geo = data.frame(long = rep(121.44, 1000),
                 lat = rep(31.22, 1000))  # Create a data frame with longitude and latitude

# Plot
map <- leaflet(geo) %>%  # Create a leaflet map with the geo data
  amap(group = "Gaode") %>%  # Add Gaode map as Layer 1
  addProviderTiles(providers$NASAGIBS.ViirsEarthAtNight2012, 
                   group = "DarkBackground")  # Add DarkBackground NASA map as Layer 2
map  # Display the map
自定义夜景风格地图的实现方案

要做出风格类似但自定义性更强的夜景地图,可以从以下几个方向入手:

1. 叠加组合不同瓦片源

通过叠加深色底图和灯光图层,实现更灵活的夜景效果,还能通过图层控制器切换显示组合:

library(leaflet)

custom_night_map <- leaflet() %>%
  # 添加深色底图作为基础
  addProviderTiles(providers$CartoDB.DarkMatter, group = "深色底图") %>%
  # 添加半透明的NASA夜景灯光层,可调整透明度控制效果
  addProviderTiles(providers$NASAGIBS.ViirsEarthAtNight2012, 
                   group = "夜景灯光层",
                   options = providerTileOptions(opacity = 0.7)) %>%
  # 添加图层切换控制器
  addLayersControl(
    baseGroups = c("深色底图"),
    overlayGroups = c("夜景灯光层"),
    position = "topright"
  )

custom_night_map

2. 调整瓦片样式参数

利用providerTileOptions可以修改灯光层的透明度、亮度、对比度,打造个性化夜景质感:

leaflet() %>%
  addProviderTiles(providers$NASAGIBS.ViirsEarthAtNight2012,
                   options = providerTileOptions(
                     opacity = 0.8,    # 控制图层透明度
                     brightness = 0.3, # 降低整体亮度,强化暗部氛围
                     contrast = 1.3    # 提高对比度,让城市灯光更突出
                   ))

3. 叠加自定义业务数据

如果需要添加专属数据(比如特定区域的灯光强度标注、自定义点位),可以结合leaflet的图层绘制函数:

# 模拟自定义灯光强度数据
custom_light_data <- data.frame(
  lon = c(121.44, 116.40, 120.16),
  lat = c(31.22, 39.90, 30.27),
  intensity = c(8, 9, 7)
)

leaflet(custom_light_data) %>%
  addProviderTiles(providers$NASAGIBS.ViirsEarthAtNight2012) %>%
  # 添加自定义灯光强度标记
  addCircles(
    lng = ~lon, lat = ~lat,
    radius = ~intensity * 1200,
    color = "#ffd700",
    fillOpacity = 0.6,
    popup = ~paste("区域灯光强度:", intensity)
  )

4. 自定义专属瓦片样式(进阶)

如果需要完全掌控地图配色、元素显示逻辑,可以使用Mapbox Studio制作专属夜景样式,再通过leaflet调用:

leaflet() %>%
  addTiles(
    urlTemplate = "https://api.mapbox.com/styles/v1/你的用户名/自定义样式ID/tiles/{z}/{x}/{y}?access_token=你的MapboxToken",
    attribution = "Mapbox"
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:07:29