2013-10-11 95 views
0

基於我從用戶獲得的GPS座標,我想在用戶周圍查找某個半徑(以米爲單位)的遊戲。我希望該半徑是可配置的,所以它必須可以傳遞給一個函數,該函數將指定距離轉換爲十進制度的半徑。我在MongoDB中存儲用戶GPS座標和遊戲GPS座標,並使用within.center({center:[user.pos [0],user.pos [1]],radius:1};)查詢找到靠近用戶位置的遊戲。將gps座標轉換爲距離並將距離轉換爲以十進制度表示的半徑

該查詢中的radius屬性是我想要進行配置的。比方說,我想50米轉換爲半徑十進制度:

convertDistanceToRadiusDegrees('50') -> 0.123

我然後用結果從該功能爲半徑屬性的值。

我要計算用戶和每個發現遊戲之間的距離:

calcDistance(pos1, pos2) -> 50

是否有一個Node.js的模塊/ JS插件,可以一舉兩得這些功能呢?到目前爲止,我只設法找到Node.JS模塊來計算點到點之間的距離,而不是將距離以米爲單位轉換爲十進制度。

這樣的模塊是否存在?如果沒有,是否有任何模塊可以將米的半徑轉換爲十進制度?它甚至有可能嗎?

+0

有很多資源如何計算這一點,只是谷歌搜索了。爲什麼不寫你自己的模塊? –

回答

0

廣告「,在查詢半徑屬性是我想要配置什麼比方說,我想轉換50米。以十進制度數表示的半徑: convertDistanceToRadiusDegrees('50') - > 0.123 「

這是錯誤的方法,因爲1°拉蒂tude差值不等於1 *縱向差值

正確的是: 計算currentLocation和目標中心圓座標之間的距離。 要麼使用緩慢但準確的馬賽克公式,由用戶melc發佈在leafletjs API中,要麼在互聯網上搜索haverisen公式,它的一些代碼行,可以複製和粘貼。不需要附加庫。 (如果該位置與圓圈的距離小於或等於半徑,則該位置位於圓圈內)

Tr如果您可以使用該公式,如果您需要檢查每秒鐘的目標數量,則需要更努力。 (例如空間索引,以減少計算附近幾pouints)