def test_latitudes(): ell = Ellipsoid('GRS80') lat = np.arange(-90, 90, 0.1, dtype=float) sph_lat, _, sph_radius = geodetic_to_spherical(lat, lon=0.0, height=0.0, ell=ell) np.testing.assert_array_almost_equal(ell.geocentric_latitude(lat), sph_lat, decimal=8) reduced_latitude = np.degrees( np.arctan(np.tan(np.radians(sph_lat)) / (1 - ell.f))) np.testing.assert_array_almost_equal(ell.reduced_latitude(lat), reduced_latitude, decimal=8) # compare with series from # J. P. Snyder, Map projections - a working manual, 1926, page 16 latr = np.radians(lat) s2lat = (ell.e2 / 3 + 31 * ell.e2**2 / 180 + 59 * ell.e2**3 / 560) * np.sin(2 * latr) s4lat = (17 * ell.e2**2 / 360 + 61 * ell.e2**3 / 1260) * np.sin(4 * latr) s6lat = (383 * ell.e2**3 / 45360) * np.sin(6 * latr) authalic_latitude = np.degrees(latr - s2lat + s4lat - s6lat) np.testing.assert_array_almost_equal(ell.authalic_latitude(lat), authalic_latitude, decimal=6)
def test_gravity(): lat, lon, r = geodetic_to_spherical(latitude, longitude, 0.0, ell=ell, degrees=True) gravity_model = model.gravity(lat, lon, r, degrees=True) * 1e5 gravity_test = data.gravity_ell.values np.testing.assert_almost_equal(gravity_model, gravity_test)
def test_height_anomaly_ell(): lat, lon, r = geodetic_to_spherical(latitude, longitude, 0.0, ell=ell, degrees=True) ha_model = model.height_anomaly_ell(lat, lon, r, degrees=True) ha_test = data.height_anomaly_ell.values np.testing.assert_almost_equal(ha_model, ha_test)
def test_gravitational_potential(): lat, lon, r = geodetic_to_spherical(latitude, longitude, 0.0, ell=ell, degrees=True) pot_model = model.gravitational_potential.potential(lat, lon, r, degrees=True) pot_test = data.potential_ell.values np.testing.assert_almost_equal(pot_model, pot_test, 6)
def test_gradient(): lat, lon, r = geodetic_to_spherical(latitude, longitude, radius0, ell=ell) # rad, lon, lat, total gradient_model = model._gravitational.gradient(lat, lon, r) r_derivative_model = model._gravitational.r_derivative(lat, lon, r) lon_derivative_model = model._gravitational.lon_derivative(lat, lon, r) lat_derivative_model = model._gravitational.lat_derivative(lat, lon, r) np.testing.assert_almost_equal(gradient_model[0].value, r_derivative_model.value) np.testing.assert_almost_equal(gradient_model[1].value, lon_derivative_model.value) np.testing.assert_almost_equal(gradient_model[2].value, lat_derivative_model.value)
def test_radiuses(): ell = Ellipsoid('GRS80') # geodetic latitude lat = np.arange(-90, 90, 0.1, dtype=float) x, y, _ = geodetic_to_cartesian(lat, lon=0.0, height=0.0, ell=ell) np.testing.assert_array_almost_equal(ell.circle_radius(lat), np.sqrt(x**2 + y**2), decimal=5) sph_lat, _, sph_radius = geodetic_to_spherical(lat, lon=0.0, height=0.0, ell=ell) np.testing.assert_array_almost_equal(ell.polar_equation(sph_lat), sph_radius, decimal=5)
def test_surface_gravity_potential(): ell = LevelEllipsoid('GRS80') # geodetic latitude lat = np.arange(-90, 90, 0.1, dtype=float) rlat, _, u = transform.geodetic_to_ellipsoidal(lat=lat, lon=0.0, height=0.0, ell=ell) gravity_potential_0 = ell.gravity_potential(rlat, u) np.testing.assert_almost_equal( ell.surface_potential, gravity_potential_0, decimal=5) geoclat, _, radius = transform.geodetic_to_spherical(lat=lat, lon=0.0, height=0.0, ell=ell) gravity_potential_sph_0 = ell.gravity_potential_sph(geoclat, radius) np.testing.assert_almost_equal( ell.surface_potential, gravity_potential_sph_0, decimal=5) np.testing.assert_almost_equal( gravity_potential_sph_0, gravity_potential_0, decimal=5)
def test_height_anomaly_ell(): lat, lon, r = geodetic_to_spherical(latitude, longitude, radius0, ell=ell) ha_model = model.height_anomaly_ell(lat, lon, r) ha_test = data.height_anomaly_ell.values np.testing.assert_almost_equal(ha_model.value, ha_test)
def test_gravity_anomaly_sa(): lat, lon, r = geodetic_to_spherical(latitude, longitude, radius0, ell=ell) gravity_anom_model = model.gravity_anomaly_sa(lat, lon, r).to('mGal') gravity_anom_test = data.gravity_anomaly_sa.values np.testing.assert_almost_equal(gravity_anom_model.value, gravity_anom_test)
def test_gravitational_potential(): lat, lon, r = geodetic_to_spherical(latitude, longitude, radius0, ell=ell) pot_model = model.gravitational_potential.potential(lat, lon, r) pot_test = data.potential_ell.values np.testing.assert_almost_equal(pot_model.value, pot_test, 6)