Improve performance of map matching via getPathDistance optimization (#6378)
This commit is contained in:
parent
ef8f3d7508
commit
3c5d99b4cb
12
.github/workflows/osrm-backend.yml
vendored
12
.github/workflows/osrm-backend.yml
vendored
@ -211,6 +211,7 @@ jobs:
|
|||||||
BUILD_TYPE: Release
|
BUILD_TYPE: Release
|
||||||
CCOMPILER: gcc-11
|
CCOMPILER: gcc-11
|
||||||
CXXCOMPILER: g++-11
|
CXXCOMPILER: g++-11
|
||||||
|
ENABLE_BENCHMARKS: ON
|
||||||
|
|
||||||
- name: gcc-10-release
|
- name: gcc-10-release
|
||||||
continue-on-error: false
|
continue-on-error: false
|
||||||
@ -692,7 +693,6 @@ jobs:
|
|||||||
cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE}
|
cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE}
|
||||||
make --jobs=${JOBS}
|
make --jobs=${JOBS}
|
||||||
popd
|
popd
|
||||||
|
|
||||||
- name: Run all tests
|
- name: Run all tests
|
||||||
if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY != 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }}
|
if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY != 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }}
|
||||||
run: |
|
run: |
|
||||||
@ -710,6 +710,16 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
popd
|
popd
|
||||||
npm test
|
npm test
|
||||||
|
- name: Run benchmarks
|
||||||
|
if: ${{ matrix.ENABLE_BENCHMARKS == 'ON' }}
|
||||||
|
run: |
|
||||||
|
pushd ${OSRM_BUILD_DIR}
|
||||||
|
make --jobs=${JOBS} benchmarks
|
||||||
|
./src/benchmarks/alias-bench
|
||||||
|
./src/benchmarks/match-bench ../test/data/ch/monaco.osrm
|
||||||
|
./src/benchmarks/packedvector-bench
|
||||||
|
./src/benchmarks/rtree-bench ../test/data/monaco.osrm.ramIndex ../test/data/monaco.osrm.fileIndex ../test/data/monaco.osrm.nbg_nodes
|
||||||
|
popd
|
||||||
- name: Run Node package tests only
|
- name: Run Node package tests only
|
||||||
if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY == 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }}
|
if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY == 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }}
|
||||||
run: |
|
run: |
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
- NodeJS:
|
- NodeJS:
|
||||||
- FIXED: Support `skip_waypoints` in Node bindings [#6060](https://github.com/Project-OSRM/osrm-backend/pull/6060)
|
- FIXED: Support `skip_waypoints` in Node bindings [#6060](https://github.com/Project-OSRM/osrm-backend/pull/6060)
|
||||||
- Misc:
|
- Misc:
|
||||||
|
- CHANGED: Improve performance of map matching via getPathDistance optimization. [#6378](https://github.com/Project-OSRM/osrm-backend/pull/6378)
|
||||||
- CHANGED: Optimize RestrictionParser performance. [#6344](https://github.com/Project-OSRM/osrm-backend/pull/6344)
|
- CHANGED: Optimize RestrictionParser performance. [#6344](https://github.com/Project-OSRM/osrm-backend/pull/6344)
|
||||||
- ADDED: Support floats for speed value in traffic updates CSV. [#6327](https://github.com/Project-OSRM/osrm-backend/pull/6327)
|
- ADDED: Support floats for speed value in traffic updates CSV. [#6327](https://github.com/Project-OSRM/osrm-backend/pull/6327)
|
||||||
- CHANGED: Use Lua 5.4 in Docker image. [#6346](https://github.com/Project-OSRM/osrm-backend/pull/6346)
|
- CHANGED: Use Lua 5.4 in Docker image. [#6346](https://github.com/Project-OSRM/osrm-backend/pull/6346)
|
||||||
|
@ -353,49 +353,21 @@ double getPathDistance(const DataFacade<Algorithm> &facade,
|
|||||||
const PhantomNode &source_phantom,
|
const PhantomNode &source_phantom,
|
||||||
const PhantomNode &target_phantom)
|
const PhantomNode &target_phantom)
|
||||||
{
|
{
|
||||||
using util::coordinate_calculation::detail::DEGREE_TO_RAD;
|
double distance = 0.0;
|
||||||
using util::coordinate_calculation::detail::EARTH_RADIUS;
|
auto prev_coordinate = source_phantom.location;
|
||||||
|
|
||||||
double distance = 0;
|
|
||||||
double prev_lat =
|
|
||||||
static_cast<double>(util::toFloating(source_phantom.location.lat)) * DEGREE_TO_RAD;
|
|
||||||
double prev_lon =
|
|
||||||
static_cast<double>(util::toFloating(source_phantom.location.lon)) * DEGREE_TO_RAD;
|
|
||||||
double prev_cos = std::cos(prev_lat);
|
|
||||||
for (const auto &p : unpacked_path)
|
for (const auto &p : unpacked_path)
|
||||||
{
|
{
|
||||||
const auto current_coordinate = facade.GetCoordinateOfNode(p.turn_via_node);
|
const auto current_coordinate = facade.GetCoordinateOfNode(p.turn_via_node);
|
||||||
|
|
||||||
const double current_lat =
|
distance +=
|
||||||
static_cast<double>(util::toFloating(current_coordinate.lat)) * DEGREE_TO_RAD;
|
util::coordinate_calculation::greatCircleDistance(prev_coordinate, current_coordinate);
|
||||||
const double current_lon =
|
|
||||||
static_cast<double>(util::toFloating(current_coordinate.lon)) * DEGREE_TO_RAD;
|
|
||||||
const double current_cos = std::cos(current_lat);
|
|
||||||
|
|
||||||
const double sin_dlon = std::sin((prev_lon - current_lon) / 2.0);
|
prev_coordinate = current_coordinate;
|
||||||
const double sin_dlat = std::sin((prev_lat - current_lat) / 2.0);
|
|
||||||
|
|
||||||
const double aharv = sin_dlat * sin_dlat + prev_cos * current_cos * sin_dlon * sin_dlon;
|
|
||||||
const double charv = 2. * std::atan2(std::sqrt(aharv), std::sqrt(1.0 - aharv));
|
|
||||||
distance += EARTH_RADIUS * charv;
|
|
||||||
|
|
||||||
prev_lat = current_lat;
|
|
||||||
prev_lon = current_lon;
|
|
||||||
prev_cos = current_cos;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const double current_lat =
|
distance +=
|
||||||
static_cast<double>(util::toFloating(target_phantom.location.lat)) * DEGREE_TO_RAD;
|
util::coordinate_calculation::greatCircleDistance(prev_coordinate, target_phantom.location);
|
||||||
const double current_lon =
|
|
||||||
static_cast<double>(util::toFloating(target_phantom.location.lon)) * DEGREE_TO_RAD;
|
|
||||||
const double current_cos = std::cos(current_lat);
|
|
||||||
|
|
||||||
const double sin_dlon = std::sin((prev_lon - current_lon) / 2.0);
|
|
||||||
const double sin_dlat = std::sin((prev_lat - current_lat) / 2.0);
|
|
||||||
|
|
||||||
const double aharv = sin_dlat * sin_dlat + prev_cos * current_cos * sin_dlon * sin_dlon;
|
|
||||||
const double charv = 2. * std::atan2(std::sqrt(aharv), std::sqrt(1.0 - aharv));
|
|
||||||
distance += EARTH_RADIUS * charv;
|
|
||||||
|
|
||||||
return distance;
|
return distance;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user