diff --git a/gtsam/navigation/tests/testGeographicLib.cpp b/gtsam/navigation/tests/testGeographicLib.cpp index d31b72421..c8b18f013 100644 --- a/gtsam/navigation/tests/testGeographicLib.cpp +++ b/gtsam/navigation/tests/testGeographicLib.cpp @@ -16,6 +16,7 @@ */ #include +#include #include #include @@ -24,30 +25,47 @@ using namespace std; //using namespace gtsam; using namespace GeographicLib; -/* ************************************************************************* */ +// Dekalb-Peachtree Airport runway 2L +double lat = 33.87071, lon = -84.30482000000001, h = 274; +//************************************************************************** TEST( GeographicLib, Geocentric) { - Geocentric earth(Constants::WGS84_a(), Constants::WGS84_f()); - - // Dekalb-Peachtree Airport runway 2L - double lat = 33.87071, lon = -84.30482000000001, h = 274; - + // From lat-lon to geocentric double X, Y, Z; - earth.Forward(lat, lon, h, X, Y, Z); + Geocentric::WGS84.Forward(lat, lon, h, X, Y, Z); EXPECT_DOUBLES_EQUAL(526, X/1000, 1); EXPECT_DOUBLES_EQUAL(-5275, Y/1000, 1); EXPECT_DOUBLES_EQUAL(3535, Z/1000, 1); - // UTM is 45N 250694.42 3751090.08 - // Obtained by - // http://geographiclib.sourceforge.net/cgi-bin/GeoConvert?input=33.87071+84.30482000000001&zone=-3&prec=2&option=Submit - + // From geocentric to lat-lon + double lat_, lon_, h_; + Geocentric::WGS84.Reverse(X, Y, Z, lat_, lon_, h_); + EXPECT_DOUBLES_EQUAL(lat, lat_, 1e-5); + EXPECT_DOUBLES_EQUAL(lon, lon_, 1e-5); + EXPECT_DOUBLES_EQUAL(h, h_, 1e-5); } -/* ************************************************************************* */ +//************************************************************************** +TEST( GeographicLib, UTM) { + + // From lat-lon to UTM + int zone; + bool northp; + double x, y; + UTMUPS::Forward(lat, lon, zone, northp, x, y); + + // UTM is 16N 749305.58 3751090.08 + // Obtained by + // http://geographiclib.sourceforge.net/cgi-bin/GeoConvert?input=33.87071+-84.30482000000001&zone=-3&prec=2&option=Submit + EXPECT(UTMUPS::EncodeZone(zone, northp)=="16N"); + EXPECT_DOUBLES_EQUAL(749305.58, x, 1e-2); + EXPECT_DOUBLES_EQUAL(3751090.08, y, 1e-2); +} + +//************************************************************************** int main() { TestResult tr; return TestRegistry::runAllTests(tr); } -/* ************************************************************************* */ +//**************************************************************************