Monday, 25 April 2011

Kefalonia Map

We are going to Kefalonia on our holidays this year, and I usually like to do a bit of OSM mapping when I go somewhere new, and may do some 'armchair mapping' before I go to get a head start, so I thought I would have a look at how well mapped it is.
The answer is not very - there are the main roads, and a few minor roads and footpaths, but not much else - this is a shame because I like to know where things like supermarkets and banks are.  Unfortunately there is not a lot of information available for remote mapping - very few GPS traces, and Bing Imagery does not cover the area I am interested in.
So instead I decided to make myself a map of the island showing what is there (in OSM anyway).  Because there is not a lot of detail, I want to have contours so I can tell where the mountains are, and also highlight what points of interest there are at lower zoom levels than the standard OSM style.   These are my notes on how I produced the map, so I can remember next time I need to do it.

  • The map bounding box was found by looking at the (lon,lat)  readouts on to check the bottom left and top right of the island.  They are (20.33, 38.03) and (20.82,38.50).
  • I downloaded the OSM data from the mapquest XAPI server using: 
wget,38.03,20.82,38.50 -O kefalonia.osm

  • Imported the data into postgresql database using:
osm2pgsql -s -S -d kefalonia -m kefalonia.osm

  • Downloaded the SRTM elevation data covering the island from - only needed one file (, because it is a small island.
  • Generated the contours and imported them into my postgresql kefalonia database as described in
  • Modified the standard osm mapnik style file as described in, using the 'PostGIS' method.
  • Generated the map image using the file from the OSM mapnik archive.  I initially had some trouble with no roads appearing, but solved this by re-compiling osm2pgsql from the latest sources - I do not know what the problem was.
  • Having done that, I get this map image:

Kefalonia Map - Version 1 (25 April 2011)
Next I wanted to add a 1km grid to the map to make it easier to judge scale..."are we nearly there yet?" etc.
I did this by adopting the generate_graticule script from mapnik-utils to produce a grid on the google spherical mercator projection (=SRS 900913).  I must admit to not really knowing how this works, but my updated version ( is in my SVN repository.   I added this to the map by creating an extra xml include file to define the grid layer and style (inc/, adding this to, and finally defining the layer in osm.xml.

The result (Version 2) is shown below:
Kefalonia Map Version 2 (26 April 2011)
I created another include file for holiday based points of interests (, added it to and again added the actual layer definition to osm.xml.
This gave the following map:
Kefalonia Map Version 3 (26 April 2011)

The final thing I needed was the English spelling adding to the Greek text labels.   I did this by adding name:en to the file used by osm2pgsql and re-importing the OSM data into the database.
The challenge was updating the mapnik style file to use the name:en column - the OSM style files are very complicated with lots of SQL SELECT statements to extract the data out of the database.  I was tempted to do a global replace of 'name' with 'name:en'...but 'name' appears all over the place.
I decided the main thing I wanted with both writing styles were place names and I found the code for them in inc/
I modified the SELECT statement from a simple 'name' to ,'"name" || ' (' || "name:en" || ')' as name'.  This gives me the greek spelling followed by the english spelling in brackets using the postgresql '||' string concatenation operator.  The result is here:
Kefalonia Map Version 4 (27 April 2011)
I think that is about the finished product - I will have to try printing it to see how it looks, then may need to adjust the image size to suit printing....then do some mapping to add some more POIs - Sacla in the south east of the island should be a lot better by the middle of June....
Post a Comment