[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