[GIS] How to make an editable City Map from OSM data

openstreetmapqgis

I want to make a map of Cardiff, Wales, showing features useful to tourists, e.g. roads with road names, parks, museums, other POIs, etc. I want the final map to be clear to read – simple roads and names, basic outlines/boundaries – so editing (moving/manipulating) the data from its true georeferenced position would be ideal.

Using data from OpenStreetMap, I can't work out how to make a simple map in QGIS, and using Maperitive I can't find a way to edit the data from its original, simple view, despite being vector data.

A lot of the information online seems to be quite old, for example the OSM plugin is no longer available in the latest version of QGIS.

Is anyone able to offer advise on making a simple, editable map of a city?

Best Answer

I've blogged my workflow which uses OSM + Osmosis (might be optional) + ogr2ogr + QGIS to create maps which look like Google Maps.

While QGIS can load .osm files, I found that performance and access to attributes is much improved if the .osm file is converted to spatialite. Luckily, that’s easy using ogr2ogr:

C:\Users\anita_000\Geodata\OSM_Noirmoutier>ogr2ogr -f "SQLite" -dsco SPATIALITE=YES noirmoutier.db noirmoutier.osm

When we load the spatialite tables, there are a lot of features and some issues:

  1. There is no land polygon. Instead, there are “coastline” line features.
  2. Most river polygons are missing. Instead there are “riverbank” line features.

Luckily, creating the missing river polygons is not a big deal: First, we need to select all the lines where waterway=riverbank. Then, we can use the Polygonize tool from the processing toolbox to automatically create polygons from the areas enclosed by the selected riverbank lines.

Creating the land polygon is more involved since - most of the time - the coastline will not be closed for the simple reason that we are often cutting a piece of land out of the main continent. Therefore, before we can use the Polygonize tools, we have to close the area. To do that, I suggest to first select the coastline using "other_tags" LIKE '%"natural"=>"coastline"%' and create a new layer from this selection (save selection as …) and edit it (don’t forget to enable snapping!) to add lines to close the area. Then polygonize.

enter image description here