使用R的terra包导入等高线时Z坐标被忽略,无法调用高程
解决terra包导入等高线时Z坐标未识别及contour调用报错问题
1. 把属性列转为Z坐标
terra的vect()默认忽略Z坐标,但会保留高程属性。可以用addZ()函数将指定的高程属性转为SpatVector的Z坐标:
# 导入等高线矢量(已保留高程属性) sjre_bath = vect(sj_bath) # 将指定属性列转为Z坐标(替换成你的高程属性名,比如Elevation或Elev_m) sjre_bath_z = addZ(sjre_bath, field = "Elev_m")
验证Z坐标是否添加成功:
# 检查是否包含Z坐标 hasZ(sjre_bath_z) # 查看Z值 zValues(sjre_bath_z)
2. 解决contour函数报错问题
contour()函数是针对栅格数据(SpatRaster)设计的,直接传入SpatVector会报错。你有两种选择:
选项1:直接绘制矢量等高线
用plot()直接绘制带Z值的矢量等高线,还能根据高程设置颜色:
# 按Z值分配颜色 elev_unique = unique(zValues(sjre_bath_z)) plot(sjre_bath_z, col = terrain.colors(length(elev_unique)))
选项2:转成栅格后用contour
如果一定要用contour(),先把等高线矢量栅格化:
# 创建与矢量范围匹配的空栅格(分辨率按需调整) r = rast(sjre_bath_z, resolution = 10) # 将高程属性栅格化到空栅格中 r = rasterize(sjre_bath_z, r, field = "Elev_m") # 调用contour绘制 contour(r)
内容的提问来源于stack exchange,提问作者Kenny Anderson
相关产品推荐
相关产品推荐

