-
-
Notifications
You must be signed in to change notification settings - Fork 114
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FEATURE] OSM multiline relation handling #857
Comments
I'm not as familiar with the nuances of the different use-cases here, would appreciate feedback from others with more experience mapping these! |
The principles I'd like to preserve in the current semantics of the YAML configurations are:
|
Conceptually this makes sense. I'm wondering if we need additional flexibility to access and/or filter the ways that get included in the final shape by:
And also if there needs to be any built-in way to decide between a relation and superrelation, or if profiles can determine that entirely from the tags on them (for example see appalachian trail |
To accomplish that, in a general way, we could add the ability to refer to relation member role and tags. include_when:
- network: ncn
geometry: linestring
include_members_when:
- highway:
- cycleway
- path or for extracting country labels include_when:
- admin_level: 2
geometry: point
include_members_when:
- @role: label Note: this is not necessarily the best syntax. When such member-based valued are used as attributes, using some new syntax, the geometry would split the relation into separate MultiLineString features according to the different values. As for relation members that are relations themselves, I'm inclined to treat them as transparent, and flatten any nested relations. That would make the ways and node members of any relation seem as if they are members of any predecessor super-relation. |
OK got it, then if a profile wanted to limit the relation type they would just put an extra include_when:
- admin_level: 2
- type: boundary I also wonder if we should make profiles opt-into this behavior? I'm trying to think if doing this by default would cause any issues if you're not expecting it? |
Also, we'd want to implement this capability in the java layer then have the yaml layer add an easier-to use API for it. I think it would make sense to build this as an extension to multipolygon handling, which currently does this: pass1
pass2
We want pass 2 relation processing to also be able to fetch node ids and locations for all of the ways it contains. The lookups should also be lazy so they only happen if profile decides the relation is relevant based on its tags. For super relations we'd also need to be able to descend from the parent relation down to its children, which complicates things... For completeness we'd probably also want to expose super relation membership when processing ways. |
It we excluded super-relations, I think this could work by expanding To include superrelations, we need to be able to descend to all children like this and get their geometries. I think this means we'd need to store an extra map of
I could try prototyping how much storage it would be for either of those options. |
For reference the current OSM planet pbf has:
|
Thank you for examining this need. I’m not very experienced with planetiler, so I’m trying only to give what I want to achieve, with no consideration how the schema would look like. I want to build a map of the Parisian subway. There are super-routes for each line: https://www.openstreetmap.org/relation/3328695#map=17/48.86859/2.31292&layers=T So more than how to select the features, I would need some way to merge tags between the relation and the ways (and possibly also the role) |
I have an use case where I need to have access to super relations. I'm building an app for cyclists where I'm presenting cycling routes. Some of the routes in OSM are part of the "super relations". For example, we have EuroVelo 10 super relation which has other relations as members (and it can be nested).
Just wanted to share my use case. |
Is there a general-purpose way to handle relations that define long connected lines (ie. route/waterway) in a similar way to how planetiler handles multipolygon relations today?
Polygons/multipolygons are currently handled transparently to profiles whether they came from a single way or a complex multipolygon relation. Relations are also used to group ways into long linestrings/multilinestrings, for example: hiking/biking/bus routes, waterways, country boundaries, public transit. Today, profiles need to process each way in the relation and emit a line, then merge connected lines when post-processing finished tiles. This doesn't let you process an entire connected linestring as a single geometry, for example to compute its overall length. It's also not supported by yaml schemas yet.
For example to process every national cycling route, a profile could do:
Is something like that sufficient to cover most cases? If not how much more flexibility does it need? There are also super-relations (boundary and routes), cases where a way and relation it's contained in both match, and relation member roles that may convey importance.
The goal would be to make it possible to reconstruct multilines in a java profile (probably by extending multipolygon reconstruction logic) and expose a simple API for it through yaml configs.
The text was updated successfully, but these errors were encountered: