R中elevatr获取DEM转矩阵返回NA,Rayshader绘图异常求助
问题排查与解决建议
问题描述
本地存储Shapefile文件,使用R语言elevatr包基于该文件下载高程数据(DEM),但通过rayshader的raster_to_matrix转换为矩阵后,结果全为NA或异常数值。此前流程可正常运行,更换Shapefile、更新rayshader包后问题仍存在。
使用代码:
arw = readOGR("Shape file/american water/American_River_Watershed.shp") dem_arw = elevatr::get_elev_raster(arw,z = 10,clip = "location") raster_to_matrix(dem_arw)
排查与解决步骤
先验证DEM栅格本身的有效性
先确认下载的DEM是否包含有效数据,而非转换环节出问题:# 查看DEM基本统计信息 summary(dem_arw) # 可视化DEM plot(dem_arw)如果输出显示DEM全为NA,说明下载环节异常:
- 检查
z值是否合理:z=10对应分辨率约30m,若Shapefile范围极小,可能超出该分辨率的瓦片覆盖,可尝试降低z值(如z=8); - 指定数据源重试:
elevatr默认使用AWS DEM,可切换数据源测试:dem_arw = elevatr::get_elev_raster(arw, z=10, clip="location", src="gl3")
- 检查
检查坐标系一致性
readOGR读取的Shapefile坐标系可能与elevatr返回的DEM(默认WGS84,EPSG:4326)不一致,导致裁剪后无有效数据:# 查看两者坐标系 crs(arw) crs(dem_arw) # 将Shapefile转换为WGS84坐标系后重试 arw <- spTransform(arw, CRS("+init=epsg:4326")) dem_arw = elevatr::get_elev_raster(arw, z=10, clip="location")优化矩阵转换环节
- 确保DEM为单波段栅格,若
elevatr返回的是terra包的SpatRaster类型,先转换为raster包的RasterLayer:dem_arw <- raster::raster(dem_arw) - 先对DEM按Shapefile范围进行掩膜处理,再转换矩阵:
dem_arw <- raster::mask(dem_arw, arw) mat <- rayshader::raster_to_matrix(dem_arw) - 尝试用基础函数转换验证:
as.matrix(dem_arw),若该结果正常,说明raster_to_matrix的调用需调整参数(如指定flip = TRUE等)。
- 确保DEM为单波段栅格,若
排查包版本兼容性
近期依赖包(如raster、sp、elevatr)的版本更新可能引发兼容性问题:- 回退到之前可正常运行的
elevatr版本:devtools::install_version("elevatr", version = "0.4.2") # 替换为之前正常的版本号 - 检查
raster与terra的冲突:若环境中同时安装了两个包,可优先加载raster包,或卸载terra测试。
- 回退到之前可正常运行的
测试最小可复现示例
用极简的测试多边形验证流程是否正常,排除Shapefile本身的问题:library(sp) # 创建一个小范围测试多边形 test_poly <- SpatialPolygons(list(Polygons(list(Polygon(cbind(c(-121, -121, -120.9, -120.9), c(38.5, 38.6, 38.6, 38.5)))), ID="1")) crs(test_poly) <- CRS("+init=epsg:4326") # 下载DEM并转换矩阵 dem_test <- elevatr::get_elev_raster(test_poly, z=10, clip="location") summary(dem_test) rayshader::raster_to_matrix(dem_test)
内容的提问来源于stack exchange,提问作者Aaqib Gulzar
相关产品推荐
相关产品推荐

