Vào lúc 11:48 2023-06-15, Sarah Hoffmann via Tagging đã viết:
On Thu, Jun 15, 2023 at 09:38:44AM -0700, Minh Nguyen wrote:
I neglected to mention another common heuristic: the geocoder can
automatically bias the address point toward the street named in addr:street
when coming up with a navigable point. The Mapbox Geocoding API is an
example of a geocoder that does this [1][2], though unfortunately neither
Nominatim nor Pelias has a similar feature so far.

You need to remember that routers are only one kind of client of
Geocoders and certainly not the most important by far. While a nice
gimmick, I certainly wouldn't consider it a main task of a geocoder to
return a routeable point. The main task is to return the place/object you
were searching for. In that sense, the root of the issue is that
routers usually underspecify their search query. If the query is
'airport Frankfurt', then the airport is what the geocoder returns. One can't
expect the geocoder to determine that what you actually wanted is the
street closest to the main entrance or the parking or the main bus stop.
'parking near airport frankfurt' does yield results although we'd have
to do something about priority ordering.

To be clear, all this talk about "navigable points" is about something that would supplement, not replace, the centroid coordinate that a geocoder already returns. If an end user searches for "airport Frankfurt", what Nominatim returns is quite sufficient for centering the map on the airfield. However, nowadays, the user also expects to see a row of buttons for navigating to a specific terminal, parking lot, or tram stop. This was not the case several years ago, but all you have to do is look at the most popular navigation applications to see why this topic keeps coming up.

Then again, none of this complexity is necessary if OSM has a publicly
accessible driveway or footpath leading right up to the building. A router
should consider that driveway or footpath to be part of the most direct
route.

Exactly. It would be kind of counter-productive to add all this
functionality to a geocoder. A good router has all the right
data structures to make an informed decision about the navigation start point
and also the information about mode of transport etc. A geocoder's
data structures are rather unsuitable to solve these examples.

The initial examples of Florian are quite telling in that way. The
closest road to
https://osm.zz.de/dbview/?db=addresses-nrw&layer=namemismatch#51.98796,8.57338,17z
would in fact be the service way right next to the buildings. The fault
is with the router who does not include non-accessible roads to
determine the access and thus finds the wrong road. If it would create a
full routing network that includes inaccessible service roads and footways,
it would be able to make the right decision and bring the car to the gate.

I agree that routers should consider inaccessible service roads more than they do now. However, this would not be a panacea. For one thing, if the router finds the nearest inaccessible service road to an airport centroid, more often than not, it will be along a vehicle service road (VSR) for ground support equipment, surrounded by taxiways or even runways.

Nominatim returns a centroid for the San Francisco International Airport that's about 80 meters from a VSR used only by airfield maintenance crews; this is the closest road. [1] The restricted entrance that most directly leads to the VSRs is almost 4 kilometers from the domestic terminal's front entrance. [2] (This is a real service road. Last week, from my armchair in Economy, I watched a maintenance vehicle wait at a stop sign on the VSR as my plane passed by.)

In more mundane cases, footways could definitely help a router send a ride-sharing driver directly to a drop-off point (albeit at the expense of a driver or cyclist needing to park their vehicle). This functionality is often lumped together with the idea of multimodal routing, but unlike true multimodal routing, it doesn't require looking up route schedules and timing transfers.

I'm not sure if there is any router around which does something even marginally
more clever than determining the closest road to the centroid. This even goes
as far as this:
https://www.openstreetmap.org/directions?engine=graphhopper_foot&route=43.28293%2C5.38709%3B43.29579%2C5.38222#map=16/43.2885/5.3889
(starting point given as: "47, Rue du Rouet, Marseille")

Routers can only be more clever if they have more context. You gave an address to Nominatim, but all you ultimately gave to GraphHopper was a coordinate pair. For all GraphHopper knows, you need a route that begins on the Tunnel du Prado Carénage because you're already walking down that tunnel. (highway=trunk doesn't imply anything about foot=*.)

OSRM and Valhalla allow you to pass in a "bearing" that filters out candidate routes based on the initial direction. This would be useful if a driver or cyclist is in motion, heading down Rue du Rouet rather than the tunnel, but it's counterproductive for pedestrians, who can turn on a dime.

Mapbox's navigation SDK automatically map-matches the user's recent path to the road network to determine this bearing even if the user is at rest. Essentially, it remembers that you've been on Rue du Rouet all this time and figures out that you couldn't have jumped into the tunnel all of a sudden.

(The three routers featured on osm.org have many capabilities that the site hides or even undoes, but at the same time it misleads users into thinking they're already integrated with a geocoder.)

So there is a lot of room for improvement in the routers by just using
the information already available. Another example: the heuristic you mention
above, that the geocoder should bias the start point towards the street named
in address street, this is something that could be just as easily implemented
by routers when determining the start point. Street names are usually
available to them.

For better or worse, most geocoders do provide the navigable points that allow applications to display "sub-destination" buttons for large destinations. For smaller destinations, the application can automaically pick the correct street thanks to address matching.

Whether this functionality should properly be part of a geocoder or a router is probably uninteresting to downstream application developers. They already complain that routing APIs like GraphHopper, OSRM, and Valhalla don't have a geocoder built right in like the Google Routes API does.

But to your point, if OSRM were to take an address as input (before forward-geocoding it), or if it were to reverse geocode the coordinate internally, it would have enough context to snap the waypoint to the road network much more intelligently. They just aren't integrated that well so far.

That said, I do think it would be a good idea if Nominatim could return
entrances for larger buildings or areas. That's why
https://github.com/osm-search/Nominatim/issues/536 is still open.
I would just draw the line where the geocoder needs to make any policy
decisions like deciding which is the best entrance point, as this
largely depends on the client's requirements. (It pretty much rules out
the Mapbox approach which is biased towards vehicle routing.)
 > Maybe a separate service that computes navigation points for an OSM
object wouldn't be such a bad idea. It might be easier to play around
with heuristics based on micro-mapping using a separate software instead
of trying to cram it into exising routers or geocoders which are optimised
for other use cases.

I agree that a separate service would be a good place to prototype heuristics, but I think it can only nibble around the edges of this problem. Long-term, there should be tighter integration with either a geocoder or a router.

My apologies to everyone who was expecting a tagging discussion rather than a deep-dive into router engineering. But I think it's helpful to understand what data consumers are capable of -- or could reasonably become capable of -- before resorting to adding subjective hints in the database en masse. There may well be tough cases that require an override, reminiscent of the manoeuvre relation type [3], but it shouldn't be seen as a general-purpose solution.

[1] https://www.openstreetmap.org/way/1182574218
[2] <https://www.openstreetmap.org/directions?engine=fossgis_valhalla_car&route=37.6052%252C-122.3781%253B37.6170%252C-122.3841>
[3] https://wiki.openstreetmap.org/wiki/Relation:manoeuvre

--
m...@nguyen.cincinnati.oh.us



_______________________________________________
Tagging mailing list
Tagging@openstreetmap.org
https://lists.openstreetmap.org/listinfo/tagging

Reply via email to