让我说我想构建一个智能手机应用程序,告诉用户何时/何地下车地铁站。我可以想到两种方法:
1)使用GPS和地铁路线图,跟踪用户的位置,并在到达目的地时通知他 2)当火车开始上车时,让他按下火车开始(这可能不太现实,因为用户可能只是忘记这样做),使用从起始站到终点站的已知行程时间,并在他们何时通知他时间到了。
有人可以告诉我是否有其他好方法?感谢。
答案 0 :(得分:2)
如果地铁线路有移动电话服务(有些服务器会因安全问题而关闭),您可能会对网络位置做些什么。
您可以使用加速计来尝试检测和计算站点停靠 - 但由于前方延误,列车不时会在站点之间停止。电池寿命也会减少。编辑:意识到你无法通过减速来判断加速度,因为你不知道方向(除非你发现罗盘传感器在那个环境中可行) - 你只能看到三个加速度计的矢量和大于重力一段时间。
您可以尝试使用麦克风来检测列车电机和制动器的声音(有些是非常有特色的),但这与电池寿命和电台之间的计划外停机有同样的问题。更不用说绕过维修工作的预定站点。
也许您应该为用户提供标记旅程的可滚动列表,让他们跟踪。
答案 1 :(得分:2)
你可能不得不采用'航位推算'。基本上,航位推算是一种导航技术,它使用确定的起始位置加上准确的速度和时间来计算新位置。请记住,速度本身就是航向和速度的组合,并且航向必须是真正的航向。在飞机上,罗盘航向必须与风速和风向相结合才能获得真正的航向。我不认为你必须考虑到地铁上的漂移,但是当用户四处移动或使用设备本身时,你将不得不考虑不同的设备方向。而且,仅仅因为航向通常是指南针轴承并不意味着它必须是。您可以仅使用加速度计和计时器来完成工作。
正确使用航位推算还需要在到达已知位置时经常“重置”到已知位置,以便错误加起来不会太严重。对于这个应用,我认为曲线和停止检测可以用作重置。您可能会因为“服务”停靠点的误报而过于接近实际停靠点,但这些可能很少被忽略。事实上,如果它不是出口停止,它可能无关紧要,因为你可能仍然足够准确的下一次停止警告,如果是出口停止,它将无关紧要,因为骑行结束。
总结一下:你需要确保你有一个良好的初始起点;你需要补偿设备重定向以获得真正的标题;您需要知道航向变化之间的平均速度和航向时间,以计算航向距离。您可以通过重置已知地标来提高整体准确性。
编辑:我不知道这是否让你更接近答案,但Chris Stratton提出了一个关于加速度计矢量求和的有趣观点。是否可以准确地跟踪设备的方向,以获得可靠的与方向无关的重力矢量?你可以保留你的矢量总和吗?这可以提供有用的方向无关向量的有用加速度吗?如果是这样,那么跟踪加速的持续时间将获得该持续时间的平均速度和加速结束的最终速度。没有加速度,速度将保持不变。把这些全部放在一起可能会在不准确之处堆积不准确到无用的地步。
答案 2 :(得分:1)
这两个听起来都很糟糕。你几乎肯定不会在地铁里获得GPS踪迹。第二种方式听起来不够准确,使应用无用。
答案 3 :(得分:1)
仔细阅读Falmarri的回答。他是完全正确的,虽然他没有给你答案。那我试试吧......
如果路线没有很多曲线,那将更容易:你只需要对每个电台的纬度和经度进行硬编码,然后计算用户的位置就会很简单(只需要一点点数学就可以了。 )。如果路线有曲线,那么你还有更多工作要做,但它基本相同。
您可能想要使用一种方法来了解当前位置与车站位置之间的距离。您可以使用一些现有算法,例如Haversine formula。