コード例 #1
0
    def get_closest_bus_stop(self, bus_info: CdsRouteBus):
        if not bus_info.is_valid_coords():
            return
        threshold = 0.5
        bus_stop = self.bus_stops_dict_name.get(bus_info.bus_station_)
        if bus_stop and bus_info.distance_km(bus_stop):
            return bus_stop
        elif self.now() - bus_info.last_time_ > timedelta(minutes=15):
            return self.get_nearest(bus_info.last_lat_, bus_info.last_lon_)

        bus_positions = self.last_bus_data[bus_info.name_]
        if not bus_positions:
            bus_positions.append(bus_info.get_bus_position())
        closest_on_route = self.get_closest_bus_stop_checked(
            bus_info.route_name_, bus_positions)

        if closest_on_route and bus_info.distance(
                closest_on_route) < threshold:
            return closest_on_route

        closest_stop = self.get_nearest(bus_info.last_lat_, bus_info.last_lon_)
        if closest_stop and bus_info.distance(closest_stop) < threshold:
            return closest_stop

        result = min((bus_stop, closest_on_route, closest_stop),
                     key=bus_info.distance)

        if not bus_info.bus_station_:
            self.logger.debug(f"Empty station: {bus_info.short()} {result}")

        return result
コード例 #2
0
 def bus_station(self, bus_info: CdsRouteBus):
     if not bus_info.is_valid_coords():
         self.logger.debug(f"Not valid coords {bus_info}")
         return
     result = self.get_closest_bus_stop(bus_info)
     if not result or not result.NAME_:
         self.logger.debug(f"{result} {bus_info}")
     return result and result.NAME_