예제 #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
예제 #2
0
    def get(self):
        # do some analysis on the request history...
        reqs = getRequestedStops()

        # find that lat/longs for all the stops
        validStops = reqs.keys()
        stopLocs = memcache.get_multi(validStops)
        if self.request.get('clean') or stopLocs is None:
            memcache.delete_multi(validStops)
            logging.debug("logging stop locations!")
            locations = dict()
            cursor = None
            # Start a query for all stop locations
            q = StopLocation.all()
            while q is not None:
                # If the app stored a cursor during a previous request, use it.
                if cursor:
                    q.with_cursor(cursor)

                # Perform the query to get results.
                locationQuery = q.fetch(1000)
                cursor = q.cursor()
                if len(locationQuery) > 0:
                    logging.debug(
                        'just read in another chunk of stop locations...')
                    for l in locationQuery:
                        location = l.location
                        stopKey = l.stopID + ':loc'
                        if l.stopID in validStops and stopKey not in stopLocs:
                            logging.debug('adding location %s for stopID %s' %
                                          (location, l.stopID))
                            stopLocs[stopKey] = location
                else:
                    logging.debug('No more stop locations left in the query!')
                    break

        memcache.set_multi(stopLocs)
        return
예제 #3
0
파일: mapit.py 프로젝트: epaulson/SMSMyBus
    def get(self):
      # do some analysis on the request history...
      reqs = getRequestedStops()

      # find that lat/longs for all the stops
      validStops = reqs.keys()      
      stopLocs = memcache.get_multi(validStops)
      if self.request.get('clean') or stopLocs is None:
        memcache.delete_multi(validStops)
        logging.debug("logging stop locations!")
        locations = dict()
        cursor = None
        # Start a query for all stop locations
        q = StopLocation.all()
        while q is not None:
          # If the app stored a cursor during a previous request, use it.
          if cursor:
              q.with_cursor(cursor)

          # Perform the query to get results.
          locationQuery = q.fetch(1000)
          cursor = q.cursor()
          if len(locationQuery) > 0:
            logging.debug('just read in another chunk of stop locations...')
            for l in locationQuery:
                location = l.location
                stopKey = l.stopID + ':loc'
                if l.stopID in validStops and stopKey not in stopLocs:
                    #logging.debug('adding location %s for stopID %s' % (location,l.stopID))
                    stopLocs[stopKey] = location
          else:
              logging.debug('No more stop locations left in the query!')
              break
          
      memcache.set_multi(stopLocs)
      return
예제 #4
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
예제 #5
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