Uber:Filter driver location

在Uber设计查询周围司机的时候, 我们是先用google S2/Geohash的表找出来所有可能的司机列表 然后再用司机最新的经纬度数据去filter一遍。 想请问下 filter的时候 经纬度是二维数据, 数据库里 具体是怎么操作去filter的?

不是在数据库层面做的。有了附近的司机列表之后,我们去拿每个司机的经纬度,并且计算这个司机与乘客的距离以及到达乘客的时间,选出合适的司机即可。

老师啊,拿到司机的经纬度和乘客的经纬度后,怎么计算距离 and ETA?

  1. How to compensate for mountains, rivers, …?
  2. What if we want to select a driver whose home is close to the destination of the customer?

Thanks,

这个问题不是这道题的设计范围,计算 ETA 需要考虑路网的结构,比较简单的话可以用 Dijkstra Algorithm。实际 Google Map 实现的话会复杂很多,考虑到交通情况等等。Uber 实际上也是部分用 Google Map 的 API 做的。