streetcomplete / StreetComplete

Easy to use OpenStreetMap editor for Android
https://streetcomplete.app
GNU General Public License v3.0
3.84k stars 348 forks source link

Show max height quests for road under roof #5912

Open RubenKelevra opened 2 days ago

RubenKelevra commented 2 days ago

Use case I noticed that the max height quest doesn't show up for service roads below building=roof, despite very common:

Thats the usual combination used for gas stations, which usually have a height sign on the edge of the roof.

Proposed Solution It would be nice if that could be added, for as long as there's not service=driveway tag on the road, to avoid having all car ports show up as quest.

matkoniecz commented 1 day ago

I guess that may be country-dependent, I do not remember such signs in Poland.

RubenKelevra commented 1 day ago

They are not very prominently posted there, but rather small and not always there. But it's important for trucksan d other high vehicles it's important to know which fuel station they do fit under.

A router could certainly find the service way under the roof, if there's any, put this information to good use.

In case there's no sign, we do have ways to handle this, so this shouldn't be a blocker.

RubenKelevra commented 1 day ago

Here two example, how they look like:

Screenshot_2024-09-20-19-38-03-524-edit_com google android apps maps Screenshot_2024-09-20-19-39-02-743-edit_com google android apps maps

westnordost commented 8 hours ago

But wouldn't that roof not always have at least the height of the maximum permitted height of heavy goods vehicles? I.e. are there any fuel station roofs that cannot accommodate any truck?

RubenKelevra commented 6 hours ago

@westnordost you can see in the example above, that this is not the case, as the legal limit for regular trucks is 4 meters in Germany.

That said, you can get permits for higher loads.

There are also specialized truck fueling stations without roofs:

Screenshot_2024-09-21-17-02-00-801-edit_com google android apps maps

And those along the Autobahn often have pretty high roofs and a special section for trucks, with larger nozzles, more flow, wider ways and sometimes dual side pumps, so you can fill both side tanks and pay just once.

But this depends highly on the locality.

goldfndr commented 2 hours ago

Locally in Washington state, I've [mis-?]tagged many gas station roofs with the underlying maxheight, as a lot have no or underreported service roads underneath stored in the database and adding a tag to the the roof is trivial. You can see from https://overpass-turbo.eu/s/1RuL that there's much variation. Some don't have a maxheight labeled.

RubenKelevra commented 2 hours ago

@goldfndr I think the consensus is, that as long as the data is in a good format it's fine to add missing data to the database.

I doubt that all gas stations in Germany got service roads either, but there's no way to find the roof of a gas station. So doing a generalized approach in SC by searching roads leading under a, we would find those which have already service ways. A router would likely find the service way as the closest road leading to the node, and could thus display a warning.

And a generalized approach means, you would just have to paint a rough service road under any roof, and SC would show up a quest to map the height. This means this works in many other cases with overhanging elements as well.

RubenKelevra commented 1 hour ago

@westnordost looking at the quest I think there's an error in the search string for "bridges"

private val bridgeFilter by lazy { """
  ways with (
      highway ~ ${(ALL_ROADS + ALL_PATHS).joinToString("|")}
      or railway ~ rail|light_rail|subway|narrow_gauge|tram|disused|preserved|funicular|monorail
    ) and (
      bridge and bridge != no
      or man_made = pipeline and location = overhead
    )
    and layer

Source

I think the idea was to search for highways/railways which are bridges or pipelines which are overhead?

But you're searching for highway/railways which are also man_made=pipeline + location=overhead but don't (necessarily) have a bridge=* tag...

I think it should have been:

private val bridgeFilter by lazy { """
  ways with (
    (
        highway ~ ${(ALL_ROADS + ALL_PATHS).joinToString("|")}
        or railway ~ rail|light_rail|subway|narrow_gauge|tram|disused|preserved|funicular|monorail
      ) and (
        bridge and bridge != no
      )
    )
    or (man_made = pipeline and location = overhead)
    and layer
RubenKelevra commented 1 hour ago

@westnordost I've created a PR to address this and add the roofs. Buuut remember, I'm not a Kotlin dev and have no clue what I'm actually doing there. So there may be bugs.