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文件。另外,這張特殊的地圖不是很高分辨率的,如果你看看海岸線,你可以看到很多半島和島嶼沒有包含多邊形,所以在這些區域可能會有一些錯誤。領海也沒有標記。我只能推薦你尋找更好的地圖或使你自己如果這造成了顯着的問題。
'http:// en.wikipedia.org/wiki/Geolocation' - 根據您的意見,我認爲您談的更多關於地理座標,而不是互聯網地址,對嗎?我將刪除地理位置標記以消除可能的混淆。 – code4life
這實際上是反向地理定位,這是它自己的標籤。但是這就是說,我不確定是否有可能緩存一堆這樣的數據,並提供這些信息而不會觸及Web服務 - 您必須保留的數據量將會是猥褻的。 – tmesser
如果您不想查詢互聯網資源,您將需要手機上的數據資源,包含映射到國家的每個可能的座標組合 - 或者只需指向地圖上與座標系對應的點你有權訪問。 –