mirror of https://github.com/interlegis/sigi.git
Wagner (Estagiario)
13 years ago
4 changed files with 240 additions and 0 deletions
Binary file not shown.
@ -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 |
||||
|
|
||||
|
|
@ -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( ) |
||||
|
|
@ -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…
Reference in new issue