def testAziBaziC(self): ntest = 10000 lats1, lons1, lats2, lons2 = self.get_critical_random_locations(ntest) for i in range(ntest): orthodrome.azibazi( lats1[i], lons1[i], lats2[i], lons2[i], implementation='c')
def testAziBaziArrayPythonC(self): ntest = 10000 lats1, lons1, lats2, lons2 = self.get_critical_random_locations(ntest) azis_c, bazis_c = orthodrome.azibazi_numpy( lats1, lons1, lats2, lons2, implementation='c') azis_py, bazis_py = orthodrome.azibazi_numpy( lats1, lons1, lats2, lons2, implementation='python') for i in range(ntest): azi_py, bazi_py = orthodrome.azibazi( float(lats1[i]), float(lons1[i]), float(lats2[i]), float(lons2[i]), implementation='python') azi_c, bazi_c = orthodrome.azibazi( lats1[i], lons1[i], lats2[i], lons2[i], implementation='c') num.testing.assert_almost_equal(azi_py, azis_py[i]) num.testing.assert_almost_equal(bazi_py, bazis_py[i]) num.testing.assert_almost_equal(azi_c, azis_c[i]) num.testing.assert_almost_equal(bazi_c, bazis_c[i]) num.testing.assert_almost_equal(azis_py, azis_c) num.testing.assert_almost_equal(bazis_py, bazis_c)
def testAziBaziPython(self): ntest = 10000 lats1, lons1, lats2, lons2 = self.get_critical_random_locations(ntest) for i in range(ntest): orthodrome.azibazi( float(lats1[i]), float(lons1[i]), float(lats2[i]), float(lons2[i]), implementation='python')
def testAziBaziPythonC(self): ntest = 100 lats1, lons1, lats2, lons2 = self.get_critical_random_locations(ntest) for i in range(ntest): azibazi_py = orthodrome.azibazi(float(lats1[i]), float(lons1[i]), float(lats2[i]), float(lons2[i]), implementation='python') azibazi_c = orthodrome.azibazi(lats1[i], lons1[i], lats2[i], lons2[i], implementation='c') assert_ae(azibazi_py, azibazi_c)
def testLocationObjects(self): class Dummy(object): def __init__(self, lat, lon, depth): self.lat = lat self.lon = lon self.depth = depth a0 = Location(lat=10., lon=12., depth=1100.) a1 = guts.clone(a0) a1.set_origin(lat=9., lon=11) b0 = Location(lat=11., lon=13., depth=2100.) b1 = guts.clone(b0) b1.set_origin(lat=9., lon=11) b2 = Dummy(b0.lat, b0.lon, b0.depth) dist_ab = orthodrome.distance_accurate50m(a0.lat, a0.lon, b0.lat, b0.lon) azi_ab, bazi_ab = orthodrome.azibazi(a0.lat, a0.lon, b0.lat, b0.lon) def g_to_e(*args): return num.array(orthodrome.geodetic_to_ecef(*args)) a_vec = g_to_e(a0.lat, a0.lon, -a0.depth) b_vec = g_to_e(b0.lat, b0.lon, -b0.depth) dist_3d_compare = math.sqrt(num.sum((a_vec - b_vec)**2)) north_shift_compare, east_shift_compare = orthodrome.latlon_to_ne( a0.lat, a0.lon, b0.lat, b0.lon) for a in [a0, a1]: for b in [b0, b1, b2]: dist = a.distance_to(b) assert_allclose(dist, dist_ab) dist_3d = a.distance_3d_to(b) assert_allclose(dist_3d, dist_3d_compare, rtol=0.001) azi, bazi = a.azibazi_to(b) assert_allclose(azi % 360., azi_ab % 360., rtol=1e-2) assert_allclose(bazi % 360., bazi_ab % 360., rtol=1e-2) north_shift, east_shift = a.offset_to(b) assert_allclose((north_shift, east_shift), (north_shift_compare, east_shift_compare), rtol=5e-3) for x, y in [(a0, a1), (b0, b1), (b0, b2), (b1, b2)]: dist = x.distance_to(y) assert_allclose(dist, 0.0)
from pyrocko import orthodrome, model e = model.Event(lat=37.58, lon=57.11) s = model.Event(lat=34.884, lon=57.159) dist = orthodrome.distance_accurate50m(e, s) print(dist/1000) # Azimuth and Back Azimuth az = orthodrome.azibazi(e, s) print (az)
from pyrocko import orthodrome # For a single point orthodrome.azibazi(49.1, 20.5, 45.4, 22.3) # >>> (161.05973376168285, -17.617746351508035) # Azimuth and backazimuth import numpy as num # noqa ncoords = 1000 # First set of coordinates lats_a = num.random.uniform(-180., 180., ncoords) lons_a = num.random.uniform(-90., 90., ncoords) # Second set of coordinates lats_b = num.random.uniform(-180., 180., ncoords) lons_b = num.random.uniform(-90., 90., ncoords) orthodrome.azibazi_numpy(lats_a, lons_a, lats_b, lons_b)