Over the last week or so, I’ve been planning a visit to Singapore. Along with the bare necessities like air tickets, visa, hotel stay, I also had to plan my day to day itinerary and make a list of the various places that I would visit. I began my research by looking at Instagram, vlogs on YouTube, and travel blogs. This gave me a long list of places, each more interesting than the last. I’m a big foodie and Singapore is known for its culinary delights. My list was full of various restaurants and hawkers markets. How was I going to narrow down the list, to fit the few days that I had?
I put on my GIS analyst hat and decided that I should first place all of these on a paper map, and then filter them, and finally plan my itinerary based on which places were close to each other. This started my search for a “good map”, which I could use to place all these locations and that’s where the trouble began.
Most maps are made with a specific audience in mind. A topographic map is meant for those interested in natural features, the famous Tube map is made for those figuring out which subway line to take, and so on. However, a map can surreptitiously nudge your thoughts to intended points of view, while you remain blissfully unaware. There is an amazing book called ‘How to Lie with Maps’ which I recommend to everyone on this topic.
While searching for good tourist maps of Singapore, I first looked at Google Maps. Although an amazing technology made for interaction, Google Maps makes for a pretty terrible printed map. This was designed with the primary purpose of driving, and are not as useful when walking or taking public transport.
Singapore has a great public transport system, especially the metro – MRT. It’s cheap, effective, and covers the entire city. I planned to use the MRT exclusively and looked for a map that I could download for the same. I found the following map, which while useful for figuring out which line to take, is not to scale, and doesn’t show cardinal directions, or distances well. It doesn’t have roads and areas marked, which is a big problem if you are planning which places to visit.
I finally looked at some tourist maps available online, but they were more focused on the shopping districts, and the resolution was too low to print out and still be legible. But hey, I’m a GIS Analyst- I make maps for a living! I can make a map which meets my requirements. I’m documenting those steps so that you can also make one for your future travels. I’ll be using QGIS and open data to make this. For Inspiration, I looked here. This shows you how to get a symbology like Google Maps from OSM data. I used this as my basemap.
The first step was to download data for Singapore from the OSM database. I looked at Geofabrik. This has data for Malaysia, Singapore, and Brunei in one PBF file. Since I wanted to create a map solely for Singapore, I extracted data falling within Singapore’s bounding box. To do this, I went to the Open Street Map website and navigated the map to cover only Singapore (my bounding box). By clicking on ‘Export’, the coordinates of the display extent were extracted.
Using GDAL, I exported the data for my area of interest to a GeoPackage using the following command –
ogr2ogr -f GPKG -spat 103.5688 1.1734 104.1202 1.4844 singapore.gpkg malaysia-singapore-brunei-latest.osm.pbf
Next, I needed location data for MRT stations. These were sourced here.
Data Processing in QGIS
I began by adding the lines and the multipolygons from the GeoPackage to a map on QGIS. There was a lot of data, and I only needed some of it.
- The first thing was to make the map background Blue by going to
Project >> Properties >> Generaland selecting a blue colour.
I got a map like this
- The Coastlines are not in the Polygons but in the line Layer. I duplicated the Layer, and added a feature filter with the following query:
"other_tags" LIKE '%coastline%'
- Then I Manually Selected the lines that represented the coastline of Singapore and ran the tool
Polygonize. This created a Polygon for the Island Boundaries.
- I symbolized the Layer with the colour
#eceae6and deleted the duplicated line layer.
- To get a Google Maps like symbology, I downloaded the pre-existing style files created by Anita Graser, which can be downloaded here.
- I applied the styles to the Line & Multipolygon layers by right-clicking and in the Style tab
Style >> Load Style >> Load from File
Once I set the symbology on the Lines and the multipolygons, I ended up a map that looked like this
- I now had a Road Map, and only needed to add the MRT related data. The OSM dataset has the complete MRT lines in the lines dataset.
- I added the lines dataset to the map, and then applied a feature filter with the following query:
"other_tags" LIKE '%subway%' AND "other_tags" NOT LIKE '%station%'(I selected all lines which have subways in them, but not the stations)
- I symbolized the subway routes using the value in the name column. I have shared a possible style file here.
- Next, I added the MRT Stations file as a Delimited Text File. I enabled Labels on this Layer. I removed the ‘MRT STATION’ from each of the labels, by using the expression:
replace( "STN_NAME" ,' MRT STATION', '')
You can add any other data that you wish to the map and customize it to your requirements. In my case, I wanted to show the most important Hawker Centers, and hence I created this CSV file. I added this to the Map, and symbolized it using large symbols, to get a map like this.
You can directly export this Map to an Image or create a Print Layout and then export it from there.
The final output looked like this. The good thing about the colors is that it even looked good when printed using a greyscale printer.
Devdatta Tengshe | Solutions Architect – GIS, GeoSpoc