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
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))
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')
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]))
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)