我正在设计一个网络应用,我需要确定我的数据库中列出的哪些地方在用户行驶距离内。
以下是我目前正在使用的流程的广泛概述 -
当我在少数几个地方跑步时,这个过程很好,但是跑100个地方要慢得多,并进行100次api通话。谷歌目前每天限制10万个电话,这可能会成为一个问题。
那么是否有更好的方法来确定我的数据库中的哪些位置在用户驾驶距离内?我不想跟踪我的数据库中的地址,我想依靠谷歌。
感谢。
答案 0 :(得分:0)
您可以使用此处的公式计算邮政编码之间的距离:
http://support.sas.com/kb/5/325.html
这不准确(从门到门),但您可以计算用户邮政编码到该地点邮政编码的距离。
使用此方法,您甚至不必使用Google的API。
答案 1 :(得分:-1)
我对你有一个非传统的想法。当你第一次想到它时,这将是非常非常奇怪的,因为它确实与你期望做的完全相反的顺序。但是,您可能会看到逻辑。
为了实现这一目标,您需要一大类您希望用户看到的内容。例如,我将选择“超市”。
有一个很棒的API作为google地方的一部分名为nearbySearch。它真正的奇迹是允许你按距离排名。我们将利用这一点。
当您获得用户的位置时,请在附近的Search中查询您的类别,并使用以下约束循环显示结果:
当您完成请求后,您将拥有结果中从未出现过的ID。计算Google数据中最远结果的点对点距离,您将获得距您的点的最大距离。如果这个太小,请使用我描述的here技术进行复合搜索。
唯一的要求是:您需要大致了解您要搜索的内容。但是,请考虑这一点:您的正常查询周期会占用1到100个Google查询。我的方法在半径50公里时需要1。 : - )
要计算距离,顺便提一下,你需要使用Haversine的公式,而不是进行邮政编码查询。这具有真正国际化的附加优势。
此搜索方法直接取决于您所知道的位置与距离之间的权衡。如果您正在寻找小于10千米的半径,请使用此方法仅生成一个请求。
但是,如果您必须进行复合搜索,请记住每个请求周期将花费您3N,其中N是在上一个周期生成的查询数。因此,如果您在100公里范围内只有3个位置,那么单独查找每个地方会更有意义。