gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:09 25 4
gpt4 key购买 nike

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

谢谢

最佳答案

1。制作自己的数据集

下载高分辨率 map ,将每个国家/地区涂成不同的颜色,然后在查找表中将这些颜色分配给各自的国家/地区。确保将 map 另存为位图 - 压缩格式会扭曲国家边缘的颜色。

要获取国家名称,请执行以下步骤:

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

此解决方案需要大量手动工作,除非您已经准备好高分辨率彩色 map 。

当然,分辨率越高越好。您可能还考虑为不同国家和国际水域绘制领海(即返回大西洋)。


2。国家的多边形

或者,如 L.B 所建议的,您可以获得一个国家多边形,并使用多边形 HitTest 中的点算法来确定用户所在的国家/地区。

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

关于c# - Windows Phone 如何通过坐标获取国家/地区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13147223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com