Inline mercator transformations; no need for separate translation unit
This commit is contained in:
committed by
Patrick Niklaus
parent
05658aeb3b
commit
f875e26fbf
@@ -16,11 +16,11 @@ inline double ComputeAngle(const FixedPointCoordinate first,
|
||||
const FixedPointCoordinate third) noexcept
|
||||
{
|
||||
const double v1x = (first.lon - second.lon) / COORDINATE_PRECISION;
|
||||
const double v1y = mercator::lat2y(first.lat / COORDINATE_PRECISION) -
|
||||
mercator::lat2y(second.lat / COORDINATE_PRECISION);
|
||||
const double v1y = mercator::latToY(first.lat / COORDINATE_PRECISION) -
|
||||
mercator::latToY(second.lat / COORDINATE_PRECISION);
|
||||
const double v2x = (third.lon - second.lon) / COORDINATE_PRECISION;
|
||||
const double v2y = mercator::lat2y(third.lat / COORDINATE_PRECISION) -
|
||||
mercator::lat2y(second.lat / COORDINATE_PRECISION);
|
||||
const double v2y = mercator::latToY(third.lat / COORDINATE_PRECISION) -
|
||||
mercator::latToY(second.lat / COORDINATE_PRECISION);
|
||||
|
||||
double angle = (atan2_lookup(v2y, v2x) - atan2_lookup(v1y, v1x)) * 180. / M_PI;
|
||||
|
||||
|
||||
@@ -1,17 +1,25 @@
|
||||
#ifndef MERCATOR_HPP
|
||||
#define MERCATOR_HPP
|
||||
|
||||
#include <cmath>
|
||||
|
||||
namespace osrm
|
||||
{
|
||||
namespace util
|
||||
{
|
||||
|
||||
struct mercator
|
||||
namespace mercator
|
||||
{
|
||||
static double y2lat(const double value) noexcept;
|
||||
|
||||
static double lat2y(const double latitude) noexcept;
|
||||
};
|
||||
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.));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ class StaticRTree
|
||||
coordinate_list.at(current_element.v).lon));
|
||||
current_centroid.lat =
|
||||
COORDINATE_PRECISION *
|
||||
mercator::lat2y(current_centroid.lat / COORDINATE_PRECISION);
|
||||
mercator::latToY(current_centroid.lat / COORDINATE_PRECISION);
|
||||
|
||||
current_wrapper.m_hilbert_value = get_hilbert_number(current_centroid);
|
||||
}
|
||||
@@ -345,7 +345,7 @@ class StaticRTree
|
||||
{
|
||||
std::vector<EdgeDataT> results;
|
||||
std::pair<double, double> projected_coordinate = {
|
||||
mercator::lat2y(input_coordinate.lat / COORDINATE_PRECISION),
|
||||
mercator::latToY(input_coordinate.lat / COORDINATE_PRECISION),
|
||||
input_coordinate.lon / COORDINATE_PRECISION};
|
||||
|
||||
// initialize queue with root element
|
||||
|
||||
Reference in New Issue
Block a user