OpenStreetMap logo OpenStreetMap

Jorge Gustavo Rocha's Diary

Recent diary entries

A rede de postos de carregamento do OpenStreetMap está bastante completa, pelo que me tenho apercebido.

Hoje quis ver que postos havia em Esposende e no OpenStreetMap não estava nenhum registado. Nem um :-(

Por isso, fui sacar os postos da rede MOBI.E para comparar e ver o que poderia estar em falta.

Sacar Postos da rede MOBI.E

Abrir o site da rede MOBI.E.

Abrir as ferramentas de desenvolvimento e selecionar o separador Rede. Eventualmente por um filtro para só apanhar os pedidos que tenham ‘location’. Fazer um refresh da página para apanhar os pedidos feitos ao servidor. O pedido que é apanhado está no seguinte print screen.

Pode-se fazer copy e paste do JSON retornado e guardar num ficheiro. Ou, como se faz no passo seguinte, fazer o mesmo pedido na linha de comando.

Guardar o resultado num arquivo JSON

See full entry

Location: Costa Nova, Gafanha da Encarnação, Ílhavo, Aveiro, Portugal

Converti as moradas da Madeira e dos Açores para *.shp, *.osm e *.json. São dados importados do INE e referem-se a alojamentos. Não incluem o comércio e indústria.

Para editar transformações de coordenadas, criei já tudo em EPSG:4326 (WGS84).

Estão disponíveis na nextcloud em:

Estão por lá também as scripts de importação.

Se preferirem trabalhar só com os pontos de entrega do correio, em vez de terem o mesmo ponto repetido para cada endereço, como acontece nos prédios, criei uma tabela entregas.

A tabela entregas mantém toda a informação, pois estou a agregar a informação das diferentes moradas num único ponto.

Criei uma pasta Pontos de Entrega Continente onde têm uma exportação por concelho.

Para quem usar o QGIS, criei nessa pasta um geopackage continente.gpkg que tem as duas tabelas: moradase entregas.

Também fiz um dump do Postgresql, que está nessa pasta em enderecos-202103291045.backup.

Atenção: as shapefiles têm limitações no comprimento dos atributos. Algumas agregações estão truncadas (pelo limite de 255 carateres do formato shapefile.

Criação de uma tabela só com os pontos de entrega

See full entry

Para sistematizar a importação do continente, podem-se usar as seguintes scripts:

Sacar índices, gerar uma script para sacar os zips e sacar os zips:

#!/bin/bash

wget https://inspire.ine.pt/AD/atom/CDG_AD_BNM_pc_Norte_Atom.xml
wget https://inspire.ine.pt/AD/atom/CDG_AD_BNM_pc_Centro_Atom.xml
wget https://inspire.ine.pt/AD/atom/CDG_AD_BNM_pc_AML_Atom.xml
wget https://inspire.ine.pt/AD/atom/CDG_AD_BNM_pc_Alentejo_Atom.xml
wget https://inspire.ine.pt/AD/atom/CDG_AD_BNM_pc_Algarve_Atom.xml

awk '/Addresses_[0-9]+_EPSG3763.zip/ {print $3}' *.xml | sed 's/href=/wget /' > saca.sh

mkdir zips; cd zips; bash ../saca.sh

A script cria uma pasta zips com 278 zips (um para cada concelho do continente).

Para o restante processamento, usa-se o GDAL e uma base de dados PostgreSQL, onde é criada uma tabela moradas.

Nessa pasta, corre-se a seguinte script que processa concelho a concelho. Para cada concelho, são acrescentados os respetivos endereços à tabela moradas.

Script processa.sh:

#!/bin/bash

for filename in *.zip
do
    base="${filename%.*}"
    unzip $filename
    echo "${filename%.*}"
    GML_ATTRIBUTES_TO_OGR_FIELDS=YES GML_SKIP_RESOLVE_ELEMS=NONE ogr2ogr -f PostgreSQL PG:'service=osm' GMLAS:$base.gml -nlt CONVERT_TO_LINEAR
    psql service=osm -f insere.sql
    rm $base.gml    
done

A script processa.sh recorre a uma script SQL insere.sql, que é a seguinte:

See full entry

Na importação das moradas do INE, estava a perder o “nome do edifício”, que é importante. Nalguns casos, os endereços não têm número, mas têm “nome do edifício”, como é ilustrado na imagem seguinte (em Beja).

Assim sendo, a query para passar das múltiplas tabelas criadas a partir do GML para uma única tabela passa a ser:

See full entry

Importar moradas no INE

Posted by Jorge Gustavo Rocha on 7 March 2021 in Portuguese (Português). Last updated on 8 March 2021.

O INE disponibiliza um conjunto de moradas relativas a alojamentos, no formato ATOM

O serviço é apenas um índice. O serviço em si divide-se em partes:

Dentro de cada índice, há dois links para cada município com a mesma informação: um no sistema de coordenadas Portuguesas EPSG:3763 e outro em Europeias ETRS:4258.

Por exemplo, para o meu município, Ílhavo, terei que usar o índice da zona centro e descarregar:

wget http://inspire.ine.pt/AD/atom/gml/Addresses_0110_EPSG3763.zip

Não é fácil ler e transformar o GML em algo usável num editor de OSM. Mas como é um processo automatizável, aqui fica a descrição do processo. O que aqui fiz para Ílhavo, pode ser feito para qualquer outro concelho. Pode ser feito na linha de comandos. Vou usar o QGIS só para visualizar os dados.

Estou a utilizar o GDAL e uma base de dados PostgreSQL com Postgis.

Descompactar.

unzip Addresses_0110_EPSG3763.zip Inserir o GML em base de dados (num schema ilhavo)

GML_ATTRIBUTES_TO_OGR_FIELDS=YES GML_SKIP_RESOLVE_ELEMS=NONE ogr2ogr -f PostgreSQL PG:'service=osm schemas=ilhavo' GMLAS:Addresses_0110_EPSG3763.gml -nlt CONVERT_TO_LINEAR

Na base de dados, transformar as inúmeros tabelas numa única com as moradas e respetivos atributos.

See full entry

Location: Costa Nova, Gafanha da Encarnação, Ílhavo, Aveiro, Portugal

HOT Task Manager 2

Temos uma instalação do HOT Task Manager 2 para a comunidade portuguesa, em língua portuguesa (obrigado aos tradutores do HOT).

Já há pelo menos 3 mapeadores com permissões de “administrator” que podem dar permissão de “project manager” a quem precisar. Quem quiser criar um projeto, passe um email na nossa lista Talk-PT que um dos administradores faz isso.

Esta ferramenta é muito interessante para apoiar mapping parties.

Bom trabalho!

Location: Cidreiro, Vila de Rei, Castelo Branco, 6110-202, Portugal

Durante a party de Águeda, na Mourisca, editei a linha uqe delimitava a zona industrial, e quiz reverter essa linha para a versão original uns dias depois.

Para isso, saquei a versão 2 (boa) da linha, com o browser: http://api.openstreetmap.org/api/0.6/way/164427582/2

Depois alterei o XML, acrescentando action=”modify” na tab way, ficando:

Abri no JOSM, e tentei o upload. Deu conflitos. Resolvi os conflitos indicando que esta versão deveria sobrepor as anteriores. Fiz de novo upload. Acho que consegui. Depois descarreguei a nova versão (v5), com o URL: http://api.openstreetmap.org/api/0.6/way/164427582/2 Há uns nodos (2) de diferença. Vou pensar melhor no assunto, pois pensei que estes passos eram os suficientes para restaurar uma versão anterior de uma linha. Penso que estes nodos, como entretanto foram removidos ou alterados, já não podem fazer parte da linha.

Boa gente,

Na prossecução da minha missão de limpar a CAOP existente, tive que remover milhares de pontos que restaram de uma remoção dos ways, mas não dos nodes. Ou seja, haviam montes de nodes sem tags nenhumas que já foram as linhas da CAOP.

Por os seleccionar muito rapidamente, usei a seguinte expressão no JOSM:
type:node untagged -child
no diálogo do "Search..."

Ou seja, encontra nodos que não sejam filhos de nada (ways ou relactions) e que não tenham tags.

Funciona às mil maravilhas...

Sacar a hora de mofificação que ficou no cartão de memória do telemóvel

ls -al --time-style='+%Y:%m:%d %H:%M:%S' -l > /tmp/x.sh

Editar o ficheiro gerado para ficar algo do género:

#!/bin/bash

exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:02:48" Img015.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:03:14" Img016.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:03:46" Img017.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:04:22" Img018.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:04:44" Img019.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:04:52" Img020.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:07:08" Img021.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:09:00" Img022.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:09:52" Img023.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:10:06" Img024.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:10:50" Img025.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:11:02" Img026.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:11:54" Img027.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:14:06" Img028.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:14:32" Img029.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:14:42" Img030.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:15:08" Img031.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:15:16" Img032.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:15:36" Img033.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:15:50" Img034.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:16:20" Img035.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:16:36" Img036.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:17:22" Img037.jpg
exiv2 -M"set Exif.Photo.DateTimeOriginal 2011:04:01 11:22:44" Img038.jpg

Bingo!

O JOSM é bom rapaz, mas só consegue transformar em data layer um GPX que contenha tracks. Se o GPX só contiver pontos, não dá.

1) Usei um programa muito básico que se chama gpsbabel.
gpsbabel -i gpx -o osm lugaresnew.gpx lugares.osm

2) Abri o JOSM e carreguei lugares.osm

Neste caso...

3) Seleccionei tudo e:

3.1) acrescentei a mesma tag a todos os elementos ao
mesmo tempo (place=hamlet e source=CM Vale de Cambra)
3.2) Removi a tag created_by=GPSBabel

4) Fiz o upload e pronto.

1) Usando a XAPI, a coisa demora um pouco a responder.

curl -g "http://jxapi.openstreetmap.org/xapi/api/0.6/*[amenity=pharmacy][bbox=-9.2,39.68,-6.2,42.19]" -o farmacias.osm

2) Isolar as farmácias a partir de um dump no formato osm

Para "isolar" as farmácias já registadas, sem despejar o dump portugal.osm no Postgresql, pode-se usar o osmosis.

sudo apt-get install osmosis

osmosis --read-xml portugal.osm --tf accept-nodes amenity=pharmacy --tf reject-ways --tf reject-relations --write-xml farmacias.osm

ou ainda

osmosis --read-xml portugal.osm --tf accept-nodes amenity=pharmacy --tf accept-ways amenity=pharmacy --tf reject-relations --write-xml farmacias.osm