v1.1.0
This is a big update with a lot of quality-of-life updates especially for map matching large floating car data sets.
- We updated several third-party libraries; libosmium to v2.22.0, Expat to version 2.7.1, and Boost to version 1.88.0; we also now removed protobuf from the repository as it was no longer referenced.
- The update to Boost 1.88.0 fixed an issue that prevented to use newer Clang compilers, so we can build against Clang 20 now, see boostorg/thread#402, however, the AppImage release contains a GCC build.
- We also updated GCC to 15.1.0 and CMake to 3.31.6, and on Windows, we used the newest Visual Studio version 17.14.0.
- We now build the software completely statically linked on Linux, in the hope that this solves issues with the AppImage now working on other systems than the target system it was compiled for, due to glibc incompatibilities.
- We also use a more recent appimage-tool now that uses a new runtime which should also improve compatibility of the AppImage and also may render libfuse2 obsolete, see AppImage/AppImageKit#877 (comment).
- We changed the official Dockerfile to incorporate the fix discussed in #9, thanks to @mschrader15. The entrypoint has changed, the application is now directly called instead of a sub-shell. The official Docker image at
addy90/map-matching-2was updated accordingly. - We refactored the track importer functionality to accommodate for further changes.
- With this refactoring, we added two new filter methods that can filter tracks during import:
- A new
split-timemethod that can split tracks into multiple tracks when the difference between two point timestamps exceeds a defined value. This is an important setting for large floating car data where multiple individual tracks are aggregated under the same id. This method is able to split the individual tracks based on a difference between two points, for example, when you define 600 seconds, a track is split into two tracks when there are two points that have a time difference of at least 10 minutes. Only works for tracks that are imported with a time information, of course. - A new
filter-polygonmethod that only keeps tracks that are eitherwithin(i.e., in practice covered-by, which means the border counts, too) orintersect(i.e., within or partially overlapping) a given bounding-box or complex polygon. A bounding box can be defined as WKTBOX (10 20, 40 50)with the lowest x, y and highest x, y coordinates, and a complex polygon (which needs to be closed and counter-clockwise defined) can be defined as WKTPOLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))with a list of x and y coordinates. Thefilter-methodcan be selected so that only tracks that completely liewithinthe given polygon or bounding box are kept, or all tracks that lie within or intersect the border, i.e.,intersectcontains within, so only tracks that completely lie outside the polygon or bounding box are filtered out. This setting is especially useful for when from a large floating car data set, only a specific region is of interest. It works in combination withsplit-timeso that first the tracks are split and then, in case a split part is kept by the filter, that part is kept, while the rest is not. So first the splitting, then the polygon-filtering. Keep in mind that the filtering is done in the import-thread, not in the parallel matching threads, so you may not want to use very complex and large polygons, as these increase the time it takes to filter a track immensely; in these cases, we recommend to compute and use the convex hull of the polygon, or use a bounding box of the polygon, to not bottleneck the import thread.
- A new
- We now output the start and stop time of the track in the results, however, due to technical design decisions, the original time-zone is not kept and needs to be defined with the new
export-time-zonesetting, if the default system setting is not wanted. Alternatively, unix timestamps can be exported with the newexport-timestampssetting. It is also possible to export all timestamps of all points of the track in a new column, check thecolumnssetting in the help.txt. Of course this setting is only useful for tracks which have times, but it is still possible to match tracks without time-information, this has not changed. The output of the track times, however, can be useful for further analyses. - We now sort points by timestamp with stable-sort so that points that have the same timestamp are not reordered anymore. This may slightly improve matching quality in such cases. Btw., the
candidatesexport functionality also exports the time information now, seecandidates-columns. - We use eager-initialization of track metadata, such as segment lengths and azimuths, and we moved that initialization to a later step in the pipeline so that it is carried out only for the tracks that were not filtered out before, to address unnecessary computations.
- We also finally added general switches to disable all steps of
trajectory-simplificationandcandidate-adoptionwith one setting.
Full Changelog: v1.0.11...v1.1.0