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
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
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