2012-10-05 81 views
3

在我幼稚的開始Android頭腦中,我認爲做到這一點的方法是循環檢查每個對象是否接近X範圍內,如果包含對象。這是通過Google Maps和GeoPoints完成的。用於在給定距離內查找所有地理點的Android算法

這就是說,我知道這可能是最慢的方式。我搜索了Android Proxmity算法,並沒有真正得到很多。我所尋找的是與此相關的最佳選擇,效率更高。

有沒有我找不到的圖書館?

如果不是,我應該將這些位置對象加載到SQL中,然後從那裏去或將它們保存在JSONArray中?

一旦我建立了我的最佳數據結構,他最好的方法是找到所有位於X英里用戶的位置?

我不是要求剪切和粘貼代碼,而是最有效的方法。然後,我可以絆倒代碼:)

我的第一個直覺是按地區對地點進行分組,但我不確定如何執行此操作。

我可能有數以萬計的數據點。

任何幫助只是在正確的方向前進非常感謝。

作爲一個便箋,我發現我使用的一個遠程API是.. well ..只是PLAIN WRONG並忽略了我的鄰近搜索中的數據點。我也意識到,如果只是放在手機上的數據點上,那麼我可以允許用戶在沒有互聯網連接的情況下運行應用程序,只有GPS,這將是一個巨大的優勢。所以,所有的挫折都是機會!

+0

這個問題到底怎麼能保證在Android上沒有一個喜歡它的人時能夠投票呢?對於這個問題,Java?最近的匹配,http://stackoverflow.com/questions/9791074/android-find-all-locations-within-a-given-distance重新考慮。 –

回答

2

答案取決於GeoPoints的表示:如果這些沒有排序,您需要掃描所有這些(這是在線性時間內完成的,排序wrt。distance或clustering會更加昂貴)。使用Location.distanceTo(Location)Location.distanceBetween(float, float, float, float, float[])來計算距離。

如果GeoPoints被排序了wrt。距離你的位置這個任務可以更有效地完成,但由於供應商不知道你的位置,我認爲這是不可能完成的。

如果GeoPoints是聚類的,即如果您有一組具有某個中心和半徑的聚類,請選擇每個聚類,其中您的位置到聚類中心的距離在極限和半徑之內。對於這些羣集,您需要檢查羣集中包含的每個GeoPoint(其中一些可能距離您的位置遠遠超出限制允許的範圍)。或者,您可能會接受該錯誤幷包括集羣的所有點(如果半徑相對較小,我會推薦這一點)。

+0

好的,有道理。所以我的下一個任務是弄清楚如何在集羣上存儲這些位置。我不會問這個問題,直到我做了一些更多的研究。(但是如果我找到它,會發布鏈接!)。謝謝! –

相關問題