16 - Ways and their nodes

To create maps for ways, we need to also extract the nodes that describe their outline.

In OverpassQL we do this using the "recurse down" statement ">".

This statement takes an input set of elements and then finds any node (or way, or relation) that are a member of those elements.

The members of a way are its nodes.

The members of a relation would consist of the nodes and ways that it contains.

Nodes don't have members so these are ignored when performing a traversal.

This query extracts all ways within our bounding box. It then uses a traversal query to also find the members of those nodes.

We then use a union of those two queries to produce output that includes the data about both the way and its nodes.

The recurse operator implicitly uses the default set (_) as its input. Without that bit of context, the syntax can seem a bit arcane! It took me a while to understand what it is doing.

The > query is very commonly used in queries, as we need it whenever we want geometry for ways and relations. There is also a version that will traverse all the way from relations down to nodes: >>.

If we didn't use the () block and just queried for ways and nodes in turn, then the output would only contain data about the nodes. This is because the > query will overwrite the contents of the default set, so we'd lose the results of our way query.

Always use a union block when performing traversals unless you really want to ignore the parent features. Many examples of using OverpassQL just include the () block by default, because it's so important for most queries.

Source File16-ways-and-their-nodes.osm
  • Leigh Dodds