diff --git a/include/util/coordinate.hpp b/include/util/coordinate.hpp index 39eb02f3f..e0cf88c47 100644 --- a/include/util/coordinate.hpp +++ b/include/util/coordinate.hpp @@ -30,6 +30,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "util/strong_typedef.hpp" +#include + #include //for std::ostream #include #include @@ -50,22 +52,30 @@ OSRM_STRONG_TYPEDEF(double, FloatLongitude) inline FixedLatitude toFixed(const FloatLatitude floating) { - return FixedLatitude(static_cast(floating) * COORDINATE_PRECISION); + const auto latitude = static_cast(floating); + const auto fixed = boost::numeric_cast(latitude * COORDINATE_PRECISION); + return FixedLatitude(fixed); } inline FixedLongitude toFixed(const FloatLongitude floating) { - return FixedLongitude(static_cast(floating) * COORDINATE_PRECISION); + const auto longitude = static_cast(floating); + const auto fixed = boost::numeric_cast(longitude * COORDINATE_PRECISION); + return FixedLongitude(fixed); } inline FloatLatitude toFloating(const FixedLatitude fixed) { - return FloatLatitude(static_cast(fixed) / COORDINATE_PRECISION); + const auto latitude = static_cast(fixed); + const auto floating = boost::numeric_cast(latitude / COORDINATE_PRECISION); + return FloatLatitude(floating); } inline FloatLongitude toFloating(const FixedLongitude fixed) { - return FloatLongitude(static_cast(fixed) / COORDINATE_PRECISION); + const auto longitude = static_cast(fixed); + const auto floating = boost::numeric_cast(longitude / COORDINATE_PRECISION); + return FloatLongitude(floating); } // Coordinate encoded as longitude, latitude