40 lines
1.1 KiB
C++
40 lines
1.1 KiB
C++
#include <gtest/gtest.h>
|
||
|
||
#include <cmath>
|
||
|
||
#include "geo/GeoLocalFrame.hpp"
|
||
|
||
using geopro::core::GeoLocalFrame;
|
||
|
||
namespace {
|
||
constexpr double kPi = 3.14159265358979323846;
|
||
}
|
||
|
||
// 原点投影到 (0,0)。
|
||
TEST(GeoFrame, OriginMapsToZero) {
|
||
GeoLocalFrame f(22.5, 114.16);
|
||
auto p = f.toLocal(22.5, 114.16);
|
||
EXPECT_NEAR(p.x, 0.0, 1e-9);
|
||
EXPECT_NEAR(p.y, 0.0, 1e-9);
|
||
}
|
||
|
||
// 东向 0.01 度经度:x>0,约 0.01*111320*cos(22.5°)≈1028m(5% 容差)。
|
||
TEST(GeoFrame, EastwardLongitudeGivesPositiveX) {
|
||
GeoLocalFrame f(22.5, 114.16);
|
||
auto p = f.toLocal(22.5, 114.17);
|
||
const double expected = 0.01 * 111320.0 * std::cos(22.5 * kPi / 180.0);
|
||
EXPECT_GT(p.x, 0.0);
|
||
EXPECT_NEAR(p.x, expected, expected * 0.05);
|
||
EXPECT_NEAR(p.y, 0.0, 1e-9);
|
||
}
|
||
|
||
// 北向 0.01 度纬度:y≈0.01*110540≈1105m(5% 容差)。
|
||
TEST(GeoFrame, NorthwardLatitudeGivesPositiveY) {
|
||
GeoLocalFrame f(22.5, 114.16);
|
||
auto p = f.toLocal(22.51, 114.16);
|
||
const double expected = 0.01 * 110540.0;
|
||
EXPECT_GT(p.y, 0.0);
|
||
EXPECT_NEAR(p.y, expected, expected * 0.05);
|
||
EXPECT_NEAR(p.x, 0.0, 1e-9);
|
||
}
|