我对您的服务如何运作的解释是,搭便车的徒步旅行者和司机都会说明他们当前的位置和预定的目的地,搭便车的徒步旅行者将能够根据匹配的路线/目的地请求乘车(这是一个非常酷的想法实际上)。
基于这种解释,我可能会采取以下方式来实现它。
1。创建旅程
Journey 模型将是用户希望进行的旅程。它将由许多 Waypoint 模型组成(至少 2 个,最少是起点和终点)。
Journey 和 Waypoint 之间存在一对多关系。
用户创建了一个Journey,您使用Google Maps Directions API 为其存储Waypoints。
2。定期更新用户的位置
用户最终会在航路点之间移动。当他们这样做时,您想知道他们在哪里,以便您可以更新他们的位置,以便能够在活跃用户的地图上准确地表示他们(我想您会有一个,显示各种Driver 的位置s 和Hitchhikers,类似于优步)。
3。根据相似的路标匹配用户
使用您针对驾驶员和搭便车者的路线存储的航路点数据来查找相似的路线/旅程,并就驾驶员可能接走哪些搭便车者提出建议。您甚至可以使用 API 数据,根据司机和搭便车者之间的距离来估算接送时间。
还有更多需要考虑,但这是一个相当不错的起点。
您可能需要考虑重新路由(如果用户由于道路施工而无法在某些航路点之间移动,或者他们可能转错了方向 - 想想您的 SatNav 可能如何处理它),也许能够提前计划行程等。
要真正回答您的问题,是的,如果您想为此使用 Laravel,您需要在服务器端映射路线并匹配航点。
让我们以我搭便车为例。
- 我想从 A 到 G。
- 我目前在航路点 C
-
司机 X 在另一条路线上,其中恰好有我的航路点 C、D 和 E。要查找驱动程序 X,您可以执行以下操作(伪代码):
// Find a driver with similar waypoints
Driver::withSimilarWaypoints($myJourney->remainingWaypoints())->all();
// withSimilarWaypoints scope
function scopeWithSimilarWaypoints($waypointsCollection)
{
$query->whereHas('waypoints', function ($query) use ($waypointsCollection) {
$query->where('passed', 0)->whereIn('waypoint_identifier', $waypointsCollection->pluck('waypoint_identifier'));
}
}
在这种情况下,waypoint_identifier 对我和 Driver X 来说必须相同,因此可能是航点对象的哈希值,或者您可以使用 API 返回的place_id。
您还需要确保您没有与您已经通过的航路点匹配(因此remainingWaypoints() 和where('passed', 0)。
- 预计司机 X 将在 8 分钟后到达航路点 C,所以我决定等他们(或者我可以通过应用程序请求搭车)
所有这些都应该是您服务的一个不错的起点。我非常喜欢这个主意——祝你好运!