コード例 #1
0
 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
コード例 #2
0
 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)
コード例 #3
0
 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
コード例 #4
0
 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
コード例 #5
0
 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
コード例 #6
0
 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
コード例 #7
0
 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)