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

如何正确在球面Shapefile上绘制坐标并完成空间相交统计?

解决方法

1. 修复中等尺度国家多边形的拓扑有效性

不要降级到小尺度数据,直接对原始中等尺度的国家数据做几何修复,st_make_valid只会修正拓扑错误,不会破坏原有多边形的形状精度:

# 加载并修复中等尺度国家数据
world <- ne_countries(scale = "medium", returnclass = "sf") %>%
  st_make_valid()

# 验证修复结果(返回TRUE则表示所有几何都有效)
all(st_is_valid(world))

2. 用空间连接替代相交操作统计点归属

统计点在多边形内的数量,st_join比st_intersection更高效且更适合这类场景,避免相交操作带来的拓扑问题:

# 将陨石落点匹配到对应的国家
meteorite_country <- st_join(MeteoriteData.sf, world, join = st_within)

# 按国家统计落点数量,过滤掉无归属的点(如海洋上的落点)
int_result <- meteorite_country %>%
  drop_na(sovereignt) %>%
  group_by(sovereignt) %>%
  count(name = "meteorite_count")

3. 临时关闭S2球面几何引擎(针对全球拓扑错误)

如果仍遇到S2相关的拓扑报错,可临时切换到平面几何处理WGS84数据,解决球面计算带来的Loop无效问题:

# 关闭S2引擎
sf::sf_use_s2(FALSE)

# 执行空间连接操作
meteorite_country <- st_join(MeteoriteData.sf, world, join = st_within)

# 操作完成后可重新开启S2(可选)
sf::sf_use_s2(TRUE)

4. 验证地图绘制效果

修复后的国家数据绘制地图,效果和原始数据一致:

MeteoriteMap <- ggplot(data = world) +
  geom_sf() +
  geom_sf(data = MeteoriteData.sf, size = 0.5, shape = 23, fill = "darkred") +
  theme_bw()

MeteoriteMap

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:01:21