Exemplo n.º 1
0
class ComputationTestCase(unittest.TestCase):
    LAT = +dms_to_dec(16, 46, 33)   # 16:46:33N
    LON = -dms_to_dec(3, 0, 34)     # 03:00:34W
    HEIGHT = +28.7068               # [m]
    GHEIGHT = +300                  # [m]
    EHEIGHT = HEIGHT + GHEIGHT      # [m]

    # $ echo 16:46:33N 3:00:34W | GeoidEval
    # 28.7068
    # $ echo 16.775833333333335 -3.0094444444444446 | GeoidEval
    # 28.7068

    def setUp(self) -> None:
        self.name = GeoidModel.default_geoid_name()
        self.model = GeoidModel(self.name)

    def test_compute_scalar(self):
        h = self.model(self.LAT, self.LON)
        npt.assert_allclose(h, self.HEIGHT)

    def test_geoid_to_ellipsoid_scalar(self):
        dir_ = EHeightConvDir.GEOIDTOELLIPSOID
        h = self.model.convert_height(self.LAT, self.LON, self.GHEIGHT, dir_)
        npt.assert_allclose(h, self.EHEIGHT)

    def test_ellipsoid_to_geoid_scalar(self):
        dir_ = EHeightConvDir.ELLIPSOIDTOGEOID
        h = self.model.convert_height(self.LAT, self.LON, self.EHEIGHT, dir_)
        npt.assert_allclose(h, self.GHEIGHT)

    def test_convert_height_dir_none(self):
        dir_ = EHeightConvDir.NONE
        h = self.model.convert_height(self.LON, self.LAT, self.EHEIGHT, dir_)
        npt.assert_allclose(h, self.EHEIGHT)
Exemplo n.º 2
0
class ConstHeightVectorComputationTestCase(unittest.TestCase):
    LAT = np.asarray([
        [+dms_to_dec(16, 46, 33), +dms_to_dec(16, 56, 43)],
        [+dms_to_dec(16, 46, 33), +dms_to_dec(16, 56, 43)],
    ])
    LON = np.asarray([
        [-dms_to_dec(3, 0, 34), -dms_to_dec(3, 10, 44)],
        [-dms_to_dec(3, 0, 34), -dms_to_dec(3, 10, 44)],
    ])
    HEIGHT = np.asarray([
        [+28.7068, +28.6599],
        [+28.7068, +28.6599],
    ])
    KHEIGHT = +300
    RTOL = 2.5e-6

    def setUp(self) -> None:
        self.name = GeoidModel.default_geoid_name()
        self.model = GeoidModel(self.name)

    def test_geoid_to_ellipsoid_vector(self):
        dir_ = EHeightConvDir.GEOIDTOELLIPSOID
        h = self.model.convert_height(
            self.LAT.flatten(), self.LON.flatten(), self.KHEIGHT, dir_)
        eheight = self.HEIGHT + self.KHEIGHT
        npt.assert_allclose(h, eheight.flatten(), rtol=self.RTOL)

    def test_geoid_to_ellipsoid_matrix(self):
        dir_ = EHeightConvDir.GEOIDTOELLIPSOID
        h = self.model.convert_height(self.LAT, self.LON, self.KHEIGHT, dir_)
        eheight = self.HEIGHT + self.KHEIGHT
        npt.assert_allclose(h, eheight, rtol=self.RTOL)

    def test_ellipsoid_to_geoid_vector(self):
        dir_ = EHeightConvDir.ELLIPSOIDTOGEOID
        h = self.model.convert_height(
            self.LAT.flatten(), self.LON.flatten(), self.KHEIGHT, dir_)
        gheight = self.KHEIGHT - self.HEIGHT
        npt.assert_allclose(h, gheight.flatten(), rtol=self.RTOL)

    def test_ellipsoid_to_geoid_matrix(self):
        dir_ = EHeightConvDir.ELLIPSOIDTOGEOID
        h = self.model.convert_height(self.LAT, self.LON, self.KHEIGHT, dir_)
        gheight = self.KHEIGHT - self.HEIGHT
        npt.assert_allclose(h, gheight, rtol=self.RTOL)

    def test_convert_height_dir_none_vector(self):
        dir_ = EHeightConvDir.NONE
        h = self.model.convert_height(
            self.LON.flatten(), self.LAT.flatten(), self.KHEIGHT, dir_)
        npt.assert_allclose(h, np.full_like(h, self.KHEIGHT))

    def test_convert_height_dir_none_matrix(self):
        dir_ = EHeightConvDir.NONE
        h = self.model.convert_height(self.LON, self.LAT, self.KHEIGHT, dir_)
        npt.assert_allclose(h, np.full_like(h, self.KHEIGHT))
