def nearest(cls, lat, long, **kwargs):
"""
Search for the nearest buses from `lat` and `long`
params.
You should specify the buses to search, default is
`Buses.all()`.
@param lat: A float coercible value of latitude (eg.: -5.065533).
@param long: A float coercible value of longitude (eg.: -42.065533).
keywords params:
buses:
A list of `Stop` instance.
route:
A `Route` instance.
@return: A tuple with a `Bus` object and a `Distance`
object (see geopy.distance).
"""
if kwargs.get('buses', False):
buses = kwargs['buses']
elif kwargs.get('route', False):
buses = kwargs['route'].get_buses()
else:
buses = cls.all()
dists = map(lambda bus: distance(
# Avoid using cached location, to avoid more requests.
(bus.__lat__, bus.__long__),
(lat, long)
), buses)
return min(zip(dists, buses))[::-1]
评论列表
文章目录