示例#1
0
文件: pages.py 项目: pcarioufr/maps
def loc():

    if request.method == 'GET':

        ghash = request.args.get("hash")

        try:
            count = redis_geohash.get(ghash).decode("utf-8")
        except:
            count = 0

        return jsonify({ghash: count})

    if request.method == 'POST':

        lat = request.args.get("lat")
        lon = request.args.get("lon")

        for i in range(12):

            ghash = geohash.encode(lat, lon, precision=i)
            redis_geohash.incr(ghash, 1)
            redis_geohash.expire(ghash, 3600)

        log.info("lat={}, lon={}, hash={}".format(lat, lon, ghash))

    return jsonify()
示例#2
0
def searchRides(request):
    if request.method == 'GET':
        data = request.GET.dict()
        data['user'] = request.user
        ride = Ride(**data)
        try:
            ride.full_clean()
        except Exception as e:
            return sendResponse(False, e)
        ride.startHash = geohash.encode(float(ride.startX), float(ride.startY),
                                        PRECISION)
        ride.endHash = geohash.encode(float(ride.endX), float(ride.endY),
                                      PRECISION)

        #also include rides from upto MINUTES_CUTOFF minutes ago
        ride.time = make_aware(
            ride.time) - datetime.timedelta(minutes=MINUTES_CUTOFF)

        #Neighbouring geohash blocks for start and end points
        startNeighbours = findNeighbours(ride.startHash)
        endNeighbours = findNeighbours(ride.endHash)

        #slice first PRECISION-VARY_PREC no of characters from the hash for preliminary database search
        likeStartHash = ride.startHash[:PRECISION - VARY_PREC]
        likeEndHash = ride.endHash[:PRECISION - VARY_PREC]

        #generate regex string to match
        startRegex = makeRegex(startNeighbours)
        endRegex = makeRegex(endNeighbours)

        queryRides = Ride.objects.filter(~Q(user__username=ride.user.username),
                                         startHash__startswith=likeStartHash,
                                         endHash__startswith=likeEndHash,
                                         isActive=True,
                                         time__gte=ride.time)
        queryRides = queryRides.filter(
            startHash__regex=startRegex,
            endHash__regex=endRegex).order_by('time')

        for q in queryRides:
            q.time = localtime(q.time)

        queryRides = parseRides(queryRides)

        return sendResponse(True, queryRides)
    return sendResponse(False, 'Incorrect method')
示例#3
0
def insertRide(request):
    if request.method == 'GET':
        data = request.GET.dict()
        data['user'] = request.user
        data['isActive'] = True
        ride = Ride(**data)
        try:
            ride.full_clean()
        except Exception as e:
            return sendResponse(False, e)
        ride.startHash = geohash.encode(float(ride.startX), float(ride.startY),
                                        PRECISION + 1)
        ride.endHash = geohash.encode(float(ride.endX), float(ride.endY),
                                      PRECISION + 1)
        ride.time = make_aware(ride.time)
        ride.save()
        return sendResponse(True, None)
示例#4
0
def locate(news_lst, city) :
    '''Temporary geohasher assigns random locations based on city parameter; also 
    assigns unique id's
    
    ARGS
    ---
    news_lst : list of news articles in format ...
    city (string) : collection id
    
    RETURNS
    ---
    list of news articles in format ...
    '''
    #long beach values
    if (city == "long-beach"):
        max_lat = 33.8765
        min_lat = 33.7664
        max_lon = -118.0997
        min_lon = -118.2042

    #cerritos values
    elif (city == "cerritos"):
        max_lat = 33.8879
        min_lat = 33.8459
        max_lon = -118.0287
        min_lon = -118.1085
    #
    #bellflower values
    elif (city == "bellflower"):
        max_lat = 33.9105
        min_lat = 33.8656
        max_lon = -118.1067
        min_lon = -118.1514
    #
    #lakewood values
    elif (city == "lakewood"):
        max_lat = 33.8692
        min_lat = 33.8202
        max_lon = -118.0590
        min_lon = -118.1677


    rand.seed()
    #
    for item in news_lst :
        lati = min_lat + (max_lat-min_lat)*rand.random()
        lon = min_lon + (max_lon-min_lon)*rand.random()
        ghash = geohash.encode(lati, lon, 7)
        loncoord = float(geohash.decode(ghash).lon)
        latcoord = float(geohash.decode(ghash).lat)
        item["geohash"] = ghash
        item["id"] = gen_id(item)
        item["coordinates"] = firestore.GeoPoint(latcoord, loncoord)
    return news_lst
示例#5
0
    def process(self):
        event = self.receive_message()

        for key in ['source.geolocation.', 'destination.geolocation.']:
            latitude_key = key + "latitude"
            longitude_key = key + "longitude"
            geohash_key = "extra." + key + "geohash"
            if not (latitude_key in event and longitude_key in event):
                continue
            event.add(geohash_key,
                      geohash.encode(event[latitude_key],
                                     event[longitude_key],
                                     precision=self.parameters.precision),
                      overwrite=self.parameters.overwrite)

        self.send_message(event)
        self.acknowledge_message()
 def __persist_charge_state(self, vehicle):
     # get the charge_state: this contains battery information
     try:
         charge_state = vehicle.get_charge_state()
         self.__telegrafClient.metric('battery_level',
                                      charge_state['battery_level'],
                                      tags={
                                          'vehicleID':
                                          str(vehicle.get_vehicleID()),
                                          'vehicle_name':
                                          vehicle.get_vehicle_name()
                                      })
         self.__telegrafClient.metric('battery_range',
                                      charge_state['ideal_battery_range'],
                                      tags={
                                          'vehicleID':
                                          str(vehicle.get_vehicleID()),
                                          'vehicle_name':
                                          vehicle.get_vehicle_name()
                                      })
         if (charge_state['charging_state'].upper() == 'Charging'.upper()):
             location = geohash.encode(charge_state['latitude'],
                                       charge_state['longitude'], 7)
             logging.info(
                 str(datetime.datetime.now()) +
                 '==> Charging on location: ' + location +
                 ' with value : ' +
                 str(charge_state['charge_energy_added']))
             self.__telegrafClient.metric(
                 'charge_energy_added',
                 charge_state['charge_energy_added'],
                 tags={
                     'vehicleID': str(vehicle.get_vehicleID()),
                     'vehicle_name': vehicle.get_vehicle_name(),
                     'location': location
                 })
     except Exception as e:
         logging.error(
             str(datetime.datetime.now()) +
             '==> PersistTimeSeries.__persist_charge_state ==> failed ' +
             str(e))
示例#7
0
def geohash(lat_lon=Tuple[float, float]) -> str:
    return gh.encode(*lat_lon, PRECISION)


# end::GEOHASH[]
示例#8
0
def geohash(lat_lon: Coordinate) -> str:
    return gh.encode(*lat_lon, PRECISION)
示例#9
0
def test_encode():
    assert geohash.encode('68', '-23', 1) == 'g'
    assert geohash.encode('70.3', '-28', 2) == 'gk'
    assert geohash.encode('70.2995', '-27.9993', 7) == 'gkkpfve'
示例#10
0
def geohash(lat_lon: tuple[float, float]) -> str:
    return gh.encode(*lat_lon, PRECISION)