wannesm / LeuvenMapMatching

Leuven.MapMatching toolbox for aligning GPS measurements to locations on a map.
Other
222 stars 43 forks source link

Is it possible to get the subgraph that was matched to the subtrajectory? #12

Open Erfanh1995 opened 3 years ago

Erfanh1995 commented 3 years ago

Looking through the code it seems like it returns the subtrajectory that matches the graph. Is there any way to get the matched part from the graph instead?

wannesm commented 3 years ago

It returns the ids of the nodes that are matched, which is the matched part of the graph. But maybe I don't understand the question correctly?

Erfanh1995 commented 3 years ago

In the non-emitting example, for instance, you get two outputs, nodes and states. The nodes are the nodes from the graph and the states are from the trajectory? What I'm trying to get is the light blue edges that are matched in this picture

wannesm commented 3 years ago

For that, you can look at the matcher.lattice_best property. This is a list of all the matches. This is not only nodes because, as shown in the graph, it also matches on the segment in between two nodes. Each lattice entry is a matcher object that has an edge_m and edge_o object (resp the matched nodes and observed points). And each of these objects are of the Segment type and have a pi property that is the interpolated point (if it is interpolated, otherwise it is the start or end point of the segment and thus a node in the graph).

You can also look at that part in the visualisation code to see it in action: https://github.com/wannesm/LeuvenMapMatching/blob/b15d92146bb5a26948332ed06835b4714b75ebdc/leuvenmapmatching/visualization.py#L244