是否有R函数可提取复合坐标参考系统(CRS)的水平投影分量?
解决方案
可以直接使用sf包(v1.0-14及以上版本)内置的st_horizontal_crs()函数,该函数基于PROJ原生能力实现,可可靠提取各类复合CRS的水平分量,完美适配WKT1、WKT2、EPSG编码等所有新旧CRS定义格式,不需要自己解析WKT字符串。
调用示例
基于你提供的复合CRS对象,直接调用即可:
# 加载sf包 library(sf) # 提取水平CRS分量 horizontal_crs <- st_horizontal_crs(compound_crs) # 验证结果,输出对应EPSG码为7856,符合需求 horizontal_crs$epsg
提取得到的horizontal_crs是标准的sf crs对象,可以直接赋值给栅格对象:
- 适配terra包栅格:
crs(你的栅格对象) <- horizontal_crs - 适配raster包栅格:
crs(你的栅格对象) <- horizontal_crs$proj4string
旧版本sf兼容方案
如果你的sf版本低于v1.0-14无法升级,也可以通过PROJ的转换参数实现提取:
# 通过proj原生能力提取水平分量WKT horizontal_wkt <- sf::sf_proj_normalize(compound_crs$wkt, format = "WKT2", type = "horizontal") horizontal_crs <- st_crs(horizontal_wkt)
该方案同样不需要手动解析WKT结构,可靠性远高于正则匹配提取的方案。
内容的提问来源于stack exchange,提问作者michael
相关产品推荐
相关产品推荐

