def test_distance_equator_ns(self): (d1, fwd, rev) = geo.vincenty_inverse( 0 , 0, 1 , 0 ) (d2, fwd, rev) = geo.vincenty_inverse( -0.5, 0, 0.5, 0 ) (d3, fwd, rev) = geo.vincenty_inverse( 0.5, 0, -0.5, 0 ) self.assertAlmostEqual( d1, 110574.389, places=3 ) self.assertAlmostEqual( d1, d2 + error, places=3 ) self.assertAlmostEqual( d1, d3 + error, places=3 )
def test_distance_date_line_ew(self): # All of these distances should be approximatly equal (d1, fwd, rev) = geo.vincenty_inverse( 0, 180, 0, 179) self.assertAlmostEqual( d1, 111319.491, places=3 ) (d2, fwd, rev) = geo.vincenty_inverse( 0, 180, 0, -179) (d3, fwd, rev) = geo.vincenty_inverse( 0, 179.5, 0, -179.5) self.assertAlmostEqual( d1, d2, places=3 ) self.assertAlmostEqual( d1, d3, places=3 )
def test_distance_date_line_ns(self): (d1, fwd, rev) = geo.vincenty_inverse( 0, 180, 1, 180) (d2, fwd, rev) = geo.vincenty_inverse( 0, -180, 1, -180) (d3, fwd, rev) = geo.vincenty_inverse( -0.5, 180, 0.5, 180) self.assertAlmostEqual( d1, 110574.389, places=3 ) self.assertAlmostEqual( d1, d2, places=3 ) # Known error in this scenario? 8cm self.assertAlmostEqual( d1, d3 + error, places=3 )
def test_distance_poles(self): (d1, fwd, rev) = geo.vincenty_inverse( 90 , 0 , 89 , 180 ) (d2, fwd, rev) = geo.vincenty_inverse( 90 , 0 , 89 , 76 ) (d3, fwd, rev) = geo.vincenty_inverse( 89.5, 90, 89.5, -90 ) (d4, fwd, rev) = geo.vincenty_inverse( 89.5, 0 , 89.5, 180 ) (d5, fwd, rev) = geo.vincenty_inverse( 89.5, 0 , 89.5, -180) (d6, fwd, rev) = geo.vincenty_inverse( 90 , 50, 89 , 76 ) self.assertAlmostEqual( d1, 111693.865, places=3 ) self.assertAlmostEqual( d1, d2, places=3 ) # Again, known errors of about 8cm when crossing lat self.assertAlmostEqual( d1, d3 - error - 0.001, places=3 ) self.assertAlmostEqual( d1, d4 - error - 0.001, places=3 ) self.assertAlmostEqual( d1, d5 - error - 0.001, places=3 ) self.assertAlmostEqual( d1, d6, places=3 )
def test_bearing_diag(self): error = 0.1924 (d1, fwd, rev) = geo.vincenty_inverse( -0.001 , -0.001 , 0.001 , 0.001 ) self.assertAlmostEqual( fwd, 45 + error , places = 3)
def test_bearing_ns(self): (d1, fwd, rev) = geo.vincenty_inverse( 0 , 0 , 1 , 0 ) self.assertAlmostEqual( fwd, 0 )
def test_bearing_ew(self): (d1, fwd, rev) = geo.vincenty_inverse( 0 , 0 , 0 , 1 ) self.assertAlmostEqual( fwd, 90 ) self.assertAlmostEqual( rev, 90 )
def test_direct_inverse(self): (d1, fwd, rev1) = geo.vincenty_inverse( 0 , 0, 1 , 0 ) (lat, lon, rev2) = geo.vincenty_direct( 0,0,d1,fwd) self.assertAlmostEqual( lat,1, places=3 ) self.assertAlmostEqual( lon,0, places=3 ) self.assertAlmostEqual( rev1,rev2, places=3 )
def test_distance_meridian_cross_ew(self): (d, fwd, rev) = geo.vincenty_inverse( 0, -0.5, 0, 0.5) self.assertAlmostEqual( d, 111319.491, places=3 ) (drev, fwd, rev) = geo.vincenty_inverse( 0, 0.5, 0, -0.5) self.assertAlmostEqual( d, drev, places=3 )
def test_distance_equator_ew(self): # 1 degree of longitude at the equator, to the east of prime (d, fwd, rev) = geo.vincenty_inverse( 0, 0, 0, 1 ) self.assertAlmostEqual( d, 111319.491, places=3 )
def test_bearing_pole(self): (d1, fwd1, rev) = geo.vincenty_inverse( 89 , 90 , 90 , 0 ) (d1, fwd2, rev) = geo.vincenty_inverse( 89 , 270 , 90 , 0 ) self.assertAlmostEqual( round(fwd1,3) % 360, 0 ) self.assertAlmostEqual( round(fwd2,3) % 360, 0 )