如何用R语言Terra包提取栅格文件的EPSG代码?
使用Terra包处理栅格与Shapefile的投影匹配问题
1. 加载包并读取文件
首先加载Terra包,然后读取你的栅格和Shapefile文件:
library(terra) # 替换为你的实际文件路径 raster_obj <- rast("栅格文件路径.tif") shp_obj <- vect("Shapefile路径.shp")
2. 提取EPSG代码
Terra的crs()函数返回SpatCRS对象,直接通过$epsg即可提取对应的EPSG代码:
# 获取栅格的EPSG代码 raster_epsg <- crs(raster_obj)$epsg # 获取Shapefile的EPSG代码 shp_epsg <- crs(shp_obj)$epsg
注:如果返回
NA,说明该投影没有对应的标准EPSG代码,这种情况直接对比完整投影更可靠。
3. 对比投影并重投影
推荐用compareCRS()直接判断两个对象的投影是否一致(比单独对比EPSG更稳妥,覆盖无EPSG代码的场景):
# 判断投影是否不匹配 if (!compareCRS(shp_obj, raster_obj)) { # 将Shapefile重投影为栅格的投影 shp_reprojected <- project(shp_obj, crs(raster_obj)) }
如果只想通过EPSG代码判断(仅适用于有明确EPSG的场景):
if (!is.na(raster_epsg) && !is.na(shp_epsg) && raster_epsg != shp_epsg) { shp_reprojected <- project(shp_obj, crs(raster_obj)) }
4. 保存重投影后的文件
如果需要保存结果,使用writeVector():
# 替换为目标保存路径,overwrite=TRUE允许覆盖已有文件 writeVector(shp_reprojected, "重投影后的Shapefile.shp", overwrite=TRUE)
内容的提问来源于stack exchange,提问作者Tim Haeusler
相关产品推荐
相关产品推荐

