1import argparse 2import logging 3import os 4import sys 5import six 6 7this_dir = os.path.realpath(os.path.dirname(__file__)) 8sys.path.append(os.path.realpath(os.path.join(os.pardir, os.pardir))) 9 10from geodata.address_expansions.abbreviations import abbreviate 11from geodata.coordinates.conversion import latlon_to_decimal 12from geodata.math.floats import isclose 13from geodata.osm.extract import parse_osm 14from geodata.places.reverse_geocode import PlaceReverseGeocoder 15from geodata.encoding import safe_decode 16 17 18class MetroStationReverseGeocoder(PlaceReverseGeocoder): 19 GEOHASH_PRECISION = 7 20 21 include_property_patterns = PlaceReverseGeocoder.include_property_patterns | set([ 22 'operator', 23 'network', 24 'station', 25 ]) 26 27 28if __name__ == '__main__': 29 # Handle argument parsing here 30 parser = argparse.ArgumentParser() 31 32 parser.add_argument('-m', '--osm-metro-stations-file', 33 help='Path to OSM metro stations file') 34 35 parser.add_argument('-p', '--precision', 36 type=int, 37 default=MetroStationReverseGeocoder.GEOHASH_PRECISION, 38 help='Geohash precision') 39 40 parser.add_argument('-o', '--out-dir', 41 default=os.getcwd(), 42 help='Output directory') 43 44 logging.basicConfig(level=logging.INFO) 45 46 args = parser.parse_args() 47 if args.osm_metro_stations_file: 48 index = MetroStationReverseGeocoder.create_from_osm_file(args.osm_metro_stations_file, args.out_dir, precision=args.precision) 49 else: 50 parser.error('Must specify metro stations file') 51 52 index.save() 53