osrm-backend/include/util/coordinate_calculation.hpp

68 lines
2.1 KiB
C++
Raw Normal View History

#ifndef COORDINATE_CALCULATION
#define COORDINATE_CALCULATION
#include "util/coordinate.hpp"
#include <string>
#include <utility>
2016-01-05 10:51:13 -05:00
namespace osrm
{
namespace util
{
const constexpr long double RAD = 0.017453292519943295769236907684886;
// earth radius varies between 6,356.750-6,378.135 km (3,949.901-3,963.189mi)
// The IUGG value for the equatorial radius is 6378.137 km (3963.19 miles)
const constexpr long double EARTH_RADIUS = 6372797.560856;
namespace coordinate_calculation
{
2016-01-04 07:30:03 -05:00
double haversineDistance(const Coordinate first_coordinate, const Coordinate second_coordinate);
2016-01-04 07:30:03 -05:00
double greatCircleDistance(const Coordinate first_coordinate, const Coordinate second_coordinate);
2016-01-04 07:30:03 -05:00
double perpendicularDistance(const Coordinate segment_source,
const Coordinate segment_target,
const Coordinate query_location);
2016-01-04 07:30:03 -05:00
double perpendicularDistance(const Coordinate segment_source,
const Coordinate segment_target,
const Coordinate query_location,
Coordinate &nearest_location,
2016-01-04 07:30:03 -05:00
double &ratio);
double perpendicularDistanceFromProjectedCoordinate(
const Coordinate segment_source,
const Coordinate segment_target,
const Coordinate query_location,
const std::pair<double, double> projected_xy_coordinate);
2016-01-04 07:30:03 -05:00
double perpendicularDistanceFromProjectedCoordinate(
const Coordinate segment_source,
const Coordinate segment_target,
const Coordinate query_location,
const std::pair<double, double> projected_xy_coordinate,
Coordinate &nearest_location,
double &ratio);
2016-01-04 07:30:03 -05:00
double degToRad(const double degree);
double radToDeg(const double radian);
double bearing(const Coordinate first_coordinate, const Coordinate second_coordinate);
// Get angle of line segment (A,C)->(C,B)
double computeAngle(const Coordinate first, const Coordinate second, const Coordinate third);
namespace mercator
{
FloatLatitude yToLat(const double value);
double latToY(const FloatLatitude latitude);
} // ns mercator
} // ns coordinate_calculation
} // ns util
} // ns osrm
2016-01-05 10:51:13 -05:00
2015-01-22 10:33:27 -05:00
#endif // COORDINATE_CALCULATION