使用R Terra包转换栅格与矢量图层的坐标参考系统(CRS)
在R terra包中指定转换类型进行CRS转换
1. 先查看可用的转换参数
要明确源CRS和目标CRS之间的可选转换方法,直接用terra::gdalsrsinfo()查询:
# 查询目标CRS(比如WGS84,EPSG:4326)的转换细节 gdalsrsinfo("EPSG:4326", options = c("-o", "PROJ")) # 直接查询两个CRS间的转换选项,比如源为UTM10N(EPSG:32610)、目标为WGS84 gdalsrsinfo("EPSG:4326", options = c("-o", "PROJ", "-s", "EPSG:32610"))
输出内容会包含PROJ格式的转换参数,比如+towgs84(基准面转换参数)或+nadgrids(栅格转换文件),这些就是QGIS里可选转换方法对应的底层参数。
2. 用project()指定转换方式
自动匹配默认转换(简单省事)
如果两个CRS有官方推荐的转换规则,直接传入EPSG代码即可,terra会自动应用最优转换:
library(terra) # 读取栅格/矢量数据 r <- rast("你的栅格文件.tif") v <- vect("你的矢量文件.shp") # 转换到目标CRS(比如WGS84) r_proj <- project(r, "EPSG:4326") v_proj <- project(v, "EPSG:4326")
手动指定转换参数(对应QGIS自定义转换选项)
如果需要使用特定的转换方法,把包含转换参数的PROJ字符串传给project()的第二个参数即可:
比如从NAD83转换到WGS84时,指定特定的+towgs84基准面转换参数:
# 带自定义转换参数的PROJ字符串 dst_proj <- "+proj=longlat +datum=WGS84 +towgs84=-10,-150,-30,0,0,0,0 +no_defs" # 执行转换 r_proj_custom <- project(r, dst_proj) v_proj_custom <- project(v, dst_proj)
复杂转换用PROJ管道(适用于PROJ 6.0以上版本)
面对多步骤的复杂转换,可以用PROJ管道语法定义完整转换流程:
# 示例:从NAD83 UTM10N(EPSG:26910)转换到WGS84,指定分步转换规则 proj_pipeline <- "+proj=pipeline +step +proj=utm +zone=10 +ellps=GRS80 +step +proj=unitconvert +xy_in=metre +xy_out=degree +step +proj=datumshift +ellps=GRS80 +towgs84=0,0,0,0,0,0,0" r_proj_pipeline <- project(r, proj_pipeline)
3. 验证转换结果
转换完成后可以检查CRS信息和坐标值,确保符合预期:
# 查看转换后的CRS详情 crs(r_proj_custom) # 对比转换后的坐标数值 head(values(r_proj_custom)) head(coordinates(v_proj_custom))
内容的提问来源于stack exchange,提问作者Andres
相关产品推荐
相关产品推荐

