2012-04-11 21 views
2

我收集了大約60個愛爾蘭周圍電影院地理位置的地理座標,我想在我的WP7應用程序中使用它們來顯示您當前所在位置附近的電影院。如何搜索座標列表並顯示,取決於它與當前位置之間的距離? (Windows Phone 7)

我想我會把它們保存在一個XML文件中,但我不認爲這對我想要實現的功能有效,這是爲了能夠搜索整個座標列表並顯示哪個電影院出現(例如)25公里的位置。

我發現了幾個鏈接來幫助找到兩點之間的距離,以便部分不應該太差。

關於如何實現這一點的任何想法? 在此先感謝

+0

你如何目前存儲地理座標?列表?你不能迭代這個集合嗎? – 2012-04-11 15:40:26

回答

3

我創建了一個類似的服務。

首先,正如Shedal所指出的那樣,考慮在外部服務中託管這些位置,當你需要添加更多位置時,這會讓你的生活變得更加輕鬆(App Hub中的更新應用程序服務可能需要長達10天的時間,如果您需要快速修復錯誤的位置,則需要時間)

其次,一旦您加載了位置列表,您可以很容易地通過它們找到最近的電影院,您可以使用Haversine公式來計算兩個地理位置之間的距離(該公式考慮到地球是圓的而不是平的 - 不像畢達哥拉斯定理)。幸運的是,WP GeoLocation類帶有一個內置的函數,可以使用,名爲GetDistanceTo。現在

的問題,只是一個簡單的Linq查詢:

List<GeoCoordinate> cinemaLocations = new List<GeoCoordinate>(); 
GeoCoordinate myLocation = new GeoCoordinate(); 
var closestCinemas = cinemaLocations.OrderBy(s => s.GetDistanceTo(myLocation)); 
var closestCinema = closestCinemas.FirstOrDefault(); 
1

不應該不時更新電影院列表嗎?如果是這樣,我會在某個地方託管一個Web服務,並從您的應用中調用它來獲取最新的電影列表。

關於距離的計算,它只是畢達哥拉斯定理。

D = sqrt(abs(x2 - x1) + abs(y2 - y1)) 
+2

其實這不是正確的公式。一個應該使用Haversine公式 – Bip 2012-04-11 16:29:59

+0

我一致同意。但正如一個側面說明 - 它會爲在愛爾蘭尋找最接近的電影的目的做出巨大的改變嗎? – 2012-04-11 18:56:50

0

我會將它們存儲在SQL服務器中(SQL lite可以在WP7應用程序中運行)。然後,我會根據您當前的位置使用+/-值來查詢緯度和經度。現在您需要確保補償接近0度軸的位置,但這會給您一個方形區域以減少結果。一旦你有了這個,你可以迭代結果集,尋找到每個點的距離,並放棄坐在這個方塊角落的結果,創建一個結果集,該結果集具有定義的最大容差的所有方向。當然,我還沒有解決這個確切的問題(我傾向於依靠像Neo4j的空間項目,它處理這樣的東西自然而然(非常好)

相關問題