在R的Leaflet中添加英国气象局降雨量图层报错,求解决方法
解决Leaflet叠加Met Office降水PNG图像的问题
Hi David, 我来帮你搞定这个Leaflet地图叠加降水图的问题~
问题原因
你遇到的报错Error: inherits(x, "RasterLayer") is not TRUE,核心原因是:
leaflet的addRasterImage()函数要求输入必须是RasterLayer/RasterStack/RasterBrick类型的栅格数据- 但你通过
content(rpg)获取到的r1是原生的PNG图像对象(比如magick类型或原始二进制图像),并不是符合要求的栅格数据结构,所以无法被识别。
而之前用plot() + rasterImage()能正常显示,是因为rasterImage()支持直接渲染原生图像对象,不需要转换为栅格数据格式。
两种解决方案
方案一:将PNG转换为RasterLayer后加载(适合需要后续栅格分析的场景)
我们需要先把获取到的PNG写入临时文件,再读取为RasterLayer,同时设置正确的地理范围:
library(httr) library(raster) library(leaflet) # 替换[your_key]为你的Met Office API密钥 url5 <- "http://datapoint.metoffice.gov.uk/public/data/layer/wxfcs/Precipitation_Rate/png?RUN=2018-05-18T03:00:00Z&FORECAST=36&key=[your_key]" rpg <- GET(url5) # 将PNG内容写入临时文件 temp_png <- tempfile(fileext = ".png") writeBin(content(rpg, "raw"), temp_png) # 读取为RasterLayer precip_raster <- raster(temp_png) # 设置地理范围:extent(xmin, xmax, ymin, ymax),对应西经12°到东经5°,北纬48°到61° extent(precip_raster) <- extent(-12, 5, 48, 61) # 关键:PNG图像的原点是左上角,而地理坐标系原点是左下角,所以需要翻转Y轴 precip_raster <- flip(precip_raster, direction = "y") # 加载到Leaflet leaflet() %>% addTiles() %>% fitBounds(lng1=-12, lat1=48, lng2=5, lat2=61) %>% addRasterImage(precip_raster, opacity = 0.7)
方案二:直接用addImageOverlay叠加图像(仅需显示时更简单)
如果不需要对降水数据做栅格分析,只是想把PNG叠加到地图上,用addImageOverlay更直接,不需要转换为栅格:
library(httr) library(leaflet) library(magick) # 替换[your_key]为你的Met Office API密钥 url5 <- "http://datapoint.metoffice.gov.uk/public/data/layer/wxfcs/Precipitation_Rate/png?RUN=2018-05-18T03:00:00Z&FORECAST=36&key=[your_key]" rpg <- GET(url5) precip_img <- image_read(content(rpg)) # 叠加到Leaflet地图 leaflet() %>% addTiles() %>% fitBounds(lng1=-12, lat1=48, lng2=5, lat2=61) %>% addImageOverlay( img = precip_img, bounds = list( list(48, -12), # 左下角:纬度,经度 list(61, 5) # 右上角:纬度,经度 ), opacity = 0.7 # 调整透明度避免遮挡底图 )
内容的提问来源于stack exchange,提问作者user3551438
相关产品推荐
相关产品推荐

