Exemple #1
0
    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)
Exemple #2
0
 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)
Exemple #3
0
    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])
Exemple #4
0
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