如何快速确定多个地点是否在用户附近 - Google Places API

时间:2012-06-01 05:12:46

标签: php javascript google-places-api

我正在设计一个网络应用,我需要确定我的数据库中列出的哪些地方在用户行驶距离内。

以下是我目前正在使用的流程的广泛概述 -

  1. 通过Google地图api
  2. 获取用户当前位置信息
  3. 浏览我的数据库中的每个地方(大约100个),使用google places api检查地点是否在用户行驶距离内。我返回并使用PHP解析JSON文件,以查看给定用户坐标是否存在任何位置。
  4. 如果地点位于用户行驶距离显示顶部位置(谷歌限制为20个位置),则其他方式不显示
  5. 当我在少数几个地方跑步时,这个过程很好,但是跑100个地方要慢得多,并进行100次api通话。谷歌目前每天限制10万个电话,这可能会成为一个问题。

    那么是否有更好的方法来确定我的数据库中的哪些位置在用户驾驶距离内?我不想跟踪我的数据库中的地址,我想依靠谷歌。

    感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用此处的公式计算邮政编码之间的距离:

http://support.sas.com/kb/5/325.html

这不准确(从门到门),但您可以计算用户邮政编码到该地点邮政编码的距离。

使用此方法,您甚至不必使用Google的API。

答案 1 :(得分:-1)

我对你有一个非传统的想法。当你第一次想到它时,这将是非常非常奇怪的,因为它确实与你期望做的完全相反的顺序。但是,您可能会看到逻辑。

为了实现这一目标,您需要一大类您希望用户看到的内容。例如,我将选择“超市”。

有一个很棒的API作为google地方的一部分名为nearbySearch。它真正的奇迹是允许你按距离排名。我们将利用这一点。

的先决条件

  • 修改您的数据库并存储在NearbySearch地方返回的唯一ID。这不是针对ToS的,我们需要这个
  • 获取这些ID的列表。

计划

当您获得用户的位置时,请在附近的Search中查询您的类别,并使用以下约束循环显示结果:

  • 如果结果的ID与数据库中的某些内容匹配,则会得到该结果。奖金#1:它按距离上升排序!奖金#2:你已经获得了它的lat-loc!
  • 如果结果的ID不匹配,您可以静默跳过它或使用它并将其添加到数据库中。这意味着您可以通过很少甚至不需要手动工作来实时更新您的数据库作为额外的奖励。

当您完成请求后,您将拥有结果中从未出现过的ID。计算Google数据中最远结果的点对点距离,您将获得距您的点的最大距离。如果这个太小,请使用我描述的here技术进行复合搜索。

唯一的要求是:您需要大致了解您要搜索的内容。但是,请考虑这一点:您的正常查询周期会占用1到100个Google查询。我的方法在半径50公里时需要1。 : - )

要计算距离,顺便提一下,你需要使用Haversine的公式,而不是进行邮政编码查询。这具有真正国际化的附加优势。

重要提示

此搜索方法直接取决于您所知道的位置与距离之间的权衡。如果您正在寻找小于10千米的半径,请使用此方法仅生成一个请求。

但是,如果您必须进行复合搜索,请记住每个请求周期将花费您3N,其中N是在上一个周期生成的查询数。因此,如果您在100公里范围内只有3个位置,那么单独查找每个地方会更有意义。