[R-br] Ler .MAP no R - Shapefile
Sérgio Henrique almeida da silva ju
sergio.edfisica em gmail.com
Sexta Abril 11 20:37:04 BRT 2014
Oi Eder
Obrigado pela ajuda!
No windows eu consigo rodar direitinho, mas no linux não.
Abraços
Em 11 de abril de 2014 20:17, Éder Comunello <comunello.eder em gmail.com>escreveu:
> Sérgio, boa noite!
>
> Dei uma rápida olhada no script que você mencionou. O problema pode ser
> decorrente de tentar usar o texto original com encoding "ISO-8859-1" em um
> sistema com encoding "UTF-8".
>
> A parte da função read.map() rodou normalmente aqui, mas alguns comandos
> que seguem parecem estar obsoletos (plot.polylist(), p. ex.)
>
> A função read,map() gera um objeto de classe 'polylist' que preciso
> estudar melhor, mas por ora dá pra visualizar o conteúdo com algumas
> adaptações...
>
> Separei o trecho de código da função em um arquivo separado chamado
> readMap.R e executei o trecho de código abaixo, usando o arquivo
> "BRREG.MAP" (Regiões do Brasil) pra testar.
>
> # <code r>
> # downURL <- 'ftp://ftp.datasus.gov.br/municip/mapas/2005/mapbr.zip'
> # arquivo com vários arquivos MAP, inclusive "BRREG.MAP" aqui utilizado
>
> setwd("C:/LAB/DATASUS")
> source("readMap.R") ### carregar função
>
> mapName <- "BRREG.MAP"
> mapa <- read.map(mapName)
> save(mapa, file=paste0(mapName,".R"))
>
> ### uma vez salvo, você poderá recarregar o objeto mapa, sem ter que usar
> read.map() novamente.
> # load(file=paste0(mapName,".R"))
>
> plot(attributes(mapa)$maplim, type='n', asp=1, xlab=NA, ylab=NA)
> title('Mapa')
> lapply(mapa, polygon, asp=T, col=3)
> # </code>
>
> O código do arquivo readMap.R retirei do link passado:
>
> # <code r>
> read.map = function(filename){
> zz=file(filename,"rb")
> #
> # header do .map
> #
> versao = readBin(zz,"integer",1,size=2) # 100 = versao 1.00
> #Bounding Box
> Leste = readBin(zz,"numeric",1,size=4)
> Norte = readBin(zz,"numeric",1,size=4)
> Oeste = readBin(zz,"numeric",1,size=4)
> Sul = readBin(zz,"numeric",1,size=4)
>
> geocodigo = ""
> nome = ""
> xleg = 0
> yleg = 0
> sede = FALSE
> poli = list()
> i = 0
>
> #
> # repete para cada objeto no arquivo
> #
> repeat{
> tipoobj = readBin(zz,"integer",1,size=1) # 0=Poligono,
> 1=PoligonoComSede, 2=Linha, 3=Ponto
>
> if (length(tipoobj) == 0) break
> i = i + 1
>
> Len = readBin(zz,"integer",1,size=1) # length byte da string Pascal
> geocodigo[i] = readChar(zz,10)
> Len = readBin(zz,"integer",1,size=1) # length byte da string Pascal
> nome[i] = substr(readChar(zz,25),1,Len)
> xleg[i] = readBin(zz,"numeric",1,size=4)
> yleg[i] = readBin(zz,"numeric",1,size=4)
> numpontos = readBin(zz,"integer",1,size=2)
>
> sede = sede || (tipoobj = 1)
>
> x=0
> y=0
> for (j in 1:numpontos){
> x[j] = readBin(zz,"numeric",1,size=4)
> y[j] = readBin(zz,"numeric",1,size=4)
> }
>
>
> # NAs separam vários polígonos no mesmo objeto
> # BUG a corrigir: Assim como está o primeiro polígono não fecha e, em
> multiplos poligonos, há um NA a mais no final
> xInic = x[1]
> yInic = y[1]
> for (j in 2:numpontos){
> if (x[j] == xInic & y[j] == yInic) {x[j]=NA; y[j] = NA}
> }
>
> poli[[i]] = c(x,y)
> dim(poli[[i]]) = c(numpontos,2)
> }
>
> class(poli) = "polylist"
> attr(poli,"region.id") = geocodigo
> attr(poli,"region.name") = nome
> attr(poli,"centroid") = list(x=xleg,y=yleg)
> attr(poli,"sede") = sede
> attr(poli,"maplim") = list(x=c(Oeste,Leste),y=c(Sul,Norte))
>
> close(zz)
> return(poli)
> }
> # </code>
>
>
> Éder Comunello <c <comunello.eder em gmail.com>omunello.eder em gmail.com>
> Dourados, MS - [22 16.5'S, 54 49'W]
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
--
Sérgio Henrique Almeida da Silva Junior
Doutorando em Epidemiologia em Saúde Pública
Escola Nacional de Saúde Pública Sérgio Arouca - ENSP/FIOCRUZ
http://lattes.cnpq.br/1611345552843383
Tel: (21) 968463637
http://www.linkedin.com/profile/view?id=250437145&trk=tab_pro
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20140411/50445ee9/attachment.html>
Mais detalhes sobre a lista de discussão R-br