RES: Defining Holes Inside a Polygon
Very sorry about the attached file, I'm not used to mailing lists, won't
happen again.
Well, I've already tried the checkPolygonsHoles function as specified in a
book of Yours, and even then nothing changes in the final Shapefiles, all
the polygons remain with FALSE "hole" slots.
Below are the code and sessionInfo().
# Required Packages
library(rgdal)
library(RODBC)
library(maptools)
gpclibPermit()
#Loading Data
Data<-odbcConnectExcel2007('Sub-Provincias-Forams-Dados.xlsx',readOnly=T)
PCdata<-sqlFetch(Data,'PC',rownames='ID')
odbcCloseAll()
# Loading Lines
PC<-MapGen2SL('PCForams.dat',proj4string=CRS('+proj=longlat +ellps=WGS84'))
# Verifing closed Lines
PCP<-sapply(slot(PC,'lines'),function (x) {
crds<-slot(slot(x,'Lines')[[1]],'coords')
identical(crds[1,],crds[nrow(crds),])
})
# Preparing the Poligons
PCP2<-PC[PCP==T]
lista_de_pols<-slot(PCP2,'lines')
PCSP<-SpatialPolygons(lapply(lista_de_pols, function(x) {
Polygons(list(Polygon(slot(slot(x,'Lines')[[1]],
'coords'))),ID=slot(x,'ID'))
}),proj4string=CRS('+proj=longlat +ellps=WGS84'))
# Defining the Holes
pls_out<-lapply(slot(PCSP,"polygons"),checkPolygonsHoles)
PCSPH<-SpatialPolygons(pls_out,proj4string=CRS('+proj=longlat
+ellps=WGS84'))
PCSPDF<-SpatialPolygonsDataFrame(PCSPH,PCdata)
writeOGR(PCSPDF,dsn='.',layer='PCForams',driver='ESRI Shapefile')
# Session Info
R version 2.12.0 (2010-10-15)
Platform: x86_64-pc-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=Portuguese_Brazil.1252
[2] LC_CTYPE=Portuguese_Brazil.1252
[3] LC_MONETARY=Portuguese_Brazil.1252
[4] LC_NUMERIC=C
[5] LC_TIME=Portuguese_Brazil.1252
attached base packages:
[1] grDevices datasets splines graphics stats
[6] tcltk utils methods base
other attached packages:
[1] gpclib_1.5-1 maptools_0.7-38 lattice_0.19-13
[4] foreign_0.8-41 RODBC_1.3-2 rgdal_0.6-28
[7] sp_0.9-72 svSocket_0.9-50 TinnR_1.0.3
[10] R2HTML_2.2 Hmisc_3.8-3 survival_2.35-8
loaded via a namespace (and not attached):
[1] cluster_1.13.1 grid_2.12.0 svMisc_0.9-60
[4] tools_2.12.0
Thanks.
Rodrigo.
-----Mensagem original-----
De: Roger Bivand [mailto:Roger.Bivand at nhh.no]
Enviada em: sexta-feira, 5 de novembro de 2010 08:01
Para: Rodrigo Aluizio
Cc: R Help
Assunto: Re: [R-sig-Geo] Defining Holes Inside a Polygon
On Fri, 5 Nov 2010, Rodrigo Aluizio wrote:
Hi List. I?m trying to solve an issue here, but it?s getting tricky. I have an MapGen .dat file (attached) that contains about 39 closed lines. Three of them (the largest ones) will be my main polygons and the rest of them must become holes inside one of the three major areas. I?m able to transform all the closed lines into SpatialPolygons and even create shapefiles with them, but how can I modify the ?hole? slot of the smaller polygons so I can keep them transparent when overlaying another map (those holes will overlay islands of a raster image)?
Next time avoid sending 200K to over 1700 people, please, we have a planet
to protect! Put any desired attachments on a website and provide a link.
You should also have provided the code (in your message) to get from:
library(maptools)
l1 <- MapGen2SL("PCForams.dat")
to your problem - as those choices may be the cause of the problem; you have
not provided the output of sessionInfo() either. Once things are lined up,
you should - if you may - say:
gpclibPermit() # very restrictive license pls_out <- lapply(slot(SpPols0,
"polygons"), checkPolygonsHoles)
SpPols1 <- SpatialPolygons(pls_out)
Or if you can install rgeos from source on R-Forge, equivalently:
library(rgeos)
SpPols1 <- createSPComment(SpPols0)
Hope this helps,
Roger
Thank you for the attention and help. Regards. ------------------------------------------------------------------- MSc. <mailto:r.aluizio at gmail.com> Rodrigo Aluizio Centro de Estudos do Mar/UFPR Laborat?rio de Foramin?feros e Micropaleontologia Ambiental Avenida Beira Mar s/n - CEP 83255-971 Pontal do Paran? - PR - Brazil
-- Roger Bivand Economic Geography Section, Department of Economics, Norwegian School of Economics and Business Administration, Helleveien 30, N-5045 Bergen, Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43 e-mail: Roger.Bivand at nhh.no