itinero / routing

The routing core of itinero.
Apache License 2.0
220 stars 70 forks source link

Missing road attributes with roads passing under another road (bridge) #372

Open johnjore opened 5 months ago

johnjore commented 5 months ago

My use case is pretty simple, I just want the maxspeed attribute at various GPS positions, and for the most part it works, but not when one road goes over another (bridge)

This is such an intersection:

RouterPoint routerPoint = MainActivity.router.Resolve(MainActivity.profile, new Coordinate(-37.81538102061581f, 144.8083309966932f));
Itinero.Data.Network.RoutingEdge edge = MainActivity.routerDb.Network.GetEdge(routerPoint.EdgeId);
IAttributeCollection attributes = MainActivity.routerDb.GetProfileAndMeta(edge.Data.Profile, edge.Data.MetaId);

attributes here has 5 values, all relating to Western Ring Road, nothing for Boundary Road. If I query the GPS position using openstreetmap.org, it has "Bridge" and "Primary Road" for the two roads, both with maxspeed attributes set.

pbf file, https://download.geofabrik.de/australia-oceania-latest.osm.pbf, was converted to as per the samples:

            using (var stream1 = new FileInfo(@"c:\data\australia-latest.osm.pbf").OpenRead())
            {
                routerDb.LoadOsmData(stream1, Itinero.Osm.Vehicles.Vehicle.Car);
            }
            using (var stream2 = new FileInfo(@"c:\data\australia.db").Open(FileMode.Create))
            {
                routerDb.Serialize(stream2);
            }

Is this a limitation of the library or something I am doing wrong? Or?