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