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

如何在R中利用AOI Shapefile裁剪河流Shapefile?区分裁剪与掩蔽

问题解决:用AOI裁剪河流数据(附crop与mask的区别)

先搞懂crop和mask的区别

  • st_crop():拿AOI的矩形外接框切数据,不管AOI是啥形状,只留框里的部分,速度快,适合先缩小数据范围省算力。
  • st_mask():严格按照AOI的实际形状切,只留落在AOI多边形内部的河流部分,边界贴合AOI,适合需要精确范围的场景。

你之前代码的问题

  1. 处理AOI时用了tidy(),这会把空间对象转成ggplot用的普通数据框,丢了空间属性,后面根本没法用来裁切。
  2. st_transform()是转坐标系的,参数得是目标CRS,不是AOI对象,你之前用错了。
  3. 用st_crop()时,AOI已经不是空间对象了,自然没法识别裁切范围。

正确操作代码

1. 正确读取AOI(必须保留空间属性)

推荐直接用sf包读取,全程用sf对象更省心:

library(sf)
# 先定义坐标系,EPSG码根据你的实际情况调整,NAD83 UTM10一般是26910
crs.NAD83.UTM.Z10 <- st_crs("EPSG:26910")

# 读取AOI并转成目标坐标系
shp.AOI <- st_read(dsn = "InputData/GIS/AOI", layer = "AOI") %>%
  st_transform(crs.NAD83.UTM.Z10)

2. 读取河流数据并统一坐标系

sf.streams <- st_read(file.path("InputData", "GIS", "Streams","Preprocessed","Rivers.shp"),
                      stringsAsFactors = FALSE) %>%
  st_transform(crs.NAD83.UTM.Z10) # 必须和AOI坐标系一致,不然裁切会出错

3. 二选一:裁切河流数据

快速裁切(用矩形框,省算力首选)

streams_cropped <- st_crop(sf.streams, shp.AOI)

精确裁切(贴合AOI形状)

streams_masked <- st_mask(sf.streams, shp.AOI)

验证结果(可选)

用ggplot快速看裁切后的效果:

library(ggplot2)
ggplot() +
  geom_sf(data = shp.AOI, fill = "lightblue", alpha = 0.3) +
  geom_sf(data = streams_masked, color = "darkblue")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:18:36