我有一个代表世界生态区的shapefile。我试图确定哪些生态区域与我感兴趣的物种的分布相交。我正在使用最新版本的R和rgdal和rgeos软件包。
我加载了一个名为'rangelist'的物种范围列表。
我加载了我的ecoregions shapefile(eco),并创建一个名为'regions'的列表,其中包含每个生态区域的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'的每个ecoregions。这工作正常,直到:
> 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
我已暂时发布here一个包含2个Rdata文件和一个R脚本的zip文件,以便您重现错误(文件大小为33mb)。
有没有人知道如何解决或解决这个问题?