2013-06-26 39 views
0

我公司目前正在開展家庭活動的上市服務。在我們的CMS中,我們有兩類實體分支(我們列出的商店)和活動(特別優惠,場合等)。按距離排序,你覺得我應該怎麼做?

通常上市,我們會說這是其分行和建立關係的事件時,我們會通過事件商店搜索附近。抓住他們,並按距離排序。

現在我們的客戶希望能夠列出一個沒有分支關聯的一次性事件(例如,他們在附近的花園中心舉辦節日而不是他們的商店之一),我可以輕鬆做到這一點,我可以按距離排序。

但是我想知道的是如何結合這兩者,所以我們的應用程序之一可以去我們的API,「老兄,哪裏有10個事件接近我現在正在嗎?」和api會拉起一個最近10次事件的列表。

它應該能夠處理那些利用分行的位置以及具有其自身獨特的地理位置活動。

或者你認爲我應該存儲位置作爲自己的實體或有隱藏分支機構,地方,我們可以設置爲在事件發生的事情,但實際上並沒有顯示爲在應用程序中的一個分支:)

回答

1

如果你有你的活動和你的分支緯度/多頭可以申請haversine公式來計算近似距離,然後通過升程有序。

MySQL能夠做到這一點,如果你願意使用一個毛茸茸的查詢。谷歌地圖團隊的這個筆記給出了查詢。您不必使用Google地圖來執行此操作;您只需要每個參與地點的緯度/經度信息。

https://developers.google.com/maps/articles/phpsqlsearch_v3

編輯這是真的,如果你計算許多對地之間的距離,這是非常緩慢的。使這種操作更快的技巧是使用邊界框(球形矩形)距離限制,並將索引放在您的經度和緯度上。

看看這個:Geolocation distance SQL from a cities table

+0

:)這是我使用它工作得很好,將與這項工作加入,所以如果我有lattitude和經度兩個表。我可以加入他們並排序?我知道這是一項非常昂貴的操作。 –

+0

請參閱編輯。是的,一切都適用於連接。 –

1

MYSQL中是否有「空間數據庫」作爲spacial extension這將允許你使用他們在列「空間」的數據類型,以及構建指數,並執行各種「支持空間分析「,如多邊形相交。

不確定這是你需要的,但這可能值得調查。

+0

謝謝我會看看:) –

+0

由於某些原因,MySQL Spatial Extension對於非歐幾里得球形幾何不做任何事情。 –

+0

從我聽到的與PostGIS相比,它總是非常有限 –