Importing OSM planet data

From GeoBox

Jump to: navigation, search

Contents

OSM

Antes de importar, é necessário ter a base de dados 'osm'.

Criação da base de dados OSM

From the shell:

createdb -T template_postgis osm

Note: If you receive an FATAL: Ident authentication failed for user "geobox", you should do the following:

sudo vi /etc/postgresql/8.4/main/pg_hba.conf
find the line
local   all         all                               ident
and change it to:
local   all         all                               trust

From SQL:

CREATE DATABASE osm TEMPLATE=template_postgis;

With pgAdmin III interface:

File:Nova_Base_de_Dados.png

Importação dos dados

Para inserir a informação existente no OSM na base de dados, usa-se um backup do país inteiro, que pode ser obtido a partir de http://download.geofabrik.de/osm/europe/portugal.osm.bz2.

Nota: NÃO É PRECISO descomprimir o ficheiro.

cd Transferências
osm2pgsql -H localhost -m -U geobox -W -d osm portugal.osm.bz2

Com este comando, são criadas as tabelas no PostGIS com a informação existente do OSM.

Se ainda não tiver o comando osm2pgsql instalado, poderá instalar o mesmo com o comando:

sudo apt-get install osm2pgsql

OSM data preliminary exploration

Exploração dos dados do OSM em SQL.

Nota muito importante: Há várias entidades que podem ser representadas por geometrias diferentes. Na descrição das entidades, no Wiki do OSM, há sempre a indicação de quais são as geometrias aconselhadas para cada tipo de entidade. Por exemplo, para as farmácias, são indicadas duas geometrias possíveis: ponto ou área. Por isso, para saber todas as farmácias existentes, é preciso pesquisar nas tabelas planet_osm_point e planet_osm_polygon.

Regarding point based features

How many pharmacies are registered in OSM?

SELECT COUNT(*)
FROM planet_osm_point
WHERE amenity = 'pharmacy'

How many pharmacies without name are registered in OSM?

SELECT osm_id, amenity, name
FROM planet_osm_point
WHERE amenity = 'pharmacy' AND name IS NULL

Which amenity types are been used?

SELECT DISTINCT amenity 
FROM planet_osm_point

Which is the most used amenity type?

SELECT amenity, COUNT(*)
FROM planet_osm_point
GROUP BY amenity
ORDER BY COUNT(*) DESC

Where are the pharmacies without name?

Option 1

SELECT 'http://www.openstreetmap.org/browse/node/' || osm_id, amenity, name
FROM planet_osm_point
WHERE amenity = 'pharmacy' AND name IS NULL

Option 2

Comparing with the post code data. This data is using SRID 3763 (ETRS89/TM06). So, it is necessary to transform its coordinates to 900913.

SELECT planet_osm_point.*
FROM planet_osm_point, cttshapefile
WHERE 
amenity = 'pharmacy' 
AND name IS NULL 
AND st_contains(st_transform(the_geom, 900913), way)
AND cp4 ilike '4%'e

Comparing with CAOP data, already in 900913.

SELECT planet_osm_point.*
FROM planet_osm_point, caop2010_concelho
WHERE 
amenity = 'pharmacy' 
AND name IS NULL 
AND st_contains(wkb_geometry, way)
AND municipio = 'PORTO'

Counting the pharmacies with no name by municipality

SELECT COUNT(p.*), c.municipio
FROM planet_osm_point p, caop2010_concelho c
WHERE 
amenity = 'pharmacy' 
AND name IS NULL 
AND st_contains(wkb_geometry, way)
GROUP BY c.municipio
ORDER BY COUNT(p.*) DESC

Regarding polygon based features

SELECT 'http://www.openstreetmap.org/browse/node/' || osm_id, amenity, name
FROM planet_osm_polygon
WHERE amenity = 'pharmacy' AND name IS NULL

Regarding lines/ways based features

How many motor ways are there?

SELECT osm_id, highway, oneway, bridge, tunnel, name, REF
FROM planet_osm_roads
WHERE highway = 'motorway'

How many km of motor ways are there? Lembre-se que as auto-estradas estão registadas como duas linhas independentes, paralelas, mas em sentidos contrários.

SELECT SUM(st_length(way))/2 AS metros
FROM planet_osm_roads
WHERE highway = 'motorway'

Calcular cumprimento e visualizar troços de auto-estrada

SELECT 'http://www.openstreetmap.org/browse/way/' || osm_id AS url, name, REF, st_length(way)
FROM planet_osm_roads
WHERE highway = 'motorway'

Pegar num dos url resultantes e abrir no browser:

http://www.openstreetmap.org/browse/way/23820770

CREATE TABLE autoestrada AS
SELECT osm_id, 'http://www.openstreetmap.org/browse/way/' || osm_id AS url, 
name, REF, bridge, tunnel, oneway, st_length(way) AS cumprimento, way
FROM planet_osm_roads
WHERE highway = 'motorway'

Actualizar o catálogo dos metadados:

INSERT INTO geometry_columns VALUES (  '',  'public',  'autoestrada',  'way',  2,  900913,  'LINESTRING')

File:CapturaEcra-Criar nova ligação PostGIS.png

Personal tools