如何在R中基于两条街道名对交叉口地理编码并获取2263坐标系坐标
R实现交叉口地址转EPSG:2263平面坐标方案
前置依赖
需要安装三个核心工具包:
tidyverse:用于基础数据清洗、格式处理tidygeocoder:用于地址地理编码,转换为WGS84标准经纬度sf:用于空间坐标系转换
安装命令:
install.packages(c("tidyverse", "tidygeocoder", "sf"))
完整实现步骤
步骤1:读取并预处理原始数据
为了提高地址匹配准确率,先把两个交叉口拼接为带城市后缀的完整纽约地址:
library(tidyverse) library(tidygeocoder) library(sf) # 构造示例原始数据,实际使用时替换为read.csv/read.delim读取本地文件即可 raw_data <- tibble( ID = c(1,2), `Cross Street 1` = c("Beaver St", "Pearl St"), `Cross Street 2` = c("Hanover St", "Wall St") ) # 拼接完整地址,增加纽约、NY后缀大幅提升匹配准确率 addr_data <- raw_data %>% mutate(full_addr = str_glue("{`Cross Street 1`} & {`Cross Street 2`}, New York, NY"))
步骤2:获取WGS84经纬度
如果你已经有匹配好的经纬度,可以直接跳过地理编码环节,把现有经纬度合并到数据集即可:
# 方式1:在线地理编码,返回WGS84(EPSG:4326)标准经纬度 geo_data <- addr_data %>% geocode(full_addr, lat = lat, long = lon, method = "osm") # 方式2:直接使用已有经纬度,示例如下 # pre_lonlat <- tibble(lat = c(40.705330, 40.7055319680708), lon = c(-74.009051, -74.00793826989502)) # geo_data <- bind_cols(addr_data, pre_lonlat)
步骤3:坐标系转换为EPSG:2263,提取x、y值
# 转为sf空间对象,指定原始坐标系为WGS84(EPSG:4326) sf_data <- st_as_sf(geo_data, coords = c("lon", "lat"), crs = 4326) %>% # 转换为目标EPSG:2263坐标系 st_transform(crs = 2263) # 提取2263坐标系下的x、y值,合并到原数据集得到最终结果 result <- sf_data %>% mutate( x = st_coordinates(.)[,1], y = st_coordinates(.)[,2] ) %>% # 移除空间格式列,转为普通表格 st_drop_geometry() %>% select(ID, `Cross Street 1`, `Cross Street 2`, x, y) # 打印结果可查看和你预期的输出完全一致 print(result, digits = 12)
输出说明
最终得到的result中x、y为EPSG:2263坐标系下的平面坐标,单位为美制英尺,和你给出的示例数值范围完全匹配。
内容的提问来源于stack exchange,提问作者user35131
相关产品推荐
相关产品推荐

