def test_vincdir(self): # Flinders Peak lat1 = hp2dec(-37.57037203) lon1 = hp2dec(144.25295244) lat1_DMS = DMSAngle(-37, 57, 3.7203) lon1_DMS = DMSAngle(144, 25, 29.5244) # To Buninyong azimuth1to2 = hp2dec(306.520537) azimuth1to2_DMS = DMSAngle(306, 52, 5.37) ell_dist = 54972.271 # Test Decimal Degrees Input lat2, lon2, azimuth2to1 = vincdir(lat1, lon1, azimuth1to2, ell_dist) self.assertEqual(round(dec2hp(lat2), 8), -37.39101561) self.assertEqual(round(dec2hp(lon2), 8), 143.55353839) self.assertEqual(round(dec2hp(azimuth2to1), 6), 127.102507) # Test DMSAngle Input lat2, long2, azimuth2to1 = vincdir(lat1_DMS, lon1_DMS, azimuth1to2_DMS, ell_dist) self.assertEqual(round(dec2hp(lat2), 8), -37.39101561) self.assertEqual(round(dec2hp(long2), 8), 143.55353839) self.assertEqual(round(dec2hp(azimuth2to1), 6), 127.102507) # Test DDMAngle Input lat2, long2, azimuth2to1 = vincdir(lat1_DMS.ddm(), lon1_DMS.ddm(), azimuth1to2_DMS.ddm(), ell_dist) self.assertEqual(round(dec2hp(lat2), 8), -37.39101561) self.assertEqual(round(dec2hp(long2), 8), 143.55353839) self.assertEqual(round(dec2hp(azimuth2to1), 6), 127.102507)
def test_vincdir(self): # Flinders Peak lat1 = dms2dd(-37.57037203) long1 = dms2dd(144.25295244) # To Buninyong azimuth1to2 = dms2dd(306.520537) ell_dist = 54972.271 lat2, long2, azimuth2to1 = vincdir(lat1, long1, azimuth1to2, ell_dist) self.assertEqual(round(dd2dms(lat2), 8), -37.39101561) self.assertEqual(round(dd2dms(long2), 8), 143.55353839) self.assertEqual(round(dd2dms(azimuth2to1), 6), 127.102507)
def test_equality_vincentys(self): # Test multiple point-to-point vincinv calculations abs_path = os.path.abspath(os.path.dirname(__file__)) test_geo_coords =\ np.genfromtxt(os.path.join(abs_path, 'resources/Test_Conversion_Geo.csv'), delimiter=',', dtype='S4,f8,f8', names=['site', 'lat1', 'long1'], usecols=('lat1', 'long1')) test_geo_coord2 = \ np.genfromtxt(os.path.join(abs_path, 'resources/Test_Conversion_Geo.csv'), delimiter=',', dtype='S4,f8,f8', names=['site', 'lat2', 'long2'], usecols=('lat2', 'long2')) # Form array with point pairs from test file test_pairs = rfn.merge_arrays( [test_geo_coords, np.roll(test_geo_coord2, 1)], flatten=True) # Calculate Vincenty's Inverse Result using Lat, Long Pairs vincinv_result = np.array( list( vincinv(*x) for x in test_pairs[['lat1', 'long1', 'lat2', 'long2']])) # Calculate Vincenty's Direct Result using Results from Inverse Function vincdir_input = rfn.merge_arrays( [test_geo_coords, vincinv_result[:, 1], vincinv_result[:, 0]], flatten=True) vincdir_input.dtype.names = ['lat1', 'long1', 'az1to2', 'ell_dist'] vincdir_result = np.array( list( vincdir(*x) for x in vincdir_input[ ['lat1', 'long1', 'az1to2', 'ell_dist']])) np.testing.assert_almost_equal(test_pairs['lat2'], vincdir_result[:, 0], decimal=8) np.testing.assert_almost_equal(test_pairs['long2'], vincdir_result[:, 1], decimal=8) np.testing.assert_almost_equal(vincinv_result[:, 2], vincdir_result[:, 2])
def handle_vincdir(): from_angle_type = request.args.get('from_angle_type', default='dd') to_angle_type = request.args.get('to_angle_type', default='dd') lat1 = request.args.get('lat1', type=float) lon1 = request.args.get('lon1', type=float) azimuth1to2 = request.args.get('azimuth1to2', type=float) ell_dist = request.args.get('ell_dist', type=float) dd = angle_type_to_dd[from_angle_type] lat1_dd, lon1_dd, azimuth1to2_dd = dd(lat1), dd(lon1), dd(azimuth1to2) lat2_dd, lon2_dd, azimuth2to1_dd = vincdir(lat1_dd, lon1_dd, azimuth1to2_dd, ell_dist) angle_type = dd_to_angle_type[to_angle_type] lat2, lon2, azimuth2to1 = angle_type(lat2_dd), angle_type( lon2_dd), angle_type(azimuth2to1_dd) return jsonify({ 'lat2': lat2, 'lon2': lon2, 'azimuth2to1': azimuth2to1 }), 200