在R语言中从字符向量提取经纬度的最优方法
R语言提取POINT字符串中的经纬度:几种实用方法
你提到的用正则结合gsub处理完全可行,下面给你具体实现方式,同时也推荐几种更高效的方案:
一、正则+gsub的实现
这种方法直接通过正则捕获目标数值,适合精准匹配:
- 提取经度:
lon <- as.numeric(gsub("POINT \\((-?\\d+\\.\\d+) .+\\)", "\\1", "POINT (-90.10051372 29.97596117)"))
- 提取纬度:
lat <- as.numeric(gsub("POINT \\(-?\\d+\\.\\d+ (-?\\d+\\.\\d+)\\)", "\\1", "POINT (-90.10051372 29.97596117)"))
也可以一次性提取两个坐标,再拆分:
coords_str <- gsub("POINT \\((-?\\d+\\.\\d+) (-?\\d+\\.\\d+)\\)", "\\1 \\2", "POINT (-90.10051372 29.97596117)") coords <- as.numeric(strsplit(coords_str, " ")[[1]]) lon <- coords[1] lat <- coords[2]
二、strsplit简化版
先清理掉无关字符,再按空格拆分,步骤更直观:
raw_str <- "POINT (-90.10051372 29.97596117)" clean_str <- gsub("POINT |\\(|\\)", "", raw_str) coords <- as.numeric(strsplit(clean_str, " ")[[1]]) lon <- coords[1] lat <- coords[2]
三、专业空间包处理(批量数据首选)
如果要处理大量这类WKT格式的点字符串,推荐用sf包,它是R中处理空间数据的标准工具,解析更规范还能支持后续空间操作:
# 先安装包(首次使用) install.packages("sf") library(sf) # 解析POINT字符串 point_obj <- st_as_sfc("POINT (-90.10051372 29.97596117)") coords <- st_coordinates(point_obj) lon <- coords[1] lat <- coords[2]
总结
- 单个/少量字符串:正则+gsub或strsplit方法足够灵活;
- 批量空间数据:优先用
sf包,效率更高且能避免格式兼容问题。
内容的提问来源于stack exchange,提问作者Jean-Paul Azzopardi
相关产品推荐
相关产品推荐

