我可以从Windows Phone 8中的位置API获取地形信息吗?

时间:2014-01-19 12:39:26

标签: windows-phone-8 here-api

从标题中解释问题。我想获得一些信息,例如用户是否在城市,森林,他离河流/湖泊/海洋有多远(甚至一般来说他离水有多远)。它不一定非常精确。

如果标准SDK无法实现,是否还有其他库可以帮助我获取有关当前位置的信息?

1 个答案:

答案 0 :(得分:1)

1)检查水

您可以使用诸如ReverseGeocodeQuery之类的技巧来捏造这一点,并检查返回的第一个条目中填写的国家字段以及距离最近结果的距离,但是在人口稀少的区域中也会失败。另一种方法是使用places API并检查underwater类别中最近的位置。

更好的技术是根据Map Tile API的地图图块的像素分析构建自己的二进制黑白小地图。 Map Tile API基于标准化的墨卡托投影,这意味着整个球体在缩放0时为一个正方形,在缩放1处为2x2,在缩放2处为4x4等。因此,如果您检查拼贴的左上角的颜色(它的蓝色)您可以确定下一个缩放级别下面的4个像素也将是蓝色。这可用于定义“水”瓦片:

您的最终地图将如下所示:

Ocean

迷你地图中的白色像素=缩放10处地图图块右上角的蓝色像素。每个图块宽13公里。使用更大的地图和更高的缩放级别可以获得更高的准确性。将其存储在设备上。

现在您需要做的就是检查输入lat / long处的地图图块的像素是黑色还是白色。显然,这里的每个像素都可以编码为一个单独的位,你可以使用位掩码,这样你就不需要占用太多内存。

您需要分析的图块如下:

http://1.aerial.maps.cit.api.here.com/maptile/2.1/basetile/newest/terrain.day/zoom/column/row/128/png8?app_id=AppID&app_code=AppCode

enter image description here

2)检查市区

再次,您可以使用诸如制作ReverseGeocodeQuery之类的技巧来捏造这一点,并检查返回的第一个条目中的城市字段以及距离最近的距离 点。问题是你认为什么是城市地区?也许正确的技术是看道路密度 - 以芝加哥的这块瓷砖为例:

http://1.base.maps.cit.api.here.com/maptile/2.1/basetile/newest/normal.day.grey/zoom/column/row/128/png8?app_id=AppID&app_code=AppCode

enter image description here

很明显,瓷砖上半部分的平均颜色将比下半部分更“灰色”。您可以分析较大区域的平均像素,以制作位掩码。

最终结果将如下所示:

enter image description here

迷你地图中的白色像素=市区。此图像的投影是错误的,但您会明白这一点。

3)检查森林。

这可能是普通基本地图图块上的“绿色像素”检查: http://1.base.maps.cit.api.here.com/maptile/2.1/xbasetile/newest/normal.day//zoom/column/row/128/png8?app_id=AppID&app_code=AppCode

enter image description here

你需要小心这个森林看起来不会在不同的缩放级别上一致地呈现。

您可以使用以下计算来查找xTileyTile中的longitudelatitiude值。显然zoom将根据迷你地图的大小来修复

latRad = lat * Math.PI / 180;
n = Math.pow(2, z);
xTile = n * ((lon + 180) / 360);
yTile = n * (1-(Math.log(Math.tan(latRad) + 1/Math.cos(latRad)) /
Math.PI)) / 2;