示例#1
0
def read_sinex_sites(file):

    """This function reads in the SITE/ID block of a SINEX file. It returns
    sites, a list of tuples:

    sites = [(site, point, domes, obs, station_description, lon, lat, h)]

    where:
        * site is the site code
        * point is the site's point code
        * domes is the site's dome number
        * obs is the observation technique
        * station_description is a free format desciption of the site
        * lon is the approximate longitude of the site as a DMSAngle object
        * lat is the approximate latitude of the site as a DMSAngle object
        * h is the approximate height of the site

    :param file: the input SINEX file
    :return: sites
    """

    # Read the SITE/ID block into a list
    lines = []
    go = False
    with open(file) as f:
        for line in f:
            if line[:8] == '-SITE/ID':
                break
            if go and line[:8] == '*CODE PT':
                pass
            elif go:
                lines.append(line)
            if line[:8] == '+SITE/ID':
                go = True
    sites = []
    for line in lines:
        site = line[1:5]
        point = line[6:8].lstrip()
        domes = line[9:18]
        obs = line[19:20]
        station_description = line[21:43].lstrip()
        lon = DMSAngle(line[44:55].lstrip())
        lat = DMSAngle(line[56:67].lstrip())
        h = float(line[67:73])
        info = (site, point, domes, obs, station_description, lon, lat, h)
        sites.append(info)

    return sites
示例#2
0
 def test_angles_interoperability(self):
     self.assertEqual(DMSAngle(1, 2, 3) + DDMAngle(2, 3), DMSAngle(3, 5, 3))
     self.assertEqual(
         DMSAngle(3, 2, 0) - DDMAngle(2, 2.5), DMSAngle(0, 59, 30))
     self.assertEqual(DDMAngle(2, 3) + DMSAngle(1, 2, 3), DDMAngle(3, 5.05))
     self.assertEqual(
         DDMAngle(3, 2) - DMSAngle(2, 2, 30), DDMAngle(0, 59.5))
示例#3
0
import unittest
from geodepy.angles import DMSAngle, DECAngle
from geodepy.constants import utm, grs80
from geodepy.coord import CoordCart, CoordGeo, CoordTM

cart_ex1 = CoordCart(-4052052.7379, 4212835.9897, -2545104.5898, 14.269)
cart_ex2 = CoordCart(-4052052.7379, 4212835.9897, -2545104.5898)

geo_ex1 = CoordGeo(DMSAngle(-23, 40, 12.39650).deca(),
                   DMSAngle(133, 53, 7.87779).deca(),
                   603.2489, 588.9799)
geo_ex2 = CoordGeo(geo_ex1.lat, geo_ex1.lon, None, 588.9799)
geo_ex3 = CoordGeo(geo_ex1.lat, geo_ex1.lon, 603.2489, None)
geo_ex4 = CoordGeo(geo_ex1.lat, geo_ex1.lon)

tm_ex1 = CoordTM(53, 386353.2343, 7381852.2986, 603.2489, 588.9799,
                 hemi_north=False, projection=utm)
tm_ex2 = CoordTM(tm_ex1.zone, tm_ex1.east, tm_ex1.north, None, tm_ex1.orth_ht,
                 hemi_north=False, projection=utm)
tm_ex3 = CoordTM(tm_ex1.zone, tm_ex1.east, tm_ex1.north, tm_ex1.ell_ht, None,
                 hemi_north=False, projection=utm)
tm_ex4 = CoordTM(tm_ex1.zone, tm_ex1.east, tm_ex1.north, None, None,
                 hemi_north=False, projection=utm)


class TestCoord(unittest.TestCase):
    def test_CoordCart(self):
        # Test Overloads
        self.assertEqual(repr(cart_ex1), 'CoordCart: X: -4052052.7379 '
                                         'Y: 4212835.9897 Z: -2545104.5898 '
                                         'NVal: 14.269')
