Srs,
Mais um “projeto” em andamento, correndo em paralelo com o do Transporte Público daqui da RMR.
Há alguns dias, discutimos na lista sobre o conserto dos nomes das ruas de Recife.
Inicialmente minha reclamação era a falta das qualificadoras Rua, Avenida, etc, mas notei que também existe outro problema, que é o uso das abreviações, R., Av., Trav, etc.
Até para ganhar experiência com os padrões do OSM, resolvi tentar consertar isso.
Como o JOSM, ou o iD não permitem replace no texto do mapa, só search, me restava tentar fazer isso externamente, via um editor de textos, por exemplo.
Imaginei inicialmente o procedimento a seguir :
-baixar uma área do mapa no OSM pelo JOSM
-salvar como .OSM
-atualizar num editor externo
-reabrir o arquivo atualizado no JOSM
-fazer o upload
Os problemas encontrados neste procedimento incluem :
-O JOSM não permite baixar grandes pedaços do mapa, portanto teria que repetir à exaustão o processo, controlando o que já foi feito para evitar retrabalho.
- Processo lento demais, e não passível de automatização ( para mim, pelo menos )
- Ter que inserir action=“modify” em cada objeto atualizado, para permitir o upload.
- …
Como dizem que a preguiça é a mãe da invenção, e eu sou muito preguiçoso, digo, inventivo, resolvi tentar automatizar o máximo possível este processo, daí consegui o seguinte :
Primeiro eu precisava obter o mapa de Pernambuco atualizado, pois aqui é que eu estou concentrando as ações ( lembro que todo o processo pode ser replicado para o resto do Brasil, com poucas alterações ), então fiz o seguinte :
-
download do mapa Brasil, a partir do geofabrik ( pode ser feito de maneira gráfica, mas indico um comando para permitir criar um script )
wget http://download.geofabrik.de/south-america/brazil-latest.osm.bz2 -O ./mapa_brasil/brazil-latest.osm.bz2
-
extrair no mapa acima o mapa de onde pretendo trabalhar, para isso precisava dos boundaries dos estados, consegui aqui :
-
o comando para gerar o arquivo pernambuco.osm :
bzcat ./mapa_brasil/brazil-latest.osm.bz2 | ./osmconvert - -B=./boundaries/pernambuco.poly -o=./pernambuco/pernambuco.osm
Pronto, agora com o arquivo do que quero, preciso atualizá-lo, para isso fiz :
-
atualizar o arquivo propriamente dito :
./osmupdate ./pernambuco/pernambuco.osm ./pernambuco/new_pe.osm --day -B=./boundaries/pernambuco.poly
-
garantir que na pasta do mapa, sempre se possa rodar um script para atualizar o mapa a partir da última versão atualizada e não a partir do mapa extraído do brazil-latest.osm
rm ./pernambuco/old_pernambuco.osm
mv ./pernambuco/pernambuco.osm ./pernambuco/old_pernambuco.osm
mv ./pernambuco/new_pe.osm ./pernambuco/pernambuco.osm -
Extrair do arquivo somente o que pretendo alterar, isso dimunui o tamanho do arquivo, facilitando o trabalho.
osmosis
–read-xml ./pernambuco/pernambuco.osm
–tf accept-ways highway=*
–tf accept-ways name=*
–tf reject-relations
–used-node idTrackerType=Dynamic
–write-xml ./pernambuco/entrada.osm -
Agora comecemos o trabalho em si, como já sou velho para aprender novos truques, me virei com o sed mesmo. Aqui só me preocupei com as abreviações no início dos nomes das vias, a primeira linha é um LTRIM na tag name.
sed -e ‘s:v=" +:v=":Ig’
-e ‘s:"R. *|"R :"Rua :Ig’
-e ‘s:"av. *|"av :"Avenida :Ig’
-e ‘s:"Estdr. *|"Estdr :"Estrada :Ig’
-e ‘s:"Estr. *|"Estr :"Estrada :Ig’
-e ‘s:\btv. *|\btv :Travessa :Ig’
-e ‘s:\btrav. *|\btrav\b:Travessa :Ig’ < ./pernambuco/entrada.osm > ./pernambuco/validado.osm -
Depois de gerar um arquivo atualizado, extrair dele só o que foi alterado, no formato já pronto para upload.
osmosis
–read-xml file=“./pernambuco/validado.osm”
–read-xml file=“./pernambuco/entrada.osm”
–derive-change
–write-xml-change file=“./pernambuco/mudou.osc” -
Só falta fazer o upload, aqui eu prefiro abrir o arquivo no JOSM para rodar o validador e resolver possíveis conflitos, mas pode-se fazer o upload direto, só não pesquisei ainda o comando osmosis para isso.
Adianto que identifiquei outro padrão a se consertar mas não sei como, é o caso das Travessas numeradas, exemplos:
<tag k="name" v="2° Travessa Golfinho"/>
<tag k="name" v="2 Travessa Teófilo de Melo"/>
<tag k="name" v="3ª Rua do Colégio"/>
<tag k="name" v="3a Travessa Amador Meira"/>
Alguem me diz como fazer ?
É isso.
Só não fiz o upload do changeset ainda para que antes o processo seja analisado por todos.
Fiquem a vontade para indicar erros, possibilidades de melhoria, performance, etc, e acréscimo de qualificadoras, as que inclui foram as que vi no arquivo daqui de Pernambuco.
Att,
Marcelo Pereira