世界の生態地域を表すシェープファイルがあります。関心のある種の分布と交差する生態地域を特定しようとしています。R の最新バージョンと rgdal および rgeos パッケージを使用しています。
「rangelist」と呼ばれる種の範囲のリストを読み込みます。
ecoregions シェープファイル (eco) を読み込み、すべての ecoregion の SpatialPolygonsDataFrame オブジェクトを含む「regions」というリストを作成します。
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 シェープファイルを arcMap 10 にロードし、「ジオメトリのチェック」ツールを実行しましたが、問題は見つかりませんでした。
データの元のソースは次のとおりです: 種の 範囲 : http://www.natureserve.org/getData/birdMaps.jsp
エラーを再現できるように、2 つの Rdata ファイルと R スクリプトを含む zip ファイルをここに一時的に投稿しました (ファイル サイズは 33 MB)。
この問題をどのように修正または回避できるかについて、誰かが考えを持っていますか?