mappymatch is a pure-python package developed by the National Renewable Energy Laboratory that maintains a collection of map matching algorithms and wrappers. The package was designed for ease of use and portabilty across platforms.
Clone the repo:
git clone https://github.com/NREL/mappymatch.git
Change directory into the mappymatch folder:
cd path/to/mappymatch # from here, your path to mappymatch is likely .\mappymatch\
Then, use the environment.yml file (which was downloaded when you cloned the repo) to install dependencies:
conda env create -f environment.yml
To activate the mappymatch environment:
conda activate mappymatch
There are a couple of extras available:
plot
: Needed to plot the result.
At least plot
is needed to run the examples.
This can be installed via pip:
pip install ".[plot]"
The current primary workflow is to use osmnx to download a road network and match it using the LCSSMatcher
.
The LCSSMatcher
implements the map matching algorithm described in this paper:
usage:
from mappymatch import root
from mappymatch.matchers.lcss.lcss import LCSSMatcher
from mappymatch.utils.geo import geofence_from_trace
from mappymatch.maps.nx.readers.osm_readers import read_osm_nxmap
from mappymatch.constructs.trace import Trace
trace = Trace.from_csv(root() / "resources/traces/sample_trace_1.csv")
# generate a geofence polygon that surrounds the trace; units are in meters;
# this is used to query OSM for a small map that we can match to
geofence = geofence_from_trace(trace, padding=1e3)
# uses osmnx to pull a networkx map from the OSM database
road_map = read_osm_nxmap(geofence)
matcher = LCSSMatcher(road_map)
matches = matcher.match_trace(trace)