OpenStreetMap van postgis naar shape met filters

Kort geleden kreeg ik van openstreetmap gebruiker Rejo het verzoek om data uit OpenStreetMap te extraheren om een speciale kaart te kunnen maken van parken/groen in onze vier grote steden.

Wat heb je nodig:

Toegang tot een database in postgis formaat, meestal het resultaat van de tool osm2pgsql.

Alle parken in de Benelux naar shape:

pgsql2shp -f parken -h <host> -u <username> <database> “select osm_id, leisure, “name”, transform(way,28992) as way from planet_osm_polygon where leisure=’park’”

Er zijn een aantal zaken in bovenstaand commando belangrijk:

1- Omdat de Benelux openstreetmap database in het google coordinaat-systeem is transformeer ik de parken naar het Nederlandse Rijksdriehoekstelsel. Uiteraard kan hier elke andere projectie worden gebruikt.

2- Ik heb niet alle database velden nodig. Met de subset osm_id, leisure en “name” beperk ik de resultaatset dus tot deze 3 velden.

3- -f parken zorgt ervoor dat de functie automatisch voor mij parken.shp, parken.shx, parken.dbf en parken.prj aanmaakt.

Al het water en de waterwegen in de Benelux naar shape:

Omdat alleen de parken de kaart zo onleesbaar maken, halen we op dezelfde manier het water en de waterwegen uit de openstreetmap database;

pgsql2shp -f water -h<host> -u <user> <database> “select name, transform(way,28992) as way_rd from planet_osm_polygon where “natural”=’water’”
pgsql2shp -f waterwegen -h <host> -u <user> <database> “select name, transform(way,28992) as way_rd from planet_osm_polygon where not waterway is null”

Ook bij deze commando’s perk ik de geretourneerde velden in. Let even op het veld natural; deze kolomnaam is eigenlijk een reserved word. Daarom moet die gequote worden.

De contouren ophalen van de vier grote steden:

pgsql2shp -f amsterdam -h <host> -u <user> <database> “select name, transform(way,28992) as way_rd from planet_osm_polygon where name=’Amsterdam’”

pgsql2shp -f rotterdam -h <host> -u <user> <database> “select name, transform(way,28992) as way_rd from planet_osm_polygon where name=’Rotterdam’”

pgsql2shp -f denhaag -h <host> -u <user> <database> “select name, transform(way,28992) as way_rd from planet_osm_polygon where name=’Den Haag’”

pgsql2shp -f utrecht -h <host> -u <user> <database> “select name, transform(way,28992) as way_rd from planet_osm_polygon where name=’Amsterdam’”

Let’s do Magic!

Nadat ik alle gemaakte shapefiles heb gedownload ga ik met qGIS aan de slag. In mijn geval qGIS 1.1.0. Ik laad allereerst alle shapefiles in qGIS. Wat je dan krijgt is een door qGIS gekozen kleurenschema en de lagen in willekeurige volgorde [1]. Dat is meestal niet wat ik wil. Ik ga daarom schuiven met de lagen en kleuren tot de weergave naar mijn zin is. [2] toont het resultaat na het bewerken voor het gebied rond Rotterdam.

Clip

Vervolgens knip ik alle parken en het water op de gemeentegrens van Rotterdam met een tool in qGIS: Tools -> Geoprocessing tools -> clip. Ik had dit ook al in mijn extractie script kunnen doen maar dit is een actie die client-side veel sneller gaat. Het resultaat is [3]

Export als SVG!

Uiteindelijk eindig ik met een belangrijke “verborgen” feature van qGIS; exporteren als svg! Hiervoor open je een print composer (CTRL+P), stel je op het werkblad in de printcomposer een mapview in met de knop “Add New Map” (even slepen en goed zetten) en vervolgens druk je op de vierde knop in de print composer: Export as SVG.

Het resultaat vind je hier en kun je probleemloos in inkscape bewerken!

psql2shp1

1

[2]

2

3

3

2 thoughts on “OpenStreetMap van postgis naar shape met filters

  1. Export als SVG kan natuurlijk ook direct in PostgeSQL/PostGIS:

    select osm_id, leisure, “name”, asSVG(transform(way,28992)) as way from planet_osm_polygon where leisure=’park’

  2. Barend, bedankt voor de tip! Uiteraard is dat ook een optie. Het grote voordeel van export als shape is echter dat je een stukje kartografische nabewerking in qGIS kunt doen zoals het clippen van gebieden en het alvast definieren van kleuren waardoor het bewerken in inkscape weer wat soepeler wordt.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

De volgende HTML tags en attributen zijn toegestaan: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>