Não foi possível enviar o arquivo. Será algum problema com as permissões?

Essa é uma revisão anterior do documento!


Script by PJ on 16/11/2007

<code R> ## ## Importação dos dados de arquivos ## para o R e para um banco Terralib/MySQL ## - teores de elementos medidos em água e localizações das amostras ## - poligonos com municípios do Paraná ##

## carregando os pacotes que serão usados (aRT) require(aRT)

##Conectar com o SGBD MYSQL (local) con=openConn() con

##Apagar banco já existente if(any(showDbs(con)=="geomedicina")) deleteDb(con, "geomedicina", force=T)

##Criando um novo banco db=createDb(con, "geomedicina") db

## string definindo a projeção proj="+proj=latlong +ellps=GRS67 +towgs84=-66.8700,-4.3700,-38.5200"

## ## Layer 1: municípios ## ## Criar no BD layer para polígonos dos municípios l.pr ← createLayer(db, "Parana", proj=proj) l.pr

##Adicionar ao BD o contorno do Paraná disponível em shapefile (fonte: IBGE) addShape(l.pr, tab="Parana", file="parana_pol.shp", id="CODIGO", length=10)

## verificando status do banco e layer db l.pr

## visualizando polygonos plot(l.pr)

## importando polygonos do banco para o R munic ← getPolygons(l.pr) class(munic)

## Q: qual a diferença em usar os dois comandos abaixo? aRTplot(munic) plot(munic)

## importando atributos dos polygonos do BD para o R municTab ← openTable(l.pr, "Parana") municTab municDt ← getData(municTab) dim(municDt) names(municDt) head(municDt)

## centroids e áreas de cada município center ← getOperation(l.pr, "centroid") center ## Q: como converter para UTM (ou obter um UTM) ???

## Q: area deveria usar UTM para o cálculo? ## Q: área calculada com LatLong é correta? area ← getMetric(l.pr, "area") area

## ## Lendo atributos dos poligonos (munícipios) de outra fonte (DATASUS) ## (serão necessárias operações para compatibilizar com dados do IBGE)

figado ← read.csv("cancerfigadopop2005.csv") head(figado)

names(figado) names(municDt)

## checando e corrigindo nomes dos municípios:

## um município trocou o nome….. ## fix (temporário até obter mapa atualizado do IBGE) ## para arquivo do IBGE (Vila Alta == Alto Paraíso)

figado$municipio ← as.character(figado$municipio) figado[figado$municipio == "Alto Paraíso", "municipio"] ← "Vila Alta"

all.equal(municDt$NOME,figado$municipio) ##estão em ordem diferente… all.equal(sort(municDt$NOME),sort(figado$municipio)) ## ainda 1 incongruencia: foo1 ← which(sort(municDt$NOME) != sort(figado$municipio)) cbind(sort(municDt$NOME),sort(figado$municipio))[foo1,] foo2 ← cbind(sort(municDt$NOME),sort(figado$municipio))[foo1,] foo2 municDt[municDt$NOME == foo2[1], "NOME"] ← foo2[2] ## nomes agora OK! all.equal(sort(municDt$NOME),sort(figado$municipio))

## reordenando segundo a ordem do IBGE figado ← figado[match(municDt$NOME, figado$municipio),] all.equal(municDt$NOME,figado$municipio)

## checando e corrigindo CODIGOS dos municípios: ## código do IBGE tem 1 campo a mais que o do DATASUS figado$id ← as.character(figado$id)

cbind(figado$id, municDt$CODIGO) figado$id ← paste(figado$id,substr(municDt$CODIGO, 7, 7),sep="") all.equal(municDt$CODIGO,figado$id)

## Q: suponha agora que eu tenha varios atributos no R, provenientes de outra ## fonte e associados aos polígonos como acima. ## Qual a melhor maneira de adicionar à tabela já existente (Paraná)? ## (tem que ser coluna a coluna com updatecolumns ou melhor abrir outra tabela ? ## No exemplo abaixo quero adicionar o data frame "figado" ao banco

## tentei pegar is ID's da tabela que veio do banco mas não deu… #> getID(municDt) #Erro em getID(municDt) : Not implemented yet #> getID(municTab) #Erro em getID(municTab) : Not implemented yet

## 1. adicionando à tabela já existente: ## (o que tentei a seguir nao funcionou, tem que ser coluna a coluna…???)

## 1.1 tentando adcionar todas as colunas de uma só vez:

