调用OpenTopography GET接口下载.tif后,R无法创建Raster图层问题
解决R无法读取OpenTopography下载的TIFF文件问题
核心问题定位
你的代码中创建RasterLayer时错误使用了system.file("display.tif", package="raster")——这个函数仅用于查找R包内置的示例文件,而你下载的display.tif保存在当前工作目录,因此该路径无法指向正确的文件,导致读取失败。
修正步骤
1. 修正文件读取路径
直接传入下载文件的本地路径,无需使用system.file():
# 替换原r1创建代码 r1 <- raster("./display.tif") # 若当前工作目录就是文件所在目录,可简化为: # r1 <- raster("display.tif")
2. 确认文件下载有效性
在读取前先检查文件是否存在、大小是否合理(避免下载到空文件或错误内容):
if (file.exists("./display.tif")) { cat("文件存在,大小:", file.size("./display.tif"), "字节\n") } else { stop("文件未下载成功,请检查URL和API密钥是否正确") }
3. 备选方案:使用terra包替代raster
raster包已进入维护模式,推荐使用更现代的terra包,兼容性与稳定性更佳:
# 若未安装terra先执行安装 # install.packages("terra") library(terra) r1 <- rast("./display.tif") plot(r1)
4. 验证API请求正确性
直接在浏览器中打开生成的url,确认是否能正常下载TIFF文件,排查API密钥有效性或参数拼接错误:
# 打印生成的URL,复制到浏览器测试 print(url)
完整修正后的代码示例
library(raster) library(rgdal) library(elevatr) library(rgeos) library(leaflet) library(RColorBrewer) library(rgl) r1 <- raster() s1 <- stack() base <- 'https://portal.opentopography.org/API/globaldem?demtype=AW3D30' api_key <- '<API-KEY>' tmp_south <- 36.738884 tmp_north <- 38.091337 tmp_west <- -120.168457 tmp_east <- -118.465576 url <- paste0(base, '&south=', tmp_south, '&north=', tmp_north, '&west=', tmp_west, '&east=', tmp_east, '&API_Key=', api_key) # 下载文件 download.file(url, "./display.tif", mode = "wb") # 检查文件状态 if (!file.exists("./display.tif")) { stop("下载失败,请检查URL和API密钥") } # 读取并显示栅格 r1 <- raster("./display.tif") image(r1)
内容的提问来源于stack exchange,提问作者Ben Dennison
相关产品推荐
相关产品推荐

