2

我有一个代表世界生态区域的 shapefile。我正在尝试确定哪些生态区域与我感兴趣的物种的分布相交。我正在使用最新版本的 R 以及 rgdal 和 rgeos 包。

我加载了一个名为“rangelist”的物种范围列表。

我在我的生态区域 shapefile (eco) 中加载,并创建一个名为“区域”的列表,其中包含每个生态区域的 SpatialPolygonsDataFrame 对象:

readOGR(ecofile,gsub(".shp","",ecofile))->eco
regions<-list()
for (i in 1:length(unique(eco$ECO_NAME))){
    print(unique(eco$ECO_NAME)[i])
    eco[eco$ECO_NAME==unique(eco$ECO_NAME)[i],]->regions[[i]]
}
names(regions)<-as.character(unique(eco$ECO_NAME))

然后我运行一个循环函数,检查来自'rangelist'的每个范围与来自'regions'的每个生态区域。这工作正常,直到:

> gIntersects(rangelist[[49]],regions[[23]])
Error in RGEOSBinPredFunc(spgeom1, spgeom2, byid, func) : 
  TopologyException: side location conflict at -78.7709 -8.18245

我将原始的 ecoregions shapefile 加载到 arcMap 10 中并运行“检查几何”工具,但没有发现任何问题。

数据的原始来源是: 物种范围: http: //www.natureserve.org/getData/birdMaps.jsp 生态区: http ://www.worldwildlife.org/science/data/item1875.html

我在这里临时发布了一个包含 2 个 Rdata 文件和一个 R 脚本的 zip 文件,以便您重现错误(文件大小为 33mb)。

有谁知道我如何解决或解决这个问题?

4

0 回答 0