2011-08-22 138 views
0

Trover是一款出色的應用程序:它顯示了人們上傳的發現(POI)流 - 按距離您指定的任何位置(通常是您當前的位置)排序。你越過飼料滾動,顯示的發現越遠。一個指標非常準確地告訴你目前顯示的發現有多遠(見網站截圖)。按距離當前位置排序POIs

這與大多數其他基於位置的應用程序不同,這些應用程序基於固定的區域提供結果(POI)(例如,給我半徑10公里的所有Pizzerias),可以使用單個空間數據結構(或支持SQL引擎空間數據類型)。以Trover的方式交付結果相當困難:

  • 您可以查詢任意位置的POI。給特洛弗在俄羅斯遠東的一個位置,它將發現第一個距離2000公里並且從那裏不斷增加的發現。

  • POI的結果列表不受某個空間範圍的限制。如果您在Feed中滾動得足夠長,您可能會看到位於地球另一端的發現。

  • 以上幾點要求對任何位置的POI進行半嚴格排序。事實上,您可以向下滾動並重新載入更多發現,這意味着他們可以提供已排序數據的特定部分(例如,向我提供接下來的20個發現,這些發現距離我目前的位置至少100公里)。

  • 速度很快,抓取和距離指示是即時的。發現必須預先分類。我不知道他們在數據庫中有多少發現,但它必須超過您想要特別排序的數量。

我發現這些特性相當了不起,並且很奇怪這是如何實現的。任何建議可以使用什麼樣的數據結構,算法或緩存?

回答

0

我不明白這個問題。什麼需要答案?

編輯: 他們可能會使用圖形數據庫,其中一個邊表示節點之間的距離。這樣你就可以通過附近POI的關係來獲得距離。你會計算距離並創建邊緣到附近的節點。要獲得任意點的距離,只需執行圓距計算,對於另一個節點,只需將邊緣值加起來即可表示距離(這用於獲取步行,騎車或汽車計算的情況)。加起來可能不是最接近的方式,但會給出它們似乎使用的相對指示。

+0

這是一個答案?我編輯了這個問題,希望現在更清楚。我不期望得到一個答案,更多的技術可以組合起來實現上述特點。 – fivanski

+0

這更像是一個答案!你的意思是節點是POI嗎?計算當前位置與POI之間的距離我認爲比較簡單,因爲每個POI都有經緯度。假設有許多節點,最棘手的部分就是選擇最接近當前位置的節點(POI)。如果我理解正確,你建議從最近的節點開始進行某種廣度優先搜索以找到下一個最近的節點? – fivanski

+0

你想要預先計算好它,你需要一個聰明的數據結構來存儲。 – Gustav

相關問題