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

如何在R语言中基于经纬度数据统计日本EEZ内作业数量

日本EEZ内捕捞作业数量统计方案

前提准备

确保已加载sf和dplyr包,且完成示例数据与日本EEZ数据的加载(即你提供的前两段代码)。


步骤1:统一空间参考系(CRS)

不同来源的空间数据可能使用不同坐标系统,必须先统一才能进行空间判断:

# 检查并转换EEZ数据的CRS,与作业点数据保持一致(EPSG:4326)
if (!sf::st_crs(eez_JP) == sf::st_crs(df2)) {
  eez_JP <- sf::st_transform(eez_JP, crs = sf::st_crs(df2))
}

步骤2:标记作业点是否在日本EEZ内

使用sf包的st_within函数,快速判断每个作业点是否位于日本EEZ多边形范围内:

# 为作业点数据添加"是否在日本EEZ内"的标记列
df2 <- df2 %>%
  dplyr::mutate(
    in_jp_eez = sf::st_within(geometry, eez_JP, sparse = FALSE)[, 1]
  )
  • st_within(..., sparse=FALSE)返回逻辑矩阵,每个值对应作业点是否在EEZ内
  • 取[,1]是因为eez_JP过滤后仅包含日本EEZ这一个多边形

步骤3:统计EEZ内的作业总数

筛选出标记为TRUE的作业点,对ope_nums求和即可得到总数:

# 计算并输出日本EEZ内的捕捞作业总数
total_jp_eez_ops <- df2 %>%
  dplyr::filter(in_jp_eez) %>%
  dplyr::summarise(total_operations = sum(ope_nums)) %>%
  dplyr::pull(total_operations)

cat("日本专属经济区内的捕捞作业总数:", total_jp_eez_ops, "\n")

替代方案(使用st_intersects)

若更习惯用st_intersects函数,也可这样实现标记:

df2 <- df2 %>%
  dplyr::mutate(
    in_jp_eez = lengths(sf::st_intersects(geometry, eez_JP)) > 0
  )

原理是st_intersects返回每个点与EEZ的交集数量,数量大于0即表示点在EEZ内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:36:00