You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中筛选美国西海岸各州指定英里范围内的经纬度点(禁用管道符)

筛选美国西海岸指定范围内经纬度点并打标签(无管道符实现)

核心思路

不用管道符的前提下,通过sf包的空间处理功能完成三个核心操作:

  1. 将CSV里的经纬度转成空间点对象
  2. 获取西海岸三州的边界并生成指定距离的缓冲区
  3. 匹配点与缓冲区,给点打上对应州的标签

具体实现步骤

1. 加载依赖包

先加载需要的工具包,sf负责空间数据处理,tigris用来获取官方州边界数据(也可以用maps包替代,数据精度稍低):

# 安装未安装的包(首次运行时执行)
# install.packages(c("sf", "tigris", "dplyr"))

library(sf)
library(tigris)
library(dplyr)

2. 读取并转换自有数据

把你的太平洋数据CSV转成sf空间点对象,注意指定坐标系为WGS84(全球通用的经纬度坐标系,EPSG代码4326):

# 读取CSV数据(替换成你的文件路径)
pacific_data <- read.csv("太平洋数据.csv")

# 将经纬度列转成sf点对象
pacific_sf <- st_as_sf(pacific_data, coords = c("经度列名", "纬度列名"), crs = 4326)

注意:把代码里的经度列名和纬度列名替换成你CSV里实际的列名。

3. 获取西海岸州边界并生成缓冲区

先获取华盛顿、俄勒冈、加州的边界数据,再转换到适合计算英里距离的投影(比如UTM 10N,EPSG:26910,覆盖西海岸大部分区域),最后生成指定距离的缓冲区:

# 获取美国州边界数据,过滤出目标三州
west_coast_states <- states(cb = TRUE)
west_coast_states <- filter(west_coast_states, NAME %in% c("Washington", "Oregon", "California"))

# 转换投影到UTM 10N(单位为米,方便计算英里)
west_coast_utm <- st_transform(west_coast_states, crs = 26910)

# 生成缓冲区:100英里≈160934米,可根据需求修改数值
# 这里给俄勒冈设100英里,华盛顿和加州可自行调整
oregon_buffer <- st_buffer(filter(west_coast_utm, NAME == "Oregon"), dist = 160934)
washington_buffer <- st_buffer(filter(west_coast_utm, NAME == "Washington"), dist = 160934) # 示例100英里
california_buffer <- st_buffer(filter(west_coast_utm, NAME == "California"), dist = 160934) # 示例100英里

4. 匹配点与缓冲区并打标签

先把点数据转成和缓冲区一致的投影,然后逐个判断点是否在对应缓冲区内,添加标签列:

# 将点数据转成UTM投影,和缓冲区保持一致
pacific_utm <- st_transform(pacific_sf, crs = 26910)

# 初始化标签列
pacific_utm$state_label <- NA

# 判断每个点是否在俄勒冈缓冲区内,打标签
oregon_points <- st_within(pacific_utm, oregon_buffer, sparse = FALSE)
pacific_utm$state_label[oregon_points] <- "Oregon"

# 判断华盛顿缓冲区(优先已打标签的点不覆盖,可根据需求调整)
washington_points <- st_within(pacific_utm, washington_buffer, sparse = FALSE)
pacific_utm$state_label[washington_points & is.na(pacific_utm$state_label)] <- "Washington"

# 判断加州缓冲区
california_points <- st_within(pacific_utm, california_buffer, sparse = FALSE)
pacific_utm$state_label[california_points & is.na(pacific_utm$state_label)] <- "California"

# 可选:转回到WGS84坐标系,方便后续导出
result_data <- st_transform(pacific_utm, crs = 4326)

# 导出结果到CSV(替换成你想要的路径)
write.csv(st_drop_geometry(result_data), "西海岸筛选结果.csv", row.names = FALSE)

关键注意事项

  • 投影选择:如果你的数据覆盖西海岸全部区域,UTM 10N(EPSG:26910)是合适的;如果范围更大,可以用Albers等面积投影(EPSG:5070),确保距离计算准确。
  • 重叠区域处理:代码里默认优先给俄勒冈打标签,再处理华盛顿和加州,如果需要标记重叠区域(比如点同时在两个州缓冲区内),可以修改逻辑,比如用paste合并标签。
  • 数据精度:tigris包的cb=TRUE参数返回简化后的边界,速度更快;如果需要高精度边界,去掉该参数即可。

内容的提问来源于stack exchange,提问作者Ashley Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:45:28