def __init__(self): """Start the map at the previous location, and connect signals.""" perform_zoom = lambda button, zoom: zoom() back_button = get_obj('back_button') zoom_in_button = get_obj('zoom_in_button') zoom_out_button = get_obj('zoom_out_button') zoom_out_button.connect('clicked', perform_zoom, map_view.zoom_out) zoom_in_button.connect('clicked', perform_zoom, map_view.zoom_in) back_button.connect('clicked', go_back, map_view) for key in ['latitude', 'longitude', 'zoom-level']: gst.bind(key, map_view, key) accel = Gtk.AccelGroup() window = get_obj('main') window.add_accel_group(accel) for key in ['Left', 'Right', 'Up', 'Down']: accel.connect(Gdk.keyval_from_name(key), Gdk.ModifierType.MOD1_MASK, 0, move_by_arrow_keys) map_view.connect('notify::zoom-level', zoom_button_sensitivity, zoom_in_button.set_sensitive, zoom_out_button.set_sensitive) map_view.connect('realize', remember_location) map_view.connect('animation-completed', set_window_title, window.set_title, Coordinates()) map_view.emit('animation-completed')
def test_gps_math(self): """Test coordinate conversion functions.""" rats_to_fracs = lambda rats: [Fraction(rat.to_float()) for rat in rats] # Really important that this method is bulletproof self.assertFalse(valid_coords(None, None)) self.assertFalse(valid_coords('', '')) self.assertFalse(valid_coords(True, True)) self.assertFalse(valid_coords(False, False)) self.assertFalse(valid_coords(45, 270)) self.assertFalse(valid_coords(100, 50)) self.assertFalse(valid_coords([], 50)) self.assertFalse(valid_coords(45, {'grunt':42})) self.assertFalse(valid_coords(self, 50)) self.assertFalse(valid_coords(45, valid_coords)) self.assertFalse(valid_coords("ya", "dun goofed")) # St. John's broke the math. I'm not sure why. # Seriously. Revert commit 362dd6eb and watch this explode. stjohns = Coordinates() stjohns.latitude = 47.56494 stjohns.longitude = -52.70931 stjohns.lookup_geoname() self.assertEqual(stjohns.city, "St. John's") # Pick 100 random coordinates on the globe, convert them from decimal # to sexagesimal and then back, and ensure that they are always equal. for _ in range(100): # Oh, and test altitudes too altitude = round(random_coord(1000), 6) fraction = float_to_rational(altitude) self.assertAlmostEqual( abs(altitude), fraction.numerator / fraction.denominator, 3 ) decimal_lat = round(random_coord(80), 6) decimal_lon = round(random_coord(180), 6) self.assertTrue(valid_coords(decimal_lat, decimal_lon)) dms_lat = decimal_to_dms(decimal_lat) dms_lon = decimal_to_dms(decimal_lon) self.assertEqual(len(dms_lat), 3) self.assertEqual( dms_lat[0].numerator, floor(abs(decimal_lat)) ) self.assertEqual(len(dms_lon), 3) self.assertEqual( dms_lon[0].numerator, floor(abs(decimal_lon)) ) self.assertAlmostEqual( decimal_lat, dms_to_decimal(*rats_to_fracs(dms_lat) + ['N' if decimal_lat >= 0 else 'S']), 10 # equal to 10 places ) self.assertAlmostEqual( decimal_lon, dms_to_decimal(*rats_to_fracs(dms_lon) + ['E' if decimal_lon >= 0 else 'W']), 10 # equal to 10 places )