def read_routeguide_db(path):
    feature_list = []
    with open(path) as f:
        for item in json.load(f):
            feature = routeguide_pb2.Feature(
                name=item['name'],
                location=routeguide_pb2.Point(
                    latitude=item['location']['latitude'],
                    longitude=item['location']['longitude']))
            feature_list.append(feature)
    return feature_list
def run():
    channel = grpc.insecure_channel('localhost:50051')
    stub = routeguide_pb2_grpc.RouteGuideStub(channel)

    print('---------------GetFeature----------------')
    response = stub.GetFeature(
        routeguide_pb2.Point(latitude=409146138, longitude=-746188906))
    get_feature(response)
    response = stub.GetFeature(routeguide_pb2.Point(latitude=1, longitude=1))
    get_feature(response)

    print('---------------ListFeature----------------')
    response = stub.ListFeature(
        routeguide_pb2.Rectangle(
            lo=routeguide_pb2.Point(latitude=400000000, longitude=-750000000),
            hi=routeguide_pb2.Point(latitude=420000000, longitude=-730000000)))
    for feature in response:
        print('Feature called {name} at {location}'.format(
            name=feature.name, location=feature.location))

    print('---------------RecordRoute----------------')
    feature_list = routeguide_db.read_routeguide_db('routeguide_db.json')
    route_iterator = generate_route(feature_list)
    response = stub.RecordRoute(route_iterator)
    print(
        'point count: {point_count} feature count: {feature_count} distance: {distance} elapsed time:{elapsed_time}'
        .format(point_count=response.point_count,
                feature_count=response.feature_count,
                distance=response.distance,
                elapsed_time=response.elapsed_time))

    print('---------------RouteChat----------------')
    response = stub.RouteChat(generate_route_note())
    for msg in response:
        print('receive message {message} location {location}'.format(
            message=msg.message, location=msg.location))
def make_route_note(message, latitude, longitude):
    return routeguide_pb2.RouteNote(
        message=message,
        location=routeguide_pb2.Point(latitude=latitude, longitude=longitude))