如何用terra与sf包替代rgdal/raster实现数据集UTM投影带转换?
替代rgdal/raster的投影转换方案(sf/terra版)
问题背景
原代码依赖已弃用的sp、rgdal包,无法在新版R中运行,以下是使用sf和terra包实现从UTM 32N(EPSG:32632)到UTM 33N(EPSG:32633)投影转换的等效代码。
方案一:使用sf包(推荐用于矢量数据)
# 加载依赖包 library(StatDA) library(sf) # 加载数据并筛选目标子集 data(trondelagC) d_Tr <- subset(trondelagC, X.Medium == "Till") # 将SpatialPointsDataFrame转换为sf对象,并指定原始坐标系 d_Tr_sf <- st_as_sf(d_Tr) st_crs(d_Tr_sf) <- 32632 # UTM 32N对应的EPSG编码 # 执行投影转换 d1_Tr_sf <- st_transform(d_Tr_sf, crs = 32633) # 转换到UTM 33N
关键函数说明
st_as_sf():将传统sp类对象转换为sf标准格式的简单要素对象st_crs():设置或读取对象的坐标系(直接传入EPSG编码更简洁)st_transform():完成坐标系转换,支持EPSG编码、WKT等多种坐标系定义方式
方案二:使用terra包(兼容矢量/栅格数据)
# 加载依赖包 library(StatDA) library(terra) # 加载数据并筛选目标子集 data(trondelagC) d_Tr <- subset(trondelagC, X.Medium == "Till") # 将SpatialPointsDataFrame转换为terra的矢量对象,并指定原始坐标系 d_Tr_vect <- vect(d_Tr) crs(d_Tr_vect) <- "EPSG:32632" # 执行投影转换 d1_Tr_vect <- project(d_Tr_vect, "EPSG:32633")
关键函数说明
vect():将sp类对象转换为terra包的矢量对象crs():设置或读取对象的坐标系project():完成矢量/栅格数据的投影转换
注意事项
原代码中data <- data("trondelagC")是错误写法,data()函数无需赋值,直接调用即可加载数据集。
内容的提问来源于stack exchange,提问作者Belinda Flem
相关产品推荐
相关产品推荐

