This is an automatically generated English translation from a Lithuanian language post on the openmap.lt blog. The original can be found here. The automatic translation was only edited for layout.
This is a rather technical article about road hierarchy and its use in cartography.
The purpose of this article is to explain the difference between highway=unclassified
and highway=residential
roads, how to label them and what the implications are. My main focus this time is on cartography (mapping), but realistically it may also affect routing.
When we draw a small scale map (say, showing the whole of Lithuania), we only want to draw the most important roads. If we plotted all the roads, including access roads, we would end up with a huge amount of waste (not to mention the speed). When we zoom in, only then do we want more and more roads to appear (the more important roads should appear first). So at the smallest scale we want motorways, closer we want edge roads, even closer we want residential streets, and even closer we want pavements. This is the meaning of the hierarchy of roads in mapping.
At the moment, all maps use the road hierarchy… except for the "leap" before minor roads appear beyond edge roads. I.e. once they appear, both highway=unclassified
and highway=residential
roads appear at once. One scale above, we have a view where there are large areas without roads. Here is an example of the most known/visible OpenStreetMap style "Carto":
Note the void (in terms of roads) between roads 102 and 103. Only Brick and Cairene streets are visible, as they are marked highway=secondary
.
The Mapbox Streets style is even worse: there, even if you zoom in even more, you still only see very important roads, large areas have no road connections:
Why is this? Because although the wiki describes the difference between residential and unclassified roads, it is poorly understood and the two types of roads are often confused. So the map producers consider these two types as equivalent (a third type could be added, the rather late living_street
).
Since residential roads are quite densely built in residential areas, here is an example of how both unclassified
and residential
roads look when plotted at a similar scale:
There are far too many roads and they are crowded together. This is why such roads do not appear on maps until they are "zoomed in" enough. That is why we have such a "spike".
What if we arranged the residential
and unclassified
data as described in the wiki? According to the wiki, the labeling should be as follows:
highway=road
is for).This way we could fill this hole - before showing residential roads, we could show only unclassified roads, whose function (according to the wiki) is to mark connecting roads that have no national classification (i.e. no road number displayed on road signs).
Then the map (at the same scale as the OSM Carto shown above) looks like this:
Enough connecting roads appear and at the same time the map is not polluted by a huge number of residential roads (which appear one level further down).
What I have described above is not some kind of cartographic miracle. The problem is not the cartography but the data. As long as the data is messy, we get a mess. Here is an example of what a messy place looks like:
We see the following problem areas:
It is not convenient to look for errors on such a fine scale. PostGIS and QGIS are welcome to help. We merge all roads with unclassified and higher classification into one network, with red for those that are not connected to the network and grey for lower classification roads (residential
and living_street
):
As can be seen, the "lost" roads stand out. Their detection is fully automatic, which is great, because automatic checking is the only way to solve the problem of road classification with certainty.
But we also see two other types of problems: there are small unclassified roads marked in green, which means they are unclassified and not residential. We also see missing connections - Moliakalnio St. should be changed to unclassified, as there is a road coming from above that connects this settlement with another larger settlement.
The second and third errors are the most problematic, because not only can I not figure out how to write an automatic algorithm to detect such errors, but I can't even figure out what objective criteria should be used to decide this…
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing