Mercator.h
Go to the documentation of this file.
1 #pragma once
3 
4 namespace lanelet {
5 namespace projection {
6 
9 class Mercator : public Projector {
10  public:
13 
14  BasicPoint3d forward(const GPSPoint& pGps) const override { return rawForward(pGps) - offset_; }
15  GPSPoint reverse(const BasicPoint3d& p) const override { return rawReverse(p + offset_); }
16 
17  private:
18  static BasicPoint3d rawForward(const GPSPoint& p) {
19  double lat = std::min(89.5, std::max(p.lat, -89.5));
20  double phi = lat * M_PI / 180.0;
21  double con = Eccent * std::sin(phi);
22  con = std::pow((1.0 - con) / (1.0 + con), 0.5 * Eccent);
23  double ts = std::tan(0.5 * (M_PI * 0.5 - phi)) / con;
24  const double y = -RMajor * std::log(ts);
25  const double x = RMajor * p.lon * M_PI / 180.;
26  return {x, y, p.ele};
27  }
28  static GPSPoint rawReverse(const BasicPoint3d& p) {
29  double ts = std::exp(-p.y() / RMajor);
30  double phi = M_PI / 2 - 2 * std::atan(ts);
31  double dphi = 1.0;
32  for (int i = 0; fabs(dphi) > 0.000000001 && i < 15; i++) {
33  double con = Eccent * sin(phi);
34  dphi = M_PI / 2 - 2 * atan(ts * pow((1.0 - con) / (1.0 + con), 0.5 * Eccent)) - phi;
35  phi += dphi;
36  }
37  const double lat = 180 / M_PI * phi;
38  const double lon = 180 / M_PI * p.x() / RMajor;
39  return {lat, lon, p.z()};
40  }
41 
43  static constexpr double RMajor{6378137.0};
44  static constexpr double RMinor{6356752.3142};
45  static constexpr double Eccent{0.081819190928906924}; //=std::sqrt(1.0 - RMinor*RMinor/RMajor/RMajor)
46 };
47 
48 } // namespace projection
49 } // namespace lanelet
lanelet::projection::Mercator::offset_
BasicPoint3d offset_
Definition: Mercator.h:42
lanelet::projection::Mercator::reverse
GPSPoint reverse(const BasicPoint3d &p) const override
Definition: Mercator.h:15
lanelet
lanelet::BasicPoint3d
Eigen::Vector3d BasicPoint3d
lanelet::Projector::origin
const Origin & origin() const
lanelet::projection::Mercator::RMinor
static constexpr double RMinor
Definition: Mercator.h:44
p
BasicPoint p
lanelet::projection::Mercator
Definition: Mercator.h:9
lanelet::projection::Mercator::rawReverse
static GPSPoint rawReverse(const BasicPoint3d &p)
Definition: Mercator.h:28
lanelet::projection::Mercator::rawForward
static BasicPoint3d rawForward(const GPSPoint &p)
Definition: Mercator.h:18
lanelet::Origin::position
GPSPoint position
Projection.h
lanelet::Projector
lanelet::projection::Mercator::Eccent
static constexpr double Eccent
Definition: Mercator.h:45
lanelet::projection::Mercator::Mercator
Mercator(const Origin &origin=Origin::defaultOrigin())
Definition: Mercator.h:11
lanelet::Origin
lanelet::projection::Mercator::forward
BasicPoint3d forward(const GPSPoint &pGps) const override
Definition: Mercator.h:14
lanelet::Origin::defaultOrigin
static Origin defaultOrigin()
lanelet::projection::Mercator::RMajor
static constexpr double RMajor
Definition: Mercator.h:43
lanelet::GPSPoint


lanelet2_projection
Author(s): Maximilian Naumann , Fabian Poggenhans , Jan-Hendrik Pauls , MichaƂ Antkiewicz
autogenerated on Thu Mar 6 2025 03:26:06