Exemplo n.º 3
0
class VectorComputationTestCase(unittest.TestCase):
    LAT = np.asarray([
        [+dms_to_dec(16, 46, 33), -dms_to_dec(16, 46, 43)],
        [-dms_to_dec(16, 56, 33), +dms_to_dec(16, 56, 43)],
    ])
    LON = np.asarray([
        [-dms_to_dec(3, 0, 34), +dms_to_dec(3, 0, 44)],
        [+dms_to_dec(3, 10, 34), -dms_to_dec(3, 10, 44)],
    ])
    HEIGHT = np.asarray([
        [+28.7068, +14.8866],
        [+15.0314, +28.6599],
    ])
    GHEIGHT = np.asarray([
        [+300, +400000],
        [+400000, +300],
    ])
    EHEIGHT = HEIGHT + GHEIGHT
    RTOL = 2.5e-6

    def setUp(self) -> None:
        self.name = GeoidModel.default_geoid_name()
        self.model = GeoidModel(self.name)

    def test_compute_vector(self):
        h = self.model(self.LAT.flatten(), self.LON.flatten())
        npt.assert_allclose(h, self.HEIGHT.flatten(), rtol=self.RTOL)

    def test_compute_matrix(self):
        h = self.model(self.LAT, self.LON)
        npt.assert_allclose(h, self.HEIGHT, rtol=self.RTOL)

    def test_geoid_to_ellipsoid_vector(self):
        dir_ = EHeightConvDir.GEOIDTOELLIPSOID
        h = self.model.convert_height(
            self.LAT.flatten(), self.LON.flatten(), self.GHEIGHT.flatten(),
            dir_)
        npt.assert_allclose(h, self.EHEIGHT.flatten(), rtol=self.RTOL)

    def test_geoid_to_ellipsoid_matrix(self):
        dir_ = EHeightConvDir.GEOIDTOELLIPSOID
        h = self.model.convert_height(self.LAT, self.LON, self.GHEIGHT, dir_)
        npt.assert_allclose(h, self.EHEIGHT, rtol=self.RTOL)

    def test_ellipsoid_to_geoid_vector(self):
        dir_ = EHeightConvDir.ELLIPSOIDTOGEOID
        h = self.model.convert_height(
            self.LAT.flatten(), self.LON.flatten(), self.EHEIGHT.flatten(),
            dir_)
        npt.assert_allclose(h, self.GHEIGHT.flatten(), rtol=self.RTOL)

    def test_ellipsoid_to_geoid_matrix(self):
        dir_ = EHeightConvDir.ELLIPSOIDTOGEOID
        h = self.model.convert_height(self.LAT, self.LON, self.EHEIGHT, dir_)
        npt.assert_allclose(h, self.GHEIGHT, rtol=self.RTOL)

    def test_convert_height_dir_none_vector(self):
        dir_ = EHeightConvDir.NONE
        h = self.model.convert_height(
            self.LON.flatten(), self.LAT.flatten(), self.EHEIGHT.flatten(),
            dir_)
        npt.assert_allclose(h, self.EHEIGHT.flatten())

    def test_convert_height_dir_none_matrix(self):
        dir_ = EHeightConvDir.NONE
        h = self.model.convert_height(self.LON, self.LAT, self.EHEIGHT, dir_)
        npt.assert_allclose(h, self.EHEIGHT)