City breaks took off as a holiday choice, particular for Europeans with the growth of low-cost airlines in the late 1990s. Most city tourists, me included, don’t purchase a map either before they go or even when they arrive. The internet and web maps allows us to plan our trips in advance and upon arrival, whilst technophiles will get out their smartphones or tablets, the rest of us (in my case to avoid roaming charges) seem confident that our hotel, youth hostel, a bar or sightseeing bus company will have a free map that will be adequate for their needs.
I have many examples of such maps and all of them are usable but many only just. They are ‘get by’ maps, mainly produced by graphic designers. Okay they are free, but I believe they can be better.
This summer, I and the rest of the Ordnance Survey Cartographic Design & Development team, will be promoting our cartographic design principles. With the release of open data and a boom in the open source industry, more people than ever before are delving into the world of cartography as maps are widely adopted by technologies and services as a form of data visualisation by people who may not have come from a traditional mapping background. Too often a good idea is let down by poor application of even the most basic cartographic techniques. As a geo-community living in the ‘open’ era, we must give today’s map makers the tools they need to add good cartographic design to their overall user experience.
So I decided to set myself a challenge. Most graphic designers seem to use Adobe Illustrator, so I allowed myself that but for everything else I decided that the cost of additional software and data would not be viable to such map makers unless it was open which in this case means free.
The smallest town plan I had in my drawer aimed at tourists was of Vilnius, Lithuania, so this became my subject. After a quick browse of the internet I decided that the vector version of OpenStreetMap (OSM) would be my best data source. Realising that the map probably didn’t need too much detail and that setting up databases and so on is more work (and more cost), I plumped for the shapefile, lightweight, version of OSM available from many third party host sites, I got mine from Geofabrik.
It was actually my first time playing with OSM vectors so I read through the documentation to find out what projection it was in. The vectors are all in the geographic coordinate system of WGS 84 (EPSG: 4326), not to be confused with the spherical world projection WGS 84 (EPSG: 3857) of the web map service.
So the first task was to reproject the data to Lithuanian National Grid. To check what is used in Lithuania I used SpatialReference.org although you could just look in your GIS software. Then to reproject the data I used FWTools, which can be downloaded for free, again as OpenSource, with a guide to the tool used in GDAL’s documentation but a command line snippet is below:
C:\FWTools2.4.7>ogr2ogr -s_srs EPSG:4326 -t_srs EPSG:3346
When creating maps, what we normally do at Ordnance Survey is filter and tidy up our data first in a GIS. Seeing as the plan was to use open source, I used QGIS, but when loading the data I noticed a problem. The accented characters in the Lithuanian text were not displaying correctly, which was an issue as I planned to show road names and a few other labels. It turns out that the problem here is the database (.dbf) files that come with the shapefiles. By default these are in the character format of your native language (or at least they match your computer’s OEM code page), whereas to maintain the characters as intended they need to be Unicode UTF-8. So what you need to do is resave the database files as UTF-8. This sounds like an FME kind of job but I did manage to find and use an open source solution. Download the Apache OpenOffice spreadsheet application Calc and open the database files one at a time. From here you can specify UTF-8 as the type when resaving.
Now the shapefiles should load correctly into QGIS, just remember to use the add data button so that you get the option to choose the settings of Lithuanian National Grid and UTF-8. You don’t get options with drag and drop.
Once in QGIS the first job was to clip the data (national coverage will be very slow in QGIS). Next I began filtering and applying basic styling and labelling to the data.
I filtered the points to only contains the ones I felt I might use, which ended up being just ATMs and information points as point features, and I also retained anything to do with nightlife (bars, restaurants, nightclubs, etc.) which I shall explain later. From places, I retained the suburb names and used the city point as a guide to label the old town. I retained guest houses, hotels and hostels; churches and places of worship; and arts centres, galleries, marketplaces, museums, public buildings, theatres, towers and town halls. I then grouped and coloured these into categories of accommodation, churches and attractions respectively. Roads were styled by type and I only retained types that I thought were public roads, cycle paths and footpaths (colours and widths can be refined at a later stage, so I’d suggest not spending too long on this). I also used railways, waterways and from the natural layer parks and woodland. These were also styled but again, if you are exporting to a graphics or finishing package then this only needs to be rough, all you really need at this stage is to test your ideas before exporting the data and to ensure the colours are identifiable. It is also worth not using the same colour on different features (this will allow you to select vectors by colour later).
Styling in QGIS is quite intuitive, just click on the icons in the Layers panel and the style dialogue box for that layer will appear. To label roads, then the ‘layer labeling settings’ are best. These can be accessed using the button showing ABC over a diagonal line, and then the setting box allows you to do things like curve labels along a line feature as shown in the example below, which cannot be achieved through the regular labelling option.
Usually I label all of my features in the GIS and take them across to my graphics package, but in this instance I felt that for building names it was easier to just leave QGIS open and inspect them using the relevant tool.
The print composer is where you control the scale and size of your exported map (similar to the Layout window in MapInfo). The ‘composition’ and ‘item properties’ settings in the bottom right offer you the options for this.
From here, I exported a PDF (go to File_Export PDF…) to get the map into the graphic designers’ happy home of Adobe Illustrator in order to improve text, apply special effects, create symbols and so on. There is an issue with this method. QGIS’ export to PDF turned all my labels to polygons rather than preserving them as text. I was using version 1.8 though so hopefully this has been resolved in version 2.
Once in Illustrator, I started by refining the colour scheme. I find playing with colours and their relationship to one another easier in Illustrator than in a GIS. There are numerous websites with tools to assist with colour (see this OS blog post). Next I identified from my building layers which buildings I wanted to show (for example many public buildings are not significant to a tourist or for navigation). To do this I combined my knowledge of the city, the categories created from the OSM data and some websites such as Vilnius Tourism. To make the hierarchy, I played with drop shadows on the buildings but even though they are the subject I soon discovered that they were not what I wanted the user to be looking for or see first. The top layer of the hierarchy had to be the numbers on top of the buildings referencing them against the list in the margin / legend panel. So I decided to make these a dominant dark blue-turquoise colour and on the map apply drop shadow to these. I applied a far lighter shadow to the building footprints of the attractions. More subtle colours without effects were used for the churches and accommodation. Because my data was flat (2D), I used a radial gradient to bring attention as well as perceieved elevation to the Hill Of Three Crosses as it is a dominant feature on the landscape within the map’s extent, I also applied a subtle texture to the woods to give them apparent height when compared to the parklands. I added an inner glow from the edges of the water to give the impression of depth and the encase the features. To make the road names legible and to lift them slightly further up the visual plane, I used a technique of making them appear to glow simply by gradienting a halo around the text from white to transparent. I will explain more about how to achieve graphic effects in Illustrator CS6 in a later tutorial post – coming soon.
Finally the nightlife points that I had kept in QGIS. Originally I played about with QGIS’ heat map functionality, which is very good and easy to use. Although it should be noted that heat maps settings in version 1.8 are pretty limiting and it requires you to colour the entire extent of the map, i.e. there is not the ability to just show ‘hot spots’. However the images below suggest that some of these issues may now have been resolved.
Unfortunately the results of applying heat maps detracted from the purpose and clarity of my city tourist map, so instead I simply highlighted the roads which had a high density of nearby nightlife. To do so I simply added some obvious mid-to-dark pink casing along either side of these roads.
The road text was kept from QGIS, as mentioned earlier this became vectorised so was uneditable, but in Illustrator I manually added labels for key buildings like stations, the Hill of Three Crosses, and I added the river name which I had forgotten to do in QGIS. To align the river name correctly, I made a duplicate of the river centreline and used Illustrator’s ‘text on path’ tool. Finally, I added a title, legend, north arrow and scalebar. The two crests are the official coat of arms for Vilnius and Lithuania respectively. It is often the case, as it is here, that flags and coat of arms are free from copyright by the laws of their related country, making them a very useful and easy addition to maps.
So here it is: an overview and an extract of my final map. I haven’t made a tourist city map before, I generally use white or pale coloured map backgrounds, I am relatively new to QGIS and it was my first experience with OpenStreetMap vectors. So it was a challenge, but I’m happy to report that the experience was quite a pleasant one and I would recommend anyone, especially designers being asked to make tourist maps, to give this route a try for themselves.
Although it might not be the best map I’ve ever made, I’m pretty happy with it and I am also confident that the end result is far better than any of the freebie city tourist maps I have in my desk drawer at work!