Importing OSM planet data
From GeoBox
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:
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')



