def calculate_new_route(coords, max_radius, max_coords_within_radius, routefile, delete_old_route, num_procs=0): if delete_old_route and os.path.exists(routefile + ".calc"): log.debug("Deleting routefile...") os.remove(routefile + ".calc") new_route = getJsonRoute(coords, max_radius, max_coords_within_radius, num_processes=num_procs, routefile=routefile) return new_route
def calculate_new_route(self, coords, max_radius, max_coords_within_radius, routefile, delete_old_route, num_procs=0): if self._overwrite_calculation: calctype = 'quick' else: calctype = self._calctype if delete_old_route and os.path.exists(str(routefile) + ".calc"): logger.debug("Deleting routefile...") os.remove(str(routefile) + ".calc") new_route = getJsonRoute(coords, max_radius, max_coords_within_radius, num_processes=num_procs, routefile=routefile, algorithm=calctype, useS2=self.useS2, S2level=self.S2level) if self._overwrite_calculation: self._overwrite_calculation = False return new_route
def __init__(self, db_wrapper, coords, max_radius, max_coords_within_radius, path_to_include_geofence, path_to_exclude_geofence, routefile, mode=None, init=False, name="unknown", settings=None): self.db_wrapper = db_wrapper self.init = init self.name = name self._coords_unstructured = coords self.geofence_helper = GeofenceHelper(path_to_include_geofence, path_to_exclude_geofence) self._routefile = routefile self._max_radius = max_radius self._max_coords_within_radius = max_coords_within_radius self.settings = settings self.mode = mode self._is_started = False # we want to store the workers using the routemanager self._workers_registered = [] self._workers_registered_mutex = Lock() self._last_round_prio = False self._manager_mutex = RLock() self._round_started_time = None if coords is not None: if init: fenced_coords = coords else: fenced_coords = self.geofence_helper.get_geofenced_coordinates( coords) self._route = getJsonRoute(fenced_coords, max_radius, max_coords_within_radius, routefile) else: self._route = None self._current_index_of_route = 0 self._init_mode_rounds = 0 if self.settings is not None: self.delay_after_timestamp_prio = self.settings.get( "delay_after_prio_event", None) self.starve_route = self.settings.get("starve_route", False) else: self.delay_after_timestamp_prio = None self.starve_route = False # initialize priority queue variables self._prio_queue = None self._update_prio_queue_thread = None self._stop_update_thread = Event()
def __init__(self, db_wrapper, coords, max_radius, max_coords_within_radius, path_to_include_geofence, path_to_exclude_geofence, routefile, mode=None, init=False, name="unknown", settings=None): self.db_wrapper = db_wrapper self.init = init self.name = name self._coords_unstructured = coords self.geofence_helper = GeofenceHelper( path_to_include_geofence, path_to_exclude_geofence) self._routefile = routefile self._max_radius = max_radius self._max_coords_within_radius = max_coords_within_radius self.settings = settings self.mode = mode self._last_round_prio = False self._manager_mutex = Lock() self._round_started_time = None if coords is not None: if init: fenced_coords = coords else: fenced_coords = self.geofence_helper.get_geofenced_coordinates( coords) self._route = getJsonRoute( fenced_coords, max_radius, max_coords_within_radius, routefile) else: self._route = None self._current_index_of_route = 0 self._init_mode_rounds = 0 if settings is not None: self.delay_after_timestamp_prio = settings.get( "delay_after_prio_event", None) if self.delay_after_timestamp_prio == 0: self.delay_after_timestamp_prio = None self.starve_route = settings.get("starve_route", False) else: self.delay_after_timestamp_prio = None self.starve_route = False if self.delay_after_timestamp_prio is not None or mode == "iv_mitm": self._prio_queue = [] if mode != "iv_mitm": self.clustering_helper = ClusteringHelper(self._max_radius, self._max_coords_within_radius, self._cluster_priority_queue_criteria()) self._stop_update_thread = Event() self._update_prio_queue_thread = Thread(name="prio_queue_update_" + name, target=self._update_priority_queue_loop) self._update_prio_queue_thread.daemon = True self._update_prio_queue_thread.start() else: self._prio_queue = None
def __init__(self, db_wrapper: DbWrapperBase, dbm: DataManager, area_id: str, coords: List[Location], max_radius: float, max_coords_within_radius: int, path_to_include_geofence: str, path_to_exclude_geofence: str, routefile: str, mode=None, init: bool = False, name: str = "unknown", settings: dict = None, level: bool = False, calctype: str = "optimized", useS2: bool = False, S2level: int = 15, joinqueue = None): self.db_wrapper: DbWrapperBase = db_wrapper self.init: bool = init self.name: str = name self._data_manager = dbm self.useS2: bool = useS2 self.S2level: int = S2level self.area_id = area_id self._coords_unstructured: List[Location] = coords self.geofence_helper: GeofenceHelper = GeofenceHelper( path_to_include_geofence, path_to_exclude_geofence) self._routefile = os.path.join(args.file_path, routefile) self._max_radius: float = max_radius self._max_coords_within_radius: int = max_coords_within_radius self.settings: dict = settings self.mode = mode self._is_started: bool = False self._first_started = False self._current_route_round_coords: List[Location] = [] self._start_calc: bool = False self._positiontyp = {} self._coords_to_be_ignored = set() self._level = level self._calctype = calctype self._overwrite_calculation: bool = False self._stops_not_processed: Dict[Location, int] = {} self._routepool: Dict[str, RoutePoolEntry] = {} self._roundcount: int = 0 self._joinqueue = joinqueue # we want to store the workers using the routemanager self._workers_registered: List[str] = [] self._workers_registered_mutex = RLock() # waiting till routepool is filled up self._workers_fillup_mutex = RLock() self._last_round_prio = {} self._manager_mutex = RLock() self._round_started_time = None self._route: List[Location] = [] if coords is not None: if init: fenced_coords = coords else: fenced_coords = self.geofence_helper.get_geofenced_coordinates( coords) new_coords = getJsonRoute( fenced_coords, max_radius, max_coords_within_radius, routefile, algorithm=calctype) for coord in new_coords: self._route.append(Location(coord["lat"], coord["lng"])) self._current_index_of_route = 0 self._init_mode_rounds = 0 if self.settings is not None: self.delay_after_timestamp_prio = self.settings.get( "delay_after_prio_event", None) self.starve_route = self.settings.get("starve_route", False) else: self.delay_after_timestamp_prio = None self.starve_route = False # initialize priority queue variables self._prio_queue = None self._update_prio_queue_thread = None self._check_routepools_thread = None self._stop_update_thread = Event()
def __init__(self, db_wrapper: DbWrapperBase, coords: List[Location], max_radius: float, max_coords_within_radius: int, path_to_include_geofence: str, path_to_exclude_geofence: str, routefile: str, mode=None, init: bool = False, name: str = "unknown", settings: dict = None): self.db_wrapper: DbWrapperBase = db_wrapper self.init: bool = init self.name: str = name self._coords_unstructured: List[Location] = coords self.geofence_helper: GeofenceHelper = GeofenceHelper( path_to_include_geofence, path_to_exclude_geofence) self._routefile = os.path.join(args.file_path, routefile) self._max_radius: float = max_radius self._max_coords_within_radius: int = max_coords_within_radius self.settings: dict = settings self.mode = mode self._is_started: bool = False self._first_started = False self._route_queue = Queue() self._start_calc: bool = False self._rounds = {} self._positiontyp = {} self._coords_to_be_ignored = set() # we want to store the workers using the routemanager self._workers_registered: List[WorkerBase] = [] self._workers_registered_mutex = Lock() self._last_round_prio = {} self._manager_mutex = RLock() self._round_started_time = None self._route: List[Location] = [] if coords is not None: if init: fenced_coords = coords else: fenced_coords = self.geofence_helper.get_geofenced_coordinates( coords) new_coords = getJsonRoute(fenced_coords, max_radius, max_coords_within_radius, routefile) for coord in new_coords: self._route.append(Location(coord["lat"], coord["lng"])) self._current_index_of_route = 0 self._init_mode_rounds = 0 if self.settings is not None: self.delay_after_timestamp_prio = self.settings.get( "delay_after_prio_event", None) self.starve_route = self.settings.get("starve_route", False) else: self.delay_after_timestamp_prio = None self.starve_route = False # initialize priority queue variables self._prio_queue = None self._update_prio_queue_thread = None self._stop_update_thread = Event()