Esempio n. 1
0
def nearbyStops(lat,lon,radius,routeID,direction):

    # limit the radius value to 500
    if radius > 1000:
        radius = 1000

    if routeID is None or routeID == "":
        #logging.debug('nearbyStops (%s,%s,%s,%s)' % (lat,lon,radius,routeID))
        results = StopLocation.proximity_fetch(
             StopLocation.all(),
             geotypes.Point(lat,lon),  # Or db.GeoPt
             max_results=100,
             max_distance=radius)
    else:
        if direction is not None:
            results = StopLocation.proximity_fetch(
                 StopLocation.all().filter('routeID =', routeID).filter('direction =', direction),
                 geotypes.Point(lat,lon),  # Or db.GeoPt
                 max_results=100,
                 max_distance=radius)    
        else:
            results = StopLocation.proximity_fetch(
                 StopLocation.all().filter('routeID =', routeID),
                 geotypes.Point(lat,lon),  # Or db.GeoPt
                 max_results=100,
                 max_distance=radius)    

    if results is None:
        response_dict = {'status':'0',
                         'info':'No stops found',
                        }
        return response_dict

    
    response_dict = {'status':'0',}
    stop_results = []
    stop_tracking = []
    for stop in results:
        # kind of a hack, but limit the results to one per route.
        # the query will return multiple results for each stop
        if stop.stopID not in stop_tracking:
            stop_results.append(dict({
                                'stopID':stop.stopID,
                                'intersection':stop.intersection,
                                'latitude':stop.location.lat,
                                'longitude':stop.location.lon,
                                }))
            #logging.debug('appending %s to route tracking list' % stop.stopID)
            stop_tracking.append(stop.stopID)

    response_dict.update({'stop':stop_results})
        
    return response_dict
Esempio n. 2
0
def nearbyStops(lat, lon, radius, routeID, destination):
    route_stops = None

    # limit results to 200
    max_results = 200
    # limit the radius value to 500
    if radius > 1000:
        radius = 1000

    logging.debug('nearbyStops (%s,%s,%s,%s,%s)' %
                  (lat, lon, radius, routeID, destination))
    if routeID is None or routeID == "":
        results = StopLocation.proximity_fetch(
            StopLocation.all(),
            geotypes.Point(lat, lon),  # Or db.GeoPt
            max_results=max_results,
            max_distance=radius)
    else:
        if destination is not None and destination is not "":

            destination_code = getDestinationCode(destination)
            if destination_code == -1:
                response_dict = {
                    'status': '-1',
                    'info': ('Unknown destination %s' % destination)
                }
                return response_dict
            else:
                # first filter stops by route and destination...
                logging.debug(
                    '... filter by destination for route %s and destination %s'
                    % (routeID, destination_code))
                q = db.GqlQuery(
                    'select stopID from RouteListing where route = :1 and direction = :2 order by route',
                    routeID, destination_code)
                routes = q.fetch(1000)
                route_stops = []
                for route in routes:
                    route_stops.append(route.stopID)

                results = StopLocation.proximity_fetch(
                    StopLocation.all(),
                    geotypes.Point(lat, lon),  # Or db.GeoPt
                    max_results=max_results,
                    max_distance=radius)
        else:
            # first filter stops by route and destination...
            logging.debug('... filter by destination for route %s' % routeID)
            q = db.GqlQuery('select * from RouteListing where route = :1',
                            routeID)
            routes = q.fetch(1000)
            route_stops = []
            for route in routes:
                route_stops.append(route.stopID)

            results = StopLocation.proximity_fetch(
                StopLocation.all(),
                geotypes.Point(lat, lon),  # Or db.GeoPt
                max_results=max_results,
                max_distance=radius)

    if results is None:
        response_dict = {
            'status': '0',
            'timestamp': api_utils.getLocalTimestamp(),
            'info': 'No stops found',
            'stops': []
        }
        return response_dict

    response_dict = {
        'status': '0',
        'timestamp': api_utils.getLocalTimestamp(),
    }
    stop_results = []
    stop_tracking = []
    logging.info('loop through %s results' % len(results))
    for stop in results:

        # manually apply the destination filter here because
        # the GCL query limits our ability to apply it in the
        # proximity query
        if route_stops is not None and stop.stopID not in route_stops:
            #logging.debug('filtered out %s' % stop.stopID)
            continue

        # kind of a hack, but limit the results to one per route.
        # the query will return multiple results for each stop
        if stop.stopID not in stop_tracking:

            stop_results.append(
                dict({
                    'stopID': stop.stopID,
                    'intersection': stop.intersection,
                    'latitude': stop.location.lat,
                    'longitude': stop.location.lon,
                }))
            logging.debug('appending %s to route tracking list' % stop.stopID)
            stop_tracking.append(stop.stopID)

    response_dict.update({'stop': stop_results})

    return response_dict
