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

如何使用R的sf包筛选保留被A3高速公路穿过的意大利市镇

问题原因

你使用的st_intersection()函数的作用是返回两个空间对象的重叠几何部分,当你用线要素(A3高速)和面要素(市镇)执行交集操作时,最终得到的comuni_A3本质是A3高速被各个市镇裁切后的线段集合,属于线类型,因此绘图时只会渲染线条,不会显示完整的市镇面域。

解决方案

改用空间相交判断筛选完整的市镇面域,你可以使用st_intersects()空间谓词搭配筛选逻辑,或者直接用sf包内置的st_filter()函数实现需求。

修正后的完整代码如下:

library(sf)
library(dplyr)
library(ggplot2)

# 1. 提取A3高速,提前统一CRS避免空间判断错误
only_motorway_A3 <- only_motorway %>%
  filter(ref == "A3") %>%
  st_transform(32632) # 统一为你后续绘图用的EPSG:32632

# 2. 先统一市镇数据的CRS
comuni <- comuni %>% st_transform(32632)

# 3. 筛选所有和A3高速相交的完整市镇
# 方法1:用st_filter(代码更简洁)
comuni_A3 <- st_filter(comuni, only_motorway_A3, .predicate = st_intersects)

# 方法2:用st_intersects逻辑判断(更易理解底层逻辑)
# comuni_A3 <- comuni[st_intersects(comuni, only_motorway_A3, sparse = FALSE), ]

# 4. 绘图
ggplot() +
  geom_sf(data = comuni_A3, 
          color = "gray30", size = 0.1, fill = "black") + # 面要素:fill控制填充色,color控制边界色
  geom_sf(data = only_motorway_A3, size = 0.15, color = "green") +
  coord_sf(crs = 32632) +  
  theme_void()
说明
  • 空间筛选时建议提前统一两个数据集的坐标系,避免因CRS不匹配导致的空间判断错误
  • 面要素绘图时fill参数控制面的填充颜色,color参数控制面的边界颜色,你可以根据需要调整颜色参数达到预期视觉效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:15:04