A problem that arises often when utilising GIS data is the way labels are rendered on the map, particularly labels that contain more than one word. Take for instance a place name such as Koo wee rup (in Victoria). Some GIS applications allow you to stack labels (place words on top of each other) to condense multi-word labels so that they better indicate the location of the place. This is a useful feature, but place names made up of three or four words can look odd when stacked, particularly if they are made up of short words, say three characters or less.
GIS software such as QGIS allows you to control the break character for a label to implement stacking, so we could break labels on the space, but this introduces this uncomfortable word tower. ArcMap's Maplex labeling engine offers finer control and gets better results, but still can't compensate intuitively for labels like Koo wee rup. TileMill map tiling software also has a similar limitation, we can wrap labels by a specified character or a label width, but often times leads to a poor result.
A better approach for these multi-word labels is to add a non-breaking space to the label where you don't want the label to break. A non-breaking space is an invisible space the same width as a standard character space, but stops the label being wrapped. So for instance if we add a non-breaking space to Koo wee rup the label will be forced into one line, whilst other labels can be stacked. To take this a step further, A1 Mine Settlement could have a non-breaking space between A1 and Mine, whilst the space between Mine and Settlement is standard, allowing for a nicer label placement.
Below are some screen grabs of label placement in QGIS, ArcMap and TileMill using VicMap locality data with non-breaking spaces added to selected labels. Note St Albans East and St Albans South. By using the non-breaking space we can force proper place name labels so that they break in logical places, such as Upper(NBS)Ferntree Gully and Pascoe(NBS)Vale South.
To access the non-breaking space use the Character Map application in Windows. Select the non-breaking space from the table and copy and paste into your data.
A couple of things we've detected:
- when adding the non-breaking-space to the GIS data it displays correctly in QGIS and ArcMap without adjusting your character encoding settings. When adding your data to TileMill you'll need to add encoding="WIN-1252" in the Advanced settings so that the non-breaking space displays correctly.
Finally, to take this feature further, you can add non-breaking spaces to any other labels on your map where you want to control label breaks and spacing. One of my bugbears is when road labels that contain place names aren't spaced correctly along the line.
In the example below the hyphen in the label is keeping Geelong and Bacchus together, with Marsh and Rd stretched out along the road, making the meaning difficult to understand for those not familiar with the area. A better solution would be to remove the hyphen and add a non-breaking space to Bacchus Marsh to keep this label together and space the others further apart, so that the user reads Geelong Bacchus Marsh Rd.
There are many other types of characters available in your standard unicode character set. Familiarise yourself with what's available and improve the look of your maps.
More information on unicode characters and the non-breaking space can be found here.
There's also a useful blogpost from Mapbox here describing letter spacing and other characters.