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@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>
# 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 <comunello.eder@gmail.com>
Dourados, MS - [22 16.5'S, 54 49'W]


_______________________________________________
R-br mailing list
R-br@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