Windows Phone如何通过坐标获取国家/地区?

时间:2012-10-30 20:37:34

标签: c# xna coordinates reverse-geocoding country

我目前正在为一个学校项目开发一个带有XNA / Silverlight的Windows手机的c#应用程序。 我已经能够从设备获取坐标。 但我不想要坐标,我想知道他们所在的国家。 我找到了一些能够将坐标转换为国家的网站: http://maps.google.com/maps/geo?q=47.645,122.141&output=csv&sensor=false 但我不希望用户上网向他展示,我想在我的应用程序中构建它。 那么如何在TextBlock上的应用程序中显示国家/地区?

由于

1 个答案:

答案 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文件。此外,此特定地图的分辨率不是很高,如果你看海岸线就可以看到很多半岛和岛屿都没有被多边形所包围,所以在这些地方可能会有一些错误区域。领海也没有标记。我只能建议您寻找更好的地图或制作自己的如果这会造成重大问题