From 9bb31678a61b4cee6fe02e2f1b0496d6ae957cec Mon Sep 17 00:00:00 2001 From: Patrick Niklaus Date: Wed, 24 Feb 2016 21:26:30 +0100 Subject: [PATCH] Add euclideanDistance to coordinate_calculation --- include/util/coordinate_calculation.hpp | 4 ++++ src/util/coordinate_calculation.cpp | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/include/util/coordinate_calculation.hpp b/include/util/coordinate_calculation.hpp index f2191c624..917d3eef6 100644 --- a/include/util/coordinate_calculation.hpp +++ b/include/util/coordinate_calculation.hpp @@ -19,6 +19,10 @@ const constexpr long double EARTH_RADIUS = 6372797.560856; namespace coordinate_calculation { +//! Projects both coordinates and takes the euclidean distance of the projected points +// Does not return meters! +double euclideanDistance(const Coordinate first_coordinate, const Coordinate second_coordinate); + double haversineDistance(const Coordinate first_coordinate, const Coordinate second_coordinate); double greatCircleDistance(const Coordinate first_coordinate, const Coordinate second_coordinate); diff --git a/src/util/coordinate_calculation.cpp b/src/util/coordinate_calculation.cpp index f8aad77ef..53285a70a 100644 --- a/src/util/coordinate_calculation.cpp +++ b/src/util/coordinate_calculation.cpp @@ -17,6 +17,18 @@ namespace util namespace coordinate_calculation { +double euclideanDistance(const Coordinate coordinate_1, const Coordinate coordinate_2) +{ + const double x1 = static_cast(toFloating(coordinate_1.lon)); + const double y1 = mercator::latToY(toFloating(coordinate_1.lat)); + const double x2 = static_cast(toFloating(coordinate_2.lon)); + const double y2 = mercator::latToY(toFloating(coordinate_2.lat)); + const double dx = x1 - x2; + const double dy = y1 - y2; + + return std::sqrt(dx * dx + dy * dy); +} + double haversineDistance(const Coordinate coordinate_1, const Coordinate coordinate_2) { auto lon1 = static_cast(coordinate_1.lon);