我有一張包含長/緯度座標的記錄數的表格。我正在嘗試執行常見的「在X英里內顯示所有內容」類型的搜索,其中我的起點是用戶當前使用瀏覽器中的地理定位拉長/拉。使用X在軌道中找到已知點的英里數記錄
有誰知道一個有效的遠來計算我的原點,並沒有從數據庫中檢索所有的人,並通過他們循環計算距離的各種潛在目的地之間的距離?這似乎是非常低效的,因爲我們在潛在目標表中獲得越來越多的記錄。
如果有一個的Ruby/Rails東方的解決方案真棒,否則任何建議,將不勝感激。
我有一張包含長/緯度座標的記錄數的表格。我正在嘗試執行常見的「在X英里內顯示所有內容」類型的搜索,其中我的起點是用戶當前使用瀏覽器中的地理定位拉長/拉。使用X在軌道中找到已知點的英里數記錄
有誰知道一個有效的遠來計算我的原點,並沒有從數據庫中檢索所有的人,並通過他們循環計算距離的各種潛在目的地之間的距離?這似乎是非常低效的,因爲我們在潛在目標表中獲得越來越多的記錄。
如果有一個的Ruby/Rails東方的解決方案真棒,否則任何建議,將不勝感激。
退房鋼軌的思考獅身人面像搜索插件:http://freelancing-god.github.com/ts/en/geosearching.html
哇,我不知道獅身人面像可以做到這一點。我們需要在該項目的後期階段進行全文搜索,所以我打算使用獅身人面像。感謝您幫助一箭雙鵰殺死兩隻鳥。 – JoshReedSchramm 2010-07-11 16:25:47
我的榮幸,如果這有助於你解決你的問題,請考慮接受答案 – Faisal 2010-07-11 22:38:53
你應該看看你選擇的數據庫的空間擴展,Postres和Mysql都支持這些擴展。
然後,您可以看一些可用於GIS支持添加到Rails的寶石。 Geokit就是一個例子。
如果您的數據庫支持空間數據,請儘量使用它。我喜歡geokit,但我需要基於空間數據進行查詢而不是全選,並通過GIS進行過濾。我們正在運行SQL Server 2005,它不支持空間數據(2008年)。這是我必須做的:
def self.within_distance(miles, from_longitude, from_latitude)
self.scoped(:conditions => ["((DEGREES(ACOS(SIN(RADIANS(:from_latitude)) *
SIN(RADIANS(latitude)) +
COS(RADIANS(:from_latitude)) *
COS(RADIANS(latitude)) *
COS(RADIANS(:from_longitude - longitude))))) * 69.09) < :miles",
{:from_longitude => from_longitude, :from_latitude => from_latitude, :miles => miles}])
end
我希望你能倖免於把這個或類似的東西的痛苦,但到目前爲止,它一直像一個魅力。
如果你的數據庫不支持空間數據,一個簡單的可能性,以優化搜索是計算用「方格」座標表 - 設置的,比如說10英里的任意網格分辨率,找出哪些網格每個記錄正方形,並存儲該信息。然後,查詢可以說類似「其中grid_x> = 5,grid_x < = 7,grid_y> = 13,grid_y < = 15」來讓服務器進行粗略過濾,然後計算客戶端的實際距離。
......也許使用一個數據庫與GIS(!關鍵字)的支持...... – 2010-07-10 18:22:03
人,這是艱難的傑夫的答案是什麼在做一個即時修復但費薩爾真的更貼近我們的長期需求。我可以有一個拆分答案選項:-)與費薩爾去,因爲,他...他需要更多的代表,對不起傑夫。 – JoshReedSchramm 2010-07-13 15:30:02