Como solicitado na lista talk-br e prometido por mim, segue abaixo o script que fiz para permitir rodar o spell check nos mapas OSM.
Primeiro lembro que este NÃO é um script de spell check automático.
O procedimento é o seguinte :
-
De posse do arquivo brazil-latest, baixado do site download.geofabrik.de, roda-se o update com o osmupdate;
-
Gera-se um arquivo “entrada.osm” com um subconjunto dos dados acima usando o osmosis. Faço isso porque o arquivo brasil.osm é muito grande, e um spell check demoraria dias, alem disso quanto mais tempo fico sem fazer o upload, maior a possibilidade de alguem ter alterado alguma das vias e na hora do upload aparecer um conflito;
A cada vez que rodo o script eu altero o conteúdo da opção "–tf accept-ways highway=motorway_link,trunk_link,primary_link,secondary_link,tertiary_link ", no caso do exemplo, estou filtrando somente os highways do tipo *_link.
Nas ocasiões anteriores setei o filtro para highway=primary, highway=residential, e por aí vai. -
Abro o arquivo gerado no aspell, um spell check para linux ( uso o Ubuntu ), no modo interativo.
Aqui é que acontece o spell check, tenho o cuidado de não usar a opção “replace all”, exatamente para minimizar as possibilidades de alterações indiscriminadas e que comprometam os dados do mapa.
-
Após o aspell, gero um arquivo de mudanças ( osc ) com o osmosis, utilizando os arquivos de entrada e de saída do aspell
-
Agora é só fatiar o arquivo ( ./split.py ), e fazer o upload ( upload.py ).
O fatiamento ajuda no upload, ao dividir o trabalho em várias partes, até porque a API do osm limita a quantidade de elementos num upload, se não me engano no máximo 5000.
Fatio o arquivo em pedaços de 5 elementos cada.
- O último passo é fechar o changeset gerado, com o close.py
Obs.: o close.py que uso foi ligeiramente alterado para permitir receber como parâmetro o usuário e a senha, a versão original solicitava interativamente, o que inviabilizava o uso num script.
Espero que seja útil, e que ajude a dirimir as dúvidas.
Att,
Marcelo Pereira
#!/bin/bash
echo #########################################
echo ... atualizando o brasil.osm ...
echo #########################################
./osmupdate ./mapa_brasil/brasil.osm ./mapa_brasil/new_brasil.osm -B=./boundaries/brazil.poly
if [ -a "./mapa_brasil/new_brasil.osm" ]; then
rm ./mapa_brasil/old_brasil.osm
mv ./mapa_brasil/brasil.osm ./mapa_brasil/old_brasil.osm
mv ./mapa_brasil/new_brasil.osm ./mapa_brasil/brasil.osm
fi
echo #########################################
echo ... gerando o arquivo entrada ...
echo #########################################
osmosis \
--read-xml ./mapa_brasil/brasil.osm \
--tf accept-ways highway=motorway_link,trunk_link,primary_link,secondary_link,tertiary_link \
--tf accept-ways name=* \
--tf reject-relations \
--tf reject-nodes \
--write-xml ./fixing/entrada.osm
echo #########################################
echo ... rodando o aspell ...
echo #########################################
aspell -d pt_BR -c ./fixing/entrada.osm
read -p "press [enter] to continue"
echo #########################################
echo ... gerando o osc ...
echo #########################################
osmosis \
--read-xml file="./fixing/entrada.osm" --buffer \
--read-xml file="./fixing/entrada.osm.bak" --buffer \
--derive-change \
--write-xml-change file="./fixing/br_mudou.osc"
input="./fixing/br_mudou"
ident="-u trevorinserts -p *******"
comment="rodando spell check nos mapas OSM"
parts=$(echo "scale=0; (`tr -s ' ' '\n' < $input.osc | grep "changeset" | wc -l`/5)+1" | bc -l)
echo "$comment" > $input.comment
echo #########################################
echo ... dividindo o osc ...
echo #########################################
./split.py "$input.osc" $parts || exit -1
chgset=`./upload.py $ident -c yes -n -t "$input.osc"`
[ -z "$chgset" ] && exit -1
./set-changeset-tag.py $chgset $ident import yes reviewed yes source "Knowledge"
echo #########################################
echo ... fazendo upload das parts ...
echo #########################################
for num in `seq 1 $parts`; do
./upload.py $ident -c yes "$input-part$num.osc" -s $chgset -t || exit -1
echo $chgset
done
rm $input-part*
echo #########################################
echo ... fechando o changeset
echo #########################################
./close.py $chgset $ident