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