Ejemplo n.º 1
0
    def obtenerPuntosArea(self,request,radio):
        punto1 = Punto()
        puntosFiltrados = []
        try:
            # Se obtiene la ubicacion del cliente
            latitudOrigen = float(request.get('latitudOrigen'))
            longitudOrigen = float(request.get('longitudOrigen'))
            # se asigna la informacion al punto
            punto1.latitud = latitudOrigen
            punto1.longitud = longitudOrigen
            #Se ejecuta la consulta con los parametros obtenidos, primero se filtra la latitud
            latitudMaxima = latitudOrigen + radio
            longitudMaxima = longitudOrigen + radio
            #
            latitudMinima = latitudOrigen - radio
            longitudMinima = longitudOrigen - radio
            puntosFiltro1 = PuntoClave.query(PuntoClave.latitud <= latitudMaxima,
                                             PuntoClave.latitud >= latitudMinima).fetch(100)
            #Se aplica un segundo filtro, limitantes de Datastore (NoSQL) por razones de indices.
            puntosFiltrados = filter(
                lambda punto: punto.longitud <= longitudMaxima and punto.longitud >= longitudMinima,
                puntosFiltro1)

            return puntosFiltrados
        except Exception as e:
            logger.error("No se pudieron obtener los puntos")
            logger.error(e)
        return puntosFiltrados
Ejemplo n.º 2
0
 def obtenerPuntos(self, request):
     punto1 = Punto()
     punto2 = Punto()
     puntosFiltrados = []
     puntosOrdenadosPorTipo = []
     try:
         # Se obtiene la ubicacion del cliente
         latitudOrigen = float(request.get('latitudOrigen'))
         longitudOrigen = float(request.get('longitudOrigen'))
         # se asigna la informacion al punto
         punto1.latitud = latitudOrigen
         punto1.longitud = longitudOrigen
         #Se obtiene el punto al que el cliente desea llegar
         latitudDestino = float(request.get('latitudDestino'))
         longitudDestino = float(request.get('longitudDestino'))
         #se asigna la informacion al punto
         punto2.latitud = latitudDestino
         punto2.longitud = longitudDestino
         #Se calculan las latitudes maximas y minimas llamando al metodo generado previamente
         rangos = self.obtenerAreaDeBusqueda(punto1, punto2)
         #Se ejecuta la consulta con los parametros obtenidos, primero se filtra la latitud
         puntosFiltro1 = PuntoClave.query(PuntoClave.latitud <= rangos['latitudMaxima'],
                                          PuntoClave.latitud >= rangos['latitudMinima']).fetch(100)
         #Se aplica un segundo filtro, limitantes de Datastore (NoSQL) por razones de indices.
         puntosFiltrados = filter(
             lambda punto: punto.longitud <= rangos['longitudMaxima'] and punto.longitud >= rangos['longitudMinima'],
             puntosFiltro1)
         puntosOrdenadosPorTipo = sorted(puntosFiltrados, key=attrgetter('tipo', 'valoracion'), reverse=True)
         return puntosOrdenadosPorTipo
     except Exception as e:
         logger.error("No se pudieron obtener los puntos")
         logger.error(e)
     return puntosOrdenadosPorTipo
Ejemplo n.º 3
0
 def esPuntoSemejante(self, puntoAComparar):
     diferencia = 0.0001
     # Se generan las diferencias
     latitudMaxima = puntoAComparar.latitud + diferencia
     latitudMinima = puntoAComparar.latitud - diferencia
     longitudMaxima = puntoAComparar.longitud + diferencia
     longitudMinima = puntoAComparar.longitud - diferencia
     #Se hace la consulta 1
     listaPuntosFiltro1 = PuntoClave.query()
     listaPuntosFiltro2 = listaPuntosFiltro1.filter(PuntoClave.latitud <= latitudMaxima,
                                                    PuntoClave.latitud >= latitudMinima).fetch(100)
     #listaPuntosFiltro3 = listaPuntosFiltro2.filter(PuntoClave.longitud<=longitudMaxima,PuntoClave.longitud>=longitudMinima).fetch(1)
     listaPuntosFiltro3 = filter(lambda punto: punto.longitud >= longitudMaxima and punto.longitud <= longitudMinima,
                                 listaPuntosFiltro2)
     if len(listaPuntosFiltro3):
         return listaPuntosFiltro3[0]
     else:
         return False
Ejemplo n.º 4
0
    def get(self):
        mensajeExito = 'Guardaro Correctamente!'
        try:
            puntoAGuardar = PuntoClave()
            puntoAGuardar.latitud = float(self.request.get('latitud'))
            puntoAGuardar.longitud = float(self.request.get('longitud'))
            puntoAGuardar.tipo = int(self.request.get('tipo'))
            puntoAGuardar.valoracion = 0.0
            puntoAGuardar.numeroValoraciones = 1
            puntoEncontrado = utileria.esPuntoSemejante(puntoAGuardar)
            logger.error(puntoEncontrado)
            logger.error(puntoEncontrado)
            logger.error(puntoEncontrado)
            if not (puntoEncontrado):
                logger.error("No existe el punto, se guarda uno nuevo!!")
                puntoAGuardar.put()
            else:
                logger.error("Existe, solo se actualiza!")
                puntoEncontrado.tipo = int(self.request.get('tipo'))
                #puntoEncontrado.numeroValoraciones = puntoEncontrado.numeroValoraciones + 1
                puntoEncontrado.put()
            if bool(self.request.get('dev')):  #Si existe el parametro debug!, se genera la pagina web
                print("Guardado!!!!")
                self.response.write(
                    MAIN_PAGE.substitute(mensaje=mensajeExito, formularioACargar=GUARDAR_PUNTOS_CLAVE_FORM,
                                         formularioConsulta=OBTENER_PUNTOS_ENTRE_AREA_FORM))
            #significa que solo necesitan la respuesta en JSON, posiblemente en produccion
            else:
                mapaRespuesta = {'mensaje': 'Guardado Correctamente!'}
                self.response.headers['Content-Type'] = 'application/json'
                self.response.out.write(json.dumps(mapaRespuesta))

                #self.redirect('/test')
        except Exception as e:
            self.response.write(MAIN_PAGE.substitute(mensaje=e, formularioACargar=GUARDAR_PUNTOS_CLAVE_FORM,
                                                     formularioConsulta=OBTENER_PUNTOS_ENTRE_AREA_FORM))