def get_queryset(self): session_id = self.kwargs["session"] res = osmmanager.OsmManager().get_session_users(session_id) session_users = [] for record in res: session_user = session_user_from_record(record) # session_user.session = models.Session(id=session_id) session_users.append(session_user) return session_users
def routemates(self, request, session): session_user_id = int(request.query_params["user"]) res = osmmanager.OsmManager().get_session_users_vehicle( session_user_id) session_users = [] for record in res: session_user = session_user_from_record(record) session_users.append(session_user) serializer = self.get_serializer(instance=session_users, many=True) return Response(serializer.data)
def get_object(self): session_id = self.kwargs["session"] user_id = self.kwargs["pk"] # queryset = OsmManager().get_session_user_by_pk(user_id) record = osmmanager.OsmManager().get_session_user(session_id, user_id) if not record: raise exceptions.NoSessionUserException session_user = session_user_from_record(record) # session_user.session = models.Session(id=session_id) return session_user
def get_queryset(self): session_user_id = self.request.query_params["user"] res = osmmanager.OsmManager().get_session_plan_vehicle_route( session_user_id) edges_route = [] for record in res: edge_route = models.SessionPlanVehicleRoute(**record) edge_route.node_i_longitude = record["node_i_longitude"] edge_route.node_i_latitude = record["node_i_latitude"] edge_route.node_j_longitude = record["node_j_longitude"] edge_route.node_j_latitude = record["node_j_latitude"] edges_route.append(edge_route) return edges_route
def get_queryset(self): session_id = self.kwargs["session"] type_ = self.request.query_params["type"] activity = None if "activity" in self.request.query_params: activity = self.request.query_params["activity"] res = osmmanager.OsmManager().get_session_nodes( session_id, type_, activity) session_nodes = [] for record in res: session_node = session_node_from_record(record) session_node.session = models.Session(id=session_id) session_nodes.append(session_node) return session_nodes
def generate_graph(city, seed=None, delta_meters=5000): # Compute random bbox coordinates based on session's city. if seed is not None: np.random.seed(seed) bounds = models.CITY_BOUNDS[city] delta = delta_meters / 111111. min_lon = np.random.uniform(bounds[0], bounds[2] - delta) min_lat = np.random.uniform(bounds[1], bounds[3] - delta) max_lon = min_lon + delta max_lat = min_lat + delta # min_lat = -37.773468 # min_lon = 144.941222 # max_lat = -37.741429 # max_lon = 145.013490 # Generate network sample. osm = osmmanager.OsmManager() generator = suitability.SuitableNodeWeightGenerator() graph, hotspots, pois, _, _ = osm.generate_graph_for_bbox( min_lon, min_lat, max_lon, max_lat, generator) return graph, hotspots, pois, min_lon, min_lat, max_lon, max_lat
def join(self, request): # Retrieve the active session. active_session = SessionViewSet.active_session_exists() if not active_session: raise exceptions.NoActiveSessionExistsException serializer = self.get_serializer(active_session) # Get real users already in the session. real_session_users = models.SessionUser.objects.filter( session=active_session, user__isnull=False) # If the user who made the request is NOT in the session already AND the number of real users has been reached, # the user is NOT allowed to join the session. new_user_id = int(request.query_params["user"]) ids = {u.user.id for u in real_session_users} joined_before = new_user_id in ids if not joined_before and active_session.real_users == len( real_session_users): raise exceptions.NotAllowedToJoinSessionException # If the user who made the request is NOT in the session already, SessionUser object corresponding to this user # is created. if not joined_before: # Retrieve the User object that will be set as FK. new_user = User.objects.get(pk=new_user_id) # There must be at least one real user. Choose the first one. chosen_session_user = real_session_users[0] osm = osmmanager.OsmManager() coords = osm.get_coordinates(chosen_session_user.origin) # Origin of this new session user is close (>= MIN_DIST) to the chosen one but it is different from other # real users' origins. knn = osm.get_knn(active_session.id, coords["longitude"], coords["latitude"], len(real_session_users), MIN_DIST) origins = {u.origin for u in real_session_users} knn_ = {nn["node"] for nn in knn} temp = list(knn_.difference(origins)) assert len(temp) == 1 new_session_user = models.SessionUser(origin=temp[0], user=new_user, session=active_session) new_session_user.save() return Response(serializer.data)