gIntersects TopologyException в rgeos R - PullRequest
       49

gIntersects TopologyException в rgeos R

2 голосов
/ 22 сентября 2011

У меня есть шейп-файл, который представляет экорегионы мира.Я пытаюсь определить, какие экорегионы пересекаются распределением интересующих меня видов.Я использую последнюю версию R и пакеты rgdal и rgeos.

Я загружаю в список диапазонов видов, называемый 'rangelist'.

Я загружаю в свой файл экорегионов shape-файл (eco) и создаю список с именем 'region', который содержит объект 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' для каждого из этих экорегионов из 'регионов'.Это работает нормально до тех пор, пока:

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

Я загрузил оригинальный шейп-файл экорегионов в arcMap 10 и запустил инструмент «Проверить геометрию», но он не нашел проблем.

Первоначальные источники данных: диапазоны видов: http://www.natureserve.org/getData/birdMaps.jsp экорегионы: http://www.worldwildlife.org/science/data/item1875.html

Я временно разместил здесь ZIP-файл, содержащий 2 файла Rdata и сценарий R, позволяющий воспроизвести ошибку(размер файла составляет 33 МБ).

Кто-нибудь имеет какие-либо идеи относительно того, как я могу исправить или обойти эту проблему?

...