Browse Source

Iniciando processo de importação dos dados geográficos do IBGE

stable/1.0
Wagner (Estagiario) 13 years ago
parent
commit
bc7875638e
  1. BIN
      etc/data/ibge/geoftp.ibge.gov.br/organizacao_territorial/divisao_territorial/2009/dtb_05_05_2009.zip
  2. 56
      etc/data/ibge/leiame.txt
  3. 36
      etc/data/ibge/sigi-import-ibge-2009.py
  4. 148
      etc/data/ibge/sigi-import-ibge-2009.sh

BIN
etc/data/ibge/geoftp.ibge.gov.br/organizacao_territorial/divisao_territorial/2009/dtb_05_05_2009.zip

Binary file not shown.

56
etc/data/ibge/leiame.txt

@ -0,0 +1,56 @@
21/05/2012
Procedimento para importação de dados públicos obtidos do IBGE.
- Tabela de Municípios:
Disponível desde 1940, foi atualizada a cada década entre os anos
1940 e 2000 e depois anualmente até a última atualização em 2009 (este
parágrafo foi escrito em maio de 2012).
A atualização mais recente, portanto, é do ano de 2009. Considerando
que o formato de publicação tem variado bastante, o roteiro abaixo é
específico para os dados referentes ao ano 2009.
- Procedimentos e instruções:
1. Questões óbvias como configuração de PROXY são omitidas por não serem
relacionadas ao procedimento.
2. O diretório-base de referência no projeto é o raiz do projeto conforme
foi exportado do repositório, referenciado por $
3. O URL-base de obtenção dos dados é:
ftp://geoftp.ibge.gov.br
4. Tornar o diretório corrente para:
$/SIGI/trunk/etc/data/ibge
5. Baixar o arquivo de 2009. O comando executado com sucesso considerando a
configuração da intranet do Interlegis na data corrente - maio de 2012 - é:
wget -r --no-proxy ftp://geoftp.ibge.gov.br/organizacao_territorial/divisao_territorial/2009/ organizacao_territorial/divisao_territorial/2009
(o comando acima criará o caminho local "geoftp.ibge.gov.br/organizacao_territorial/divisao_territorial/2009/")
6. Torne corrente o caminho onde o arquivo de 2009 está baixado:
cd geoftp.ibge.gov.br/organizacao_territorial/divisao_territorial/2009
7. Expanda o arquivo obtido:
unzip dtb_05_05_2009.zip
8. Converta o arquivo expandido para o formato "CSV":
xls2csv DTB_05_05_2009.xls > DTB_05_05_2009.csv
9. Volte para o diretório-base do IBGE:
$/SIGI/trunk/etc/data/ibge
10. Execute o script de importação, cuja documentação dos processos encontra-se
nos fontes:
sigi-import-ibge-2009.sh geoftp.ibge.gov.br/organizacao_territorial/divisao_territorial/2009/DTB_05_05_2009.csv

36
etc/data/ibge/sigi-import-ibge-2009.py

@ -0,0 +1,36 @@
import sys, csv
_root_dict = None
def getUFdict( root, ufid ):
return( root[ ufid ] )
def getCidadesDict( macrodict, microid ):
if macrodict = None:
return( None )
microdoct = macrodict[ '__children' ]
if microdict = None:
microdict = {}
macrodict[ '__children' ] = microdict
def main( ):
arquivo = open( 'geoftp.ibge.gov.br/organizacao_territorial/divisao_territorial/2009/DTB_05_05_2009.csv', 'r' )
# despreza o cabecalho
arquivo.readline( )
lnum=0
csv_reader = csv.reader( arquivo, delimiter=',', quotechar='"' )
for registro in csv_reader:
if uf[ registro[ 0 ] ] = None:
uf[ registro[ 0 ] ] = {}
uf[ registro[ 0 ] ][ 'nome' ] = registro[ 1 ]
uf[ registro[ 0 ] ][ 'macrorregioes' ] = {}
# print "lnum: %s - %s" % ( lnum, registro )
lnum = lnum + 1
if lnum >= 10:
break
if __name__ = "__main__":
main( )
dumpdicts( )

148
etc/data/ibge/sigi-import-ibge-2009.sh

