2012-10-30 80 views
2

我目前正在爲一個學校項目使用XNA/Silverlight開發Windows手機的c#應用程序。 我已經能夠從設備獲取座標。 但我不想座標,我想顯示他們在哪個國家。 我發現有些網站能夠將座標轉換爲國家: http://maps.google.com/maps/geo?q=47.645,122.141&output=csv&sensor=false 但我不希望用戶繼續互聯網向他展示,我想讓它在我的應用程序中構建。 那麼如何在TextBlock的應用程序中顯示國家?Windows Phone如何通過座標獲取國家/地區?

感謝

+0

'http:// en.wikipedia.org/wiki/Geolocation' - 根據您的意見,我認爲您談的更多關於地理座標,而不是互聯網地址,對嗎?我將刪除地理位置標記以消除可能的混淆。 – code4life

+0

這實際上是反向地理定位,這是它自己的標籤。但是這就是說,我不確定是否有可能緩存一堆這樣的數據,並提供這些信息而不會觸及Web服務 - 您必須保留的數據量將會是猥褻的。 – tmesser

+0

如果您不想查詢互聯網資源,您將需要手機上的數據資源,包含映射到國家的每個可能的座標組合 - 或者只需指向地圖上與座標系對應的點你有權訪問。 –

回答

1

1.請您自己的數據集

下載高分辨率地圖,油漆每一個國家到一個不同的顏色,並指定這些顏色各自國家的查找表。確保將地圖保存爲位圖 - 壓縮格式會扭曲沿着國家邊緣的顏色。

要獲得國家名稱,請按照下列步驟操作:

1. Translate geocoordinates into map coordinates 
2. Get the pixel at selected map coordinates 
3. Get country name from the lookup by getting color data from the pixel 

這種解決方案需要大量的手工操作的,除非你已經有一個高分辨率的彩色地圖準備。

當然,分辨率越高越好。您也可以考慮爲不同國家和國際水域(即 - 返回大西洋)繪製領海。


2.國家多邊形

另外,如LB建議,你可以得到國家的多邊形和多邊形使用點點擊測試算法,以確定哪些國家的用戶是在

我編寫了一個簡單的類,這樣做:pastebin link

基本上,它解析了an kml file(我用this geocommons map),並使用point in polygon answer on stackoverflow上的代碼來檢測給定座標上的哪個國家。


實例:

FileInfo kmlFile = new FileInfo("5603.kml"); 

String kmlString = ""; 
using (StreamReader sr = new StreamReader(kmlFile.OpenRead())) 
{ 
    kmlString = sr.ReadToEnd(); 
} 

Kml kml = new Kml(kmlString); 
String country = kml.GetCountryByCoordinates(18.26, 42.56); 

這將打印克羅地亞對我來說,這是該國我其實是的代碼是倉促之下(尤其是KML解析的部分),所以它可能有一些錯誤。你應該更多地測試它。


如果您需要在美國個別國家,你可以嘗試使用不同的KML文件。另外,這張特殊的地圖不是很高分辨率的,如果你看看海岸線,你可以看到很多半島和島嶼沒有包含多邊形,所以在這些區域可能會有一些錯誤。領海也沒有標記。我只能推薦你尋找更好的地圖或使你自己如果這造成了顯着的問題

相關問題