【问题标题】:Windows Phone how to get country by coordinates?Windows Phone如何通过坐标获取国家?
【发布时间】:2012-10-30 20:37:33
【问题描述】:

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

谢谢

【问题讨论】:

  • http://en.wikipedia.org/wiki/Geolocation - 根据您的 cmets,我认为您更多地谈论的是地理坐标,而不是互联网地址,对吗?我将删除地理位置标签以消除可能的混淆。
  • 这实际上是反向地理定位,这是它自己在 SO 上的标签。但话虽如此,我不确定是否有可能缓存大量这样的数据并在不访问网络服务的情况下提供这些信息 - 你必须保留的数据量将是淫秽的。
  • 如果您不想查询互联网资源,您将需要手机上的数据资源,其中包含所有可能的坐标组合,映射到国家/地区 - 或者通过指向一个点上的点来伪造它对应于您可以访问的坐标系的地图。
  • 那么你想为24.7 E 33 N 显示什么? 33.8 E 21.9 N? 29.5 E 47.2 N? 45 E 10 N? 21 E 42.5 N?甚至只是62.2 N 7 W
  • 您所要做的就是下载polygons of countries 并计算您的坐标属于哪一个:)

标签: c# xna coordinates reverse-geocoding country


【解决方案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 所建议的,您可以得到一个国家的多边形,并使用 point in polygon hit-test 算法来确定用户所在的国家/地区。

我编写了一个简单的类来执行此操作: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 文件。另外,这张地图的分辨率不是很高,如果你看一下海岸线,你会发现很多半岛和岛屿都没有被多边形包围,所以在这些地图中可能会有一些错误领域。领海也没有标记。我只能建议您寻找更好的地图或制作自己的如果这会造成重大问题

【讨论】:

    猜你喜欢
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多