如何快速找出与指定范围栅格相交的国家多边形?
高效筛选与栅格范围相交的国家
核心思路
利用terra的空间矢量索引功能,直接批量筛选与栅格范围相交的国家,避免循环遍历,大幅提升运算效率。
具体代码实现
library(terra) library(rnaturalearthdata) # 1. 将栅格范围转换为多边形矢量(用于空间相交判断) raster_ext_poly <- as.polygons(ext(my_raster)) # 确保投影与国家矢量一致(ne_countries默认采用WGS84坐标系) crs(raster_ext_poly) <- crs(ne_shp) # 2. 将sf格式的国家数据转为terra的SpatVector(提升空间运算效率) ne_terra <- vect(ne_shp) # 3. 筛选与栅格范围相交的国家 intersecting_countries <- subset(ne_terra, intersects(ne_terra, raster_ext_poly)) # 查看结果(例如提取国家名称) intersecting_countries$name
批量处理栅格瓦片的优化方案
如果需要处理大量栅格瓦片,可批量生成栅格范围矢量后统一匹配:
# 假设你有一个栅格列表raster_list # 批量生成所有栅格的范围多边形 ext_polys_list <- lapply(raster_list, function(x) { poly <- as.polygons(ext(x)) crs(poly) <- crs(ne_terra) return(poly) }) # 批量获取每个栅格对应的相交国家 result_list <- lapply(ext_polys_list, function(poly) { subset(ne_terra, intersects(ne_terra, poly))$name }) # 结果列表中每个元素对应一个栅格的相交国家名称集合
关键说明
intersects()函数依托空间索引快速判断矢量相交关系,效率远高于循环遍历- 空间运算需保证投影一致,若栅格采用非WGS84投影,需先用
project()转换栅格范围多边形的投影 subset()直接返回符合条件的国家矢量数据,可直接提取名称、ISO代码等属性字段
内容的提问来源于stack exchange,提问作者89_Simple
相关产品推荐
相关产品推荐

