def parse_stations_from_kml(filter_function=lambda a, b: True): """ Parses KML file of stations & associated data, and returns them as a dictionary """ stations = {} kml = WMTBrowser().fetch_xml_tree('file:///%s/sourcedata/tube-locations.kml' % os.getcwd()) for station in kml.findall('.//Placemark'): name = station.find('name').text.strip().replace(' Station', '') style = station.find('styleUrl').text if filter_function(name, style): coordinates = station.find('Point/coordinates').text (lon, lat) = tuple([float(c) for c in coordinates.split(',')[0:2]]) (lat, lon) = convertWGS84toOSGB36(lat, lon)[:2] (easting, northing) = LatLongToOSGrid(lat, lon) stations[name.lower()] = {'name': name, 'location_easting': str(easting), 'location_northing': str(northing), 'code': '', 'lines': '', 'inner': '', 'outer': ''} return stations
def test_geo(self): """ Unit test for geo conversion methods """ # Test co-ordinate conversions on the location of St James's Park Station wgs84 = (51.4995893, -0.1342974) osgb36 = (51.4990781, -0.1326920) easting_northing = (529600, 179500) gridref = "TQ2960079500" self.assertEqual(convertWGS84toOSGB36(*wgs84)[:2], osgb36) self.assertEqual(LatLongToOSGrid(*osgb36), easting_northing) self.assertEqual(convertWGS84toOSEastingNorthing(*wgs84), easting_northing) self.assertEqual(gridrefNumToLet(*easting_northing), gridref) # Test heading_to_direction with a series of preset values for (heading, direction) in ((0, "North"), (90, "East"), (135, "SE"), (225, "SW"),): self.assertEqual(heading_to_direction(heading), direction)