models.py 文件源码

python
阅读 22 收藏 0 点赞 0 评论 0

项目:strans-pyra 作者: teresinahc 项目源码 文件源码
def traceroute(self, source, dest):
        """
        Trace a route between `source` and `dest`.

        First, find the nearest stop to `source` and the nearest to `dest`
        and try to find a common route to both. Otherwise, fallbacks searching
        for all routes of the `source` stop and `dest` stop, choosing the one
        what is nearest to the `source` or `dest`.

        @param source: a pair latitude and longitude
        @param dest: a pair latitude and longitude

        @return: a tuple like ((<source stop>, <distance to the nearest stop>),
            (<dest stop>, <distance to the nearest stop>), <route>)
        """

        sourcestop, dsrc = Stop.nearest(source[0], source[1])
        deststop, ddst = Stop.nearest(dest[0], dest[1])
        sourceroutes = sourcestop.get_routes()
        destroutes = deststop.get_routes()

        for i, j in itertools.product(sourceroutes, destroutes):
            if i == j:
                return (sourcestop, dsrc), (deststop, ddst), i

        dist, stop, route = min(
            min(
                Stop.nearest(
                    source[0],
                    source[1],
                    route=route
                )[::-1] + (route,) for route in destroutes
            ),
            min(
                Stop.nearest(
                    dest[0],
                    dest[1],
                    route=route
                )[::-1] + (route,) for route in sourceroutes
            )
        )

        sourcestop = Stop.nearest(source[0], source[1], route=route)
        deststop = Stop.nearest(dest[0], dest[1], route=route)

        return sourcestop, deststop, route
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号