@ -0,0 +1,148 @@
#!/bin/sh
arquivo_csv=""
# Caso a variavel _DEBUG nao tenha sido preparada externamente,
# assumir que o default é sem DEBUG
if [ -z "${_DEBUG}" ]
then
_DEBUG="0"
fi
# Default verboso
if [ -z "${_VERBOSE}" ]
then
_VERBOSE="1"
fi
PrintDebug( )
{
# para a mensagem ser mostrada, _DEBUG deve ser configurada
# e o valor deve ser diferente de "0"
if [ -n "${_DEBUG}" -a "${_DEBUG}" -ne "0" ]
then
echo "$@"
fi
}
PrintHelp( )
{
PrintDebug `basename "${0}"` " -- importa tabelas de cidades do IBGE"
PrintDebug "Opcoes aceitas:"
PrintDebug " arquivo_csv=[caminho]"
PrintDebug " informa o caminho para o arquivo no formato 2009"
PrintDebug " _DEBUG=[debug]"
PrintDebug " 0 para nao mostrar mensagens, 1 para mostrar"
}
PrintMessage( )
{
# para a mensagem NAO ser mostrada, _VERBOSE deve ser configurada
# e o valor deve ser "0"
if [ -z "${_VERBOSE}" -o "${_VERBOSE}" -ne "0" ]
then
echo "$@"
fi
}
while [ "${#}" -gt 0 ]
do
if echo "${1}" | grep "=" 2>&1 > /dev/null
then
PrintDebug "Argumento de configuracao: \"${1}\""
eval "${1}"
else
PrintDebug "Argumento desconhecido: \"${1}\""
PrintHelp
exit 1
fi
shift
done
if [ -z "${arquivo_csv}" ]
then
PrintDebug "ERRO: informe o arquivo de importacao."
PrintHelp
exit 2
fi
if [ ! -f "${arquivo_csv}" ]
then
PrintDebug "ERRO: o arquivo de importacao nao existe ou nao pode ser acessado (\"${arquivo_csv}\")."
PrintHelp
exit 3
fi
if [ ! -r "${arquivo_csv}" ]
then
PrintDebug "ERRO: o arquivo de importacao nao pode ser lido (\"${arquivo_csv}\")."
PrintHelp
exit 4
fi
# filtrar o arquivo original para area de trabalho, por
# UF, Mesorregiao, Microrregiao, Municipio e depois executar
# os scripts Python para atualização do banco
nome_base=sigi_ibge_import
niveis="uf macrorregiao microrregiao municipio"
for nivel in $niveis
do
eval "arquivo_${nivel}=/tmp/${nome_base}.${nivel}.csv"
done
# arquivo_uf=/tmp/${nome_base}.uf.csv
# arquivo_macrorregiao=/tmp/${nome_base}.macrorregiao.csv
# arquivo_microrregiao=/tmp/${nome_base}.microrregiao.csv
# arquivo_municipio=/tmp/${nome_base}.municipio.csv
exec 3< "${arquivo_csv}" 4> "${arquivo_uf}" 5> "${arquivo_macrorregiao}" 6> "${arquivo_microrregiao}" 7> "${arquivo_municipio}"
lnum=0
PrintMessage "Iniciando leitura dos dados..."
read linha <&3
while read linha <&3
do
lnum=$(($lnum + 1))
if [ $(($lnum % 100)) -eq 0 ]
then
PrintMessage -n "${lnum} "
fi
echo "$linha" | cut -s -d, -f1,2 >&4
echo "$linha" | cut -s -d, -f1,3,4 >&5
echo "$linha" | cut -s -d, -f1,3,5,6 >&6
echo "$linha" | cut -s -d, -f1,3,5,7,8 >&7
if [ "${lnum}" -ge 1000 ]
then
break
fi
done
PrintMessage "\n${lnum} registros processados"
# fecha os descritores de saida
exec 4>&- 5>&- 6>&- 7>&-
for nivel in $niveis
do
eval "arq_in=/tmp/${nome_base}.${nivel}.csv"
eval "arq_out=/tmp/${nome_base}.${nivel}.csv.tmp"
sort < $arq_in > $arq_out
uniq < $arq_out > $arq_in
rm $arq_out
done
ifs="$IFS"
IFS="
"
for l in `wc -l /tmp/${nome_base}*`
do
PrintDebug $l
done
IFS="$ifs"
# Processar arquivos: INSERT ou UPDATE no banco
Loading…
Cancel
Save