在R中转换.shp文件CRS失败,求解决方案(已尝试spTransform无效)
解决spTransform转换CRS未生效的问题
你遇到的核心问题是对spTransform()函数的用法理解有误——这个函数不会直接修改你传入的原始空间对象,而是返回一个已经转换好CRS的新对象。你需要把这个返回值赋值给变量(可以是新变量,也可以覆盖原变量),才能看到CRS的变化。
修正后的代码示例
library(rgdal) # 读取 shp 文件(和你原来的代码一致) shpfile <- readOGR(dsn="D:/Map", layer = "gpr_000b11a_e") # 查看原文件的 CRS crs(shpfile) # 输出:+proj=longlat +datum=NAD83 +no_defs +ellps=GRS80 +towgs84=0,0,0 # 关键:将转换后的结果赋值给变量(这里用新变量区分,也可以直接覆盖 shpfile) shpfile_wgs84 <- spTransform(shpfile, CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")) # 查看转换后的 CRS crs(shpfile_wgs84) # 此时输出就会是 WGS84 的参数了
如果想直接更新原对象,也可以这样写:
shpfile <- spTransform(shpfile, CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")) crs(shpfile) # 这里就能看到更新后的CRS
额外建议:使用更现代的sf包
rgdal目前已经处于维护状态,不再新增功能。推荐你使用更易用的sf包处理空间数据,它的语法更直观,转换CRS的st_transform()函数同样遵循“返回新对象”的逻辑:
library(sf) # 读取 shp 文件 shp_sf <- st_read(dsn="D:/Map", layer = "gpr_000b11a_e") # 转换到 WGS84(EPSG代码4326是WGS84的标准代码) shp_sf_wgs84 <- st_transform(shp_sf, crs = 4326) # 查看转换后的CRS st_crs(shp_sf_wgs84)
内容的提问来源于stack exchange,提问作者Yang Yang
相关产品推荐
相关产品推荐

