簡體   English   中英

如何快速確定用戶附近是否有多個地點-Google Places API

[英]How to quickly determine if multiple places are within users vicinity - Google Places API

我正在設計一個Web應用程序,需要確定數據庫中列出的哪些位置在用戶駕車距離內。

這是我當前正在使用的過程的大致概述-

  1. 通過Google的地圖API獲取用戶當前位置
  2. 使用Google Places API在我的數據庫中的每個位置(大約100個)中運行,檢查該位置是否在用戶駕車距離內。 我返回並使用PHP解析JSON文件,以查看在給定用戶坐標的情況下是否存在任何位置。
  3. 如果地點在用戶駕車距離中顯示的最高位置(由Google地點限制為20個),否則不顯示

當我在少數幾個地方運行時,此過程可以正常工作,但在100個地方運行會很慢,並且會進行100次api調用。 鑒於Google當前每天限制100,000個通話,這可能會成為一個難題。

因此,是否有更好的方法來確定數據庫中哪些位置在用戶駕車距離內? 我不想跟蹤數據庫中的地址,因此我想依靠Google。

謝謝。

您可以使用此處找到的公式來計算郵政編碼之間的距離:

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

這是不精確的(從門到門),但是您可以計算從用戶的郵政編碼到位置的郵政編碼的距離。

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

我對你有一個非常規的想法。 當您第一次考慮它時,這將非常非常奇怪,因為它的執行順序與您期望的相反 但是,您可能會看到邏輯。

為了將其付諸實踐,您需要用戶希望看到的各種內容。 例如,我要去“超市”。

作為google地方的一部分,有一個很棒的API,名為附近搜索。 它的真正奇跡是允許您按距離對地點進行排名。 我們將利用這一點。

先決條件

  • 修改數據庫並存儲在附近的搜索位置返回的唯一ID。 這不符合服務條款,我們需要這個
  • 獲取這些ID的列表。

計划

當您獲得用戶的位置時,查詢附近搜索您的類別,並在具有以下約束的情況下循環搜索結果:

  • 如果結果的ID與您數據庫中的某項匹配,則您具有該結果。 獎金1:按距離遞增排序! 紅利#2:您已經獲得了最佳位置!
  • 如果結果的ID不匹配,則可以靜默跳過它或使用它並將其添加到數據庫中。 這意味着您幾乎可以即時更新數據庫,而幾乎不需要人工就可以增加額外的好處。

完成請求后,您將獲得從未出現在結果中的ID。 計算Google數據中最遠結果的點對點距離,您到點的最大距離。 如果這個值太小,請使用我在此介紹的技術進行復合搜索。

唯一的要求是: 您需要大致了解要搜索的內容 但是,請考慮以下因素:您的正常查詢周期會帶您1到100個Google查詢之間的任意位置。 對於50公里半徑,我的方法需要1。 :-)

要計算距離,順便說一句,您將需要Haversine的公式,而不是進行郵政編碼查找。 這具有真正國際化的額外優勢。

重要警告

這種搜索方法直接取決於您所知道的位置和距離之間的權衡。 如果您正在尋找半徑小於10公里的半徑,請使用此方法僅生成一個請求。

但是,如果您必須進行復合搜索,請記住,每個請求周期將花費3N,其中N是上一個周期生成的查詢數。 因此,如果您在100公里半徑內只有3個位置,則更有意義的是分別查找每個位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM