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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:21:13