#include "UsgsAstroFramePlugin.h" #include "UsgsAstroFrameSensorModel.h" #include #include #include #include using json = nlohmann::json; class FrameSensorModel : public ::testing::Test { protected: UsgsAstroFrameSensorModel *sensorModel; void SetUp() override { sensorModel = NULL; std::ifstream isdFile("data/simpleFramerISD.json"); json jsonIsd = json::parse(isdFile); csm::Isd isd; for (json::iterator it = jsonIsd.begin(); it != jsonIsd.end(); ++it) { json jsonValue = it.value(); if (jsonValue.size() > 1) { for (int i = 0; i < jsonValue.size(); i++) { isd.addParam(it.key(), jsonValue[i].dump()); } } else { isd.addParam(it.key(), jsonValue.dump()); } } isdFile.close(); UsgsAstroFramePlugin frameCameraPlugin; csm::Model *model = frameCameraPlugin.constructModelFromISD( isd, "USGS_ASTRO_FRAME_SENSOR_MODEL"); sensorModel = dynamic_cast(model); ASSERT_NE(sensorModel, nullptr); } void TearDown() override { if (sensorModel) { delete sensorModel; sensorModel = NULL; } } }; TEST_F(FrameSensorModel, Center) { csm::ImageCoord imagePt(7.5, 7.5); csm::EcefCoord groundPt = sensorModel->imageToGround(imagePt, 0.0); EXPECT_DOUBLE_EQ(groundPt.x, 10.0); EXPECT_DOUBLE_EQ(groundPt.y, 0); EXPECT_DOUBLE_EQ(groundPt.z, 0); } TEST_F(FrameSensorModel, OffBody) { csm::ImageCoord imagePt(0.0, 15.0); csm::EcefCoord groundPt = sensorModel->imageToGround(imagePt, 0.0); EXPECT_DOUBLE_EQ(groundPt.x, 0.44979759); EXPECT_DOUBLE_EQ(groundPt.y, -14.99325304); EXPECT_DOUBLE_EQ(groundPt.z, 14.99325304); } TEST_F(FrameSensorModel, SlightlyOffCenter) { csm::ImageCoord imagePt(6.5, 7.5); csm::EcefCoord groundPt = sensorModel->imageToGround(imagePt, 0.0); EXPECT_DOUBLE_EQ(groundPt.x, 9.80194018); EXPECT_DOUBLE_EQ(groundPt.y, 0); EXPECT_DOUBLE_EQ(groundPt.z, 1.98039612); }