示例#4
0
    def test_DMSAngle(self):
        # Test DMSAngle Methods
        for num, ex in enumerate(dms_exs):
            self.assertAlmostEqual(ex.rad(), rad_exs[num], 16)
            self.assertAlmostEqual(-ex.rad(), -rad_exs[num], 16)
            self.assertAlmostEqual(ex.dec(), dec_exs[num], 16)
            self.assertAlmostEqual(-ex.dec(), -dec_exs[num], 16)
            self.assertEqual(round(ex.deca(), 16), deca_exs[num])
            self.assertEqual(round(-ex.deca(), 16), -deca_exs[num])
            self.assertAlmostEqual(ex.hp(), hp_exs[num], 16)
            self.assertAlmostEqual(-ex.hp(), -hp_exs[num], 16)
            self.assertEqual(ex.hpa(), hpa_exs[num])
            self.assertEqual(-ex.hpa(), -hpa_exs[num])
            self.assertAlmostEqual(ex.gon(), gon_exs[num], 13)
            self.assertAlmostEqual(-ex.gon(), -gon_exs[num], 13)
            self.assertEqual(round(ex.gona(), 13), round(gona_exs[num], 13))
            self.assertEqual(round(-ex.gona(), 13), round(-gona_exs[num], 13))
            self.assertEqual(ex.ddm(), ddm_exs[num])
            self.assertEqual(-ex.ddm(), -ddm_exs[num])
            self.assertEqual((round(ex, 2)).hp(), round(hp_exs[num], 5))
            self.assertEqual((round(-ex, 2)).hp(), round(-hp_exs[num], 5))

        # Test DMSAngle Sign Conventions
        self.assertEqual(
            -dec_ex,
            DMSAngle(-dms_ex.degree, dms_ex.minute, dms_ex.second).dec())
        self.assertEqual(
            dec_ex,
            DMSAngle(dms_ex.degree, -dms_ex.minute, -dms_ex.second).dec())
        self.assertAlmostEqual(
            -dec_ex4,
            DMSAngle(0, -dms_ex4.minute, dms_ex4.second).dec(), 9)
        self.assertAlmostEqual(
            dec_ex4,
            DMSAngle(0, dms_ex4.minute, dms_ex4.second).dec(), 9)
        self.assertEqual(-dec_ex5, DMSAngle(0, 0, -dms_ex5.second).dec())
        self.assertEqual(dec_ex5, DMSAngle(0, 0, dms_ex5.second).dec())
        self.assertEqual(-dms_ex3, DMSAngle(12, 34, -30))
        self.assertTrue(dms_ex.positive)
        self.assertFalse((-dms_ex).positive)
        self.assertTrue(dms_ex4.positive)
        self.assertFalse((-dms_ex4).positive)
        self.assertTrue(dms_ex5.positive)
        self.assertFalse((-dms_ex5).positive)
        self.assertFalse(DMSAngle(-1, 2, 3).positive)
        self.assertTrue(DMSAngle(1, -2, 3).positive)
        self.assertTrue(DMSAngle(1, 2, -3).positive)
        self.assertFalse(DMSAngle(0, -1, 2).positive)
        self.assertFalse(DMSAngle(0, 0, -3).positive)
        self.assertTrue(DMSAngle(-0, 1, 2).positive)
        self.assertFalse(DMSAngle(-0.0, 1, 2).positive)
        self.assertEqual(repr(dms_ex), '{DMSAngle: +123d 44m 55.5s}')
        self.assertEqual(repr(dms_ex3), '{DMSAngle: -12d 34m 30s}')

        # Test DMSAngle Overloads
        self.assertEqual(dec_ex + dec_ex2, (dms_ex + dms_ex2).dec())
        self.assertEqual(dec_ex2 + dec_ex, (dms_ex2 + dms_ex).dec())
        self.assertEqual(dec_ex - dec_ex2, (dms_ex - dms_ex2).dec())
        self.assertEqual(dec_ex2 - dec_ex, (dms_ex2 - dms_ex).dec())
        self.assertEqual(dec_ex * 5, (dms_ex * 5).dec())
        self.assertEqual(5 * dec_ex, (5 * dms_ex).dec())
        self.assertEqual(dec_ex / 3, (dms_ex / 3).dec())
        self.assertEqual(abs(-dms_ex), dms_ex)
        self.assertEqual(-dms_ex2, dms_ex3)
        self.assertEqual(dms_ex2, abs(dms_ex3))
        self.assertEqual(dms_ex, ddm_ex)
        self.assertTrue(dms_ex == dms_ex)
        self.assertFalse(dms_ex == dms_ex2)
        self.assertTrue(dms_ex != dms_ex2)
        self.assertFalse(dms_ex != dms_ex)
        self.assertTrue(dms_ex > dms_ex2)
        self.assertFalse(dms_ex2 > dms_ex)
        self.assertTrue(dms_ex2 < dms_ex)
        self.assertFalse(dms_ex < dms_ex2)
        with self.assertRaises(TypeError):
            dms_ex * 'a'
        with self.assertRaises(TypeError):
            'a' * dms_ex
        with self.assertRaises(TypeError):
            dms_ex / 'a'
        with self.assertRaises(TypeError):
            dms_ex + 'a'
        with self.assertRaises(TypeError):
            'a' + dms_ex
        with self.assertRaises(TypeError):
            dms_ex - 'a'
        with self.assertRaises(TypeError):
            'a' - dms_ex

        # Test reading in formatted strings
        for num, ex in enumerate(dms_strs):
            self.assertEqual(DMSAngle(ex), dms_exs[num])
            self.assertEqual(ex, str(dms_exs[num]))
示例#5
0
hp_ex = 123.44555
hp_ex2 = 12.3430
hp_ex3 = -12.3430
hp_ex4 = 0.0309
hp_ex5 = 0.0018
hp_exs = [hp_ex, hp_ex2, hp_ex3, hp_ex4, hp_ex5]

hpa_ex = HPAngle(123.44555)
hpa_ex2 = HPAngle(12.3430)
hpa_ex3 = HPAngle(-12.3430)
hpa_ex4 = HPAngle(0.0309)
hpa_ex5 = HPAngle(0.0018)
hpa_exs = [hpa_ex, hpa_ex2, hpa_ex3, hpa_ex4, hpa_ex5]

dms_ex = DMSAngle(123, 44, 55.5)
dms_ex2 = DMSAngle(12, 34, 30)
dms_ex3 = DMSAngle(-12, -34, -30)
dms_ex4 = DMSAngle(0, 3, 9)
dms_ex5 = DMSAngle(0, 0, 18)
dms_exs = [dms_ex, dms_ex2, dms_ex3, dms_ex4, dms_ex5]

dms_str = '123 44 55.5'
dms_str2 = '12 34 30'
dms_str3 = '-12 34 30'
dms_str4 = '0 3 9'
dms_str5 = '0 0 18'
dms_strs = [dms_str, dms_str2, dms_str3, dms_str4, dms_str5]

ddm_ex = DDMAngle(123, 44.925)
ddm_ex2 = DDMAngle(12, 34.5)