From 5de8f1803c79c7009082cc0a91b48f9e9c296856 Mon Sep 17 00:00:00 2001 From: "Daniel J. Hofmann" Date: Thu, 28 Jan 2016 14:13:39 +0100 Subject: [PATCH] Folds mercator projections into coordinate_calculation --- include/util/coordinate_calculation.hpp | 12 +++++++++--- include/util/mercator.hpp | 26 ------------------------- include/util/static_rtree.hpp | 7 +++---- src/util/coordinate_calculation.cpp | 22 +++++++++++++++++++-- src/util/mercator.cpp | 10 ---------- 5 files changed, 32 insertions(+), 45 deletions(-) delete mode 100644 include/util/mercator.hpp delete mode 100644 src/util/mercator.cpp diff --git a/include/util/coordinate_calculation.hpp b/include/util/coordinate_calculation.hpp index ea80f8d6b..b7758f294 100644 --- a/include/util/coordinate_calculation.hpp +++ b/include/util/coordinate_calculation.hpp @@ -62,8 +62,14 @@ double bearing(const FixedPointCoordinate first_coordinate, double computeAngle(const FixedPointCoordinate first, const FixedPointCoordinate second, const FixedPointCoordinate third); -} -} -} + +namespace mercator +{ +double yToLat(const double value); +double latToY(const double latitude); +} // ns mercator +} // ns coordinate_calculation +} // ns util +} // ns osrm #endif // COORDINATE_CALCULATION diff --git a/include/util/mercator.hpp b/include/util/mercator.hpp deleted file mode 100644 index fa22c9db0..000000000 --- a/include/util/mercator.hpp +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef MERCATOR_HPP -#define MERCATOR_HPP - -#include - -namespace osrm -{ -namespace util -{ -namespace mercator -{ - -inline double yToLat(const double value) noexcept -{ - return 180. * M_1_PI * (2. * std::atan(std::exp(value * M_PI / 180.)) - M_PI_2); -} - -inline double latToY(const double latitude) noexcept -{ - return 180. * M_1_PI * std::log(std::tan(M_PI_4 + latitude * (M_PI / 180.) / 2.)); -} -} -} -} - -#endif // MERCATOR_HPP diff --git a/include/util/static_rtree.hpp b/include/util/static_rtree.hpp index c6f34f71d..dbf0ca18c 100644 --- a/include/util/static_rtree.hpp +++ b/include/util/static_rtree.hpp @@ -8,7 +8,6 @@ #include "util/bearing.hpp" #include "util/integer_range.hpp" -#include "util/mercator.hpp" #include "util/osrm_exception.hpp" #include "util/typedefs.hpp" @@ -140,8 +139,8 @@ class StaticRTree FixedPointCoordinate(coordinate_list.at(current_element.v).lat, coordinate_list.at(current_element.v).lon)); current_centroid.lat = - COORDINATE_PRECISION * - mercator::latToY(current_centroid.lat / COORDINATE_PRECISION); + COORDINATE_PRECISION * coordinate_calculation::mercator::latToY( + current_centroid.lat / COORDINATE_PRECISION); current_wrapper.m_hilbert_value = hilbertCode(current_centroid); } @@ -342,7 +341,7 @@ class StaticRTree { std::vector results; std::pair projected_coordinate = { - mercator::latToY(input_coordinate.lat / COORDINATE_PRECISION), + coordinate_calculation::mercator::latToY(input_coordinate.lat / COORDINATE_PRECISION), input_coordinate.lon / COORDINATE_PRECISION}; // initialize queue with root element diff --git a/src/util/coordinate_calculation.cpp b/src/util/coordinate_calculation.cpp index e0dfe006a..b54154fa6 100644 --- a/src/util/coordinate_calculation.cpp +++ b/src/util/coordinate_calculation.cpp @@ -1,6 +1,5 @@ #include "util/coordinate_calculation.hpp" -#include "util/mercator.hpp" #include "util/string_util.hpp" #include "util/trigonometry_table.hpp" @@ -90,6 +89,8 @@ double perpendicularDistance(const FixedPointCoordinate segment_source, FixedPointCoordinate &nearest_location, double &ratio) { + using namespace coordinate_calculation; + return perpendicularDistanceFromProjectedCoordinate( segment_source, segment_target, query_location, {mercator::latToY(query_location.lat / COORDINATE_PRECISION), @@ -119,6 +120,8 @@ perpendicularDistanceFromProjectedCoordinate(const FixedPointCoordinate segment_ FixedPointCoordinate &nearest_location, double &ratio) { + using namespace coordinate_calculation; + BOOST_ASSERT(query_location.IsValid()); // initialize values @@ -222,6 +225,8 @@ double computeAngle(const FixedPointCoordinate first, const FixedPointCoordinate second, const FixedPointCoordinate third) { + using namespace coordinate_calculation; + const double v1x = (first.lon - second.lon) / COORDINATE_PRECISION; const double v1y = mercator::latToY(first.lat / COORDINATE_PRECISION) - mercator::latToY(second.lat / COORDINATE_PRECISION); @@ -238,6 +243,19 @@ double computeAngle(const FixedPointCoordinate first, return angle; } + +namespace mercator +{ +double yToLat(const double value) +{ + return 180. * M_1_PI * (2. * std::atan(std::exp(value * M_PI / 180.)) - M_PI_2); } + +double latToY(const double latitude) +{ + return 180. * M_1_PI * std::log(std::tan(M_PI_4 + latitude * (M_PI / 180.) / 2.)); } -} +} // ns mercato // ns mercatorr +} // ns coordinate_calculation +} // ns util +} // ns osrm diff --git a/src/util/mercator.cpp b/src/util/mercator.cpp deleted file mode 100644 index 19c5e1d42..000000000 --- a/src/util/mercator.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "util/mercator.hpp" - -#include - -namespace osrm -{ -namespace util -{ -} -}