Esempio n. 3
0
def nearbyStops(lat,lon,radius,routeID,destination):
    route_stops = None

    # limit results to 200
    max_results = 200
    # limit the radius value to 500
    if radius > 1000:
        radius = 1000

    logging.debug('nearbyStops (%s,%s,%s,%s,%s)' % (lat,lon,radius,routeID,destination))
    if routeID is None or routeID == "":
        results = StopLocation.proximity_fetch(
             StopLocation.all(),
             geotypes.Point(lat,lon),  # Or db.GeoPt
             max_results=max_results,
             max_distance=radius)
    else:
        if destination is not None and destination is not "":

            destination_code = getDestinationCode(destination)
            if destination_code == -1 :
                response_dict = {'status' : '-1',
                                 'info' : ('Unknown destination %s' % destination)
                                }
                return response_dict
            else:
                # first filter stops by route and destination...
                logging.debug('... filter by destination for route %s and destination %s' % (routeID,destination_code))
                q = db.GqlQuery('select stopID from RouteListing where route = :1 and direction = :2 order by route', routeID, destination_code)
                routes = q.fetch(1000)
                route_stops = []
                for route in routes:
                    route_stops.append(route.stopID)

                results = StopLocation.proximity_fetch(
                     StopLocation.all(),
                     geotypes.Point(lat,lon),  # Or db.GeoPt
                     max_results=max_results,
                     max_distance=radius)
        else:
            # first filter stops by route and destination...
            logging.debug('... filter by destination for route %s' % routeID)
            q = db.GqlQuery('select * from RouteListing where route = :1', routeID)
            routes = q.fetch(1000)
            route_stops = []
            for route in routes:
                route_stops.append(route.stopID)

            results = StopLocation.proximity_fetch(
                 StopLocation.all(),
                 geotypes.Point(lat,lon),  # Or db.GeoPt
                 max_results=max_results,
                 max_distance=radius)

    if results is None:
        response_dict = {'status':'0',
                         'timestamp':api_utils.getLocalTimestamp(),
                         'info':'No stops found',
                         'stops':[]
                        }
        return response_dict


    response_dict = {'status':'0','timestamp':api_utils.getLocalTimestamp(),}
    stop_results = []
    stop_tracking = []
    logging.info('loop through %s results' % len(results))
    for stop in results:

        # manually apply the destination filter here because
        # the GCL query limits our ability to apply it in the
        # proximity query
        if route_stops is not None and stop.stopID not in route_stops:
            #logging.debug('filtered out %s' % stop.stopID)
            continue

        # kind of a hack, but limit the results to one per route.
        # the query will return multiple results for each stop
        if stop.stopID not in stop_tracking:

            stop_results.append(dict({
                                'stopID':stop.stopID,
                                'intersection':stop.intersection,
                                'latitude':stop.location.lat,
                                'longitude':stop.location.lon,
                                }))
            logging.debug('appending %s to route tracking list' % stop.stopID)
            stop_tracking.append(stop.stopID)

    response_dict.update({'stop':stop_results})

    return response_dict