Estou tentando realizar uma união em um campo comum após mesclar dois shapefiles adjacentes. Os arquivos de forma acabam com pelo menos um pedaço fino de espaço entre eles. Quando tento uma união, recebo o seguinte erro de orfão órfão:
Erro no createPolygonsComment (p): rgeos_PolyCreateComment: furo órfão, não é possível encontrar o polígono que contém o furo no índice 17
Fiz upload de um exemplo reproduzível para o Dropbox neste link .
Aqui está o código para recriar o problema:
#loading required packages
require(sp)
require(rgdal)
require(maptools)
require(rgeos)
#load example data, set "dsn=" to your working directory or specify the path
example <- readOGR(dsn=".",layer="ReproducibleExample")
#Attempting a UnionSpatialPolygons based on the COUNTY field
example.df <- as(example, "data.frame")
countycol <- example.df$COUNTY
example.diss <- unionSpatialPolygons(example, countycol)
Devoluções:
Erro no createPolygonsComment (p): rgeos_PolyCreateComment: furo órfão, não é possível encontrar o polígono que contém o furo no índice 17
Tentando a correção proposta aqui e aqui :
slot(example, "polygons") <- lapply(slot(example, "polygons"), checkPolygonsHoles)
Isso retorna o mesmo erro que vem da tentativa de união, mas com número de índice diferente:
rgeos_PolyCreateComment: furo órfão, não é possível encontrar o polígono que contém o furo no índice 30
Tentando a correção proposta no útil tutorial de Roger Bivand
fix <- slot(example, "polygons")
fixa <- lapply(fix, checkPolygonsHoles)
Retorna o mesmo erro no índice 30 como acima.
Outros têm levantado este problema aqui e aqui , e enquanto as soluções postuladas acima parecem funcionar para alguns casos, outros casos não são resolvidos. Um usuário usou o QGIS para solucionar o problema, e o outro teve 2 dos 3 itens corrigidos, mas nenhuma solução para o final.
Parece que as pessoas continuam tendo problemas, apesar desse código funcionar periodicamente. Alguém encontrou uma solução no R?
Eu executei a ferramenta "reparar geometria" no ArcGIS e corrigiu o problema, mas parece que deve haver uma correção no R.