## CODIGO foi usado como ID para munic no addShape() portanto uando aqui tb para figado all.equal(municDt$CODIGO,figado$id) municTab updateColumns(municTab, figado) ## nao funcionou mas pelo vignette aRTtable deveria… ## Erro em if (poskey != 1) { : argumento tem comprimento zero

## 1.2 adicionando as colunas uma a uma… (arrrgh) names(figado) for(cc in names(figado)[3:4]){

tmp <- data.frame(id=figado$id, data = figado[,cc])
names(tmp)[2] <- cc
print(head(tmp))
createColumn(municTab, cc, type="int")
updateColumns(municTab, tmp)

} ## mesmo erro que acima: ##Erro em if (poskey != 1) { : argumento tem comprimento zero

## 2. adicionando como uma nova tabela

## 2.1 usando creatTable() figadoTab ← createTable(l.pr, "CancerFigado") figadoTab l.pr updateColumns(figadoTab, figado) figadoTab

## usando importTable() figadoTab1 ← importTable(l.pr, "FigadoCancer", id="id", figado)

l.pr

## Q: Pedro. qual a diferença entre usar createTable() e importTable() ? ## A segunda simplesmente encapsula os comandos da primeira em uma unica chamada?

## ## Layer 2: dados geoquímicos ##

## Q: ## Pedro, aqui estou tentando usar 3 formas diferentes de colocar ## o dado de pontos no banco, mas as baseadas im importSpData() ## estao dando problemas

## ## Forma 1: (não funcionou, veja msg de erro abaixo) ## teores ← read.table("aguafix.csv", head=T, sep=";") head(teores) summary(teores) plot(munic) points(teores[,c("LONGITUDE", "LATITUDE")], pch=20, cex=0.3, col="blue")

## convertendo teores para SpatialPointsDataFrame names(teores) coordinates(teores) ← c("LONGITUDE","LATITUDE") teores$ID ← as.character(1:nrow(teores)) ## Q: como atribuir projeção ao Layer criado com importSpData()? O seguinte é válido? attr(teores, "proj4string") ← CRS(proj) l1.geoq ← importSpData(db, teores, "GQ1") ## MSG DE ERRO: #Erro em .aRTcall(object, "cppUpdateColumns", colnames = colnames(data), : # Could not update the table l1.geoq

## ## Forma 2: (não funcionou, veja msg de erro abaixo) ## teores ← read.table("aguafix.csv", head=T, sep=";") teores$ID ← as.character(1:nrow(teores)) #ll ← SpatialPoints(teores[,c("LONGITUDE", "LATITUDE")], proj=CRS(proj)) lldf ← SpatialPointsDataFrame(coords=teores[,c("LONGITUDE", "LATITUDE")],

                             data=teores[,-(4:5)],
                             proj = CRS(proj))

l12.geoq ← importSpData(db, lldf, "GQ2") #Erro em .aRTcall(object, "cppUpdateColumns", colnames = colnames(data), : # Could not update the table

## ## Forma 3: (Funcionou) ## ## alternativa a importSpData() seria fazer passo a passo teores ← read.table("aguafix.csv", head=T, sep=";") coordinates(teores) ← c("LONGITUDE","LATITUDE") teores$ID ← as.character(1:nrow(teores)) attr(teores, "proj4string") ← CRS(proj)

l3.geoq ← createLayer(db, "GQ3", proj=proj) l3.geoq addPoints(l3.geoq, teores) l3.geoq tb3.geoq ← importTable(l3.geoq, "Elementos", id="ID", teores) l3.geoq tb3.geoq

## ## Forma 4: (Funcionou, mas…) ## ## alternativa a importSpData() seria fazer passo a passo teores ← read.table("aguafix.csv", head=T, sep=";") teores$ID ← as.character(1:nrow(teores)) lldf ← SpatialPointsDataFrame(coords=teores[,c("LONGITUDE", "LATITUDE")],

                             data=teores[,-(4:5)],
                             proj = CRS(proj))

l4.geoq ← createLayer(db, "GQ4", proj=proj) l4.geoq addPoints(l4.geoq, lldf) l4.geoq ## ele nao aceitou usar o nome da tabela "Elementos" já usado acima ## mesmo etando em outro layer !!!!!! tb4.geoq ← importTable(l4.geoq, "Elem", id="ID", lldf) l4.geoq tb4.geoq </code R>


QR Code
QR Code software:art:scripts:scriptgm-pj (generated for current page)