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

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等)。
  • 排查包版本兼容性
    近期依赖包(如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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:10:13