解释题目中的问题。我想获得诸如用户是否在城市,森林中,他离河/湖/海有多远(甚至总体上离水有多远)等信息。它不一定非常精确。我可以从Windows Phone 8的位置API获取地形信息吗?
如果使用标准SDK无法实现,是否还有其他库可以帮助我获得有关当前位置的信息?
解释题目中的问题。我想获得诸如用户是否在城市,森林中,他离河/湖/海有多远(甚至总体上离水有多远)等信息。它不一定非常精确。我可以从Windows Phone 8的位置API获取地形信息吗?
如果使用标准SDK无法实现,是否还有其他库可以帮助我获得有关当前位置的信息?
1)检查水
你可以蒙混这跟技术如制作ReverseGeocodeQuery
和检查国家字段填写的第一个条目返回,至最接近的结果距离,但是这也将失败在人口稀少的地区。另一种方法是使用场所API并检查underwater
类别中最近的地方。
更好的方法是根据Map Tile API的地图图块的像素分析构建自己的二进制黑白小地图。 Map Tile API基于规范化的mercator投影,这意味着整个地球在缩放0处为一个方形,在缩放1处为2x2,在缩放2处为4x4等。因此,如果检查瓷砖左上角的颜色(和蓝色),您可以确定下一个缩放级别下方的4个像素也是蓝色。这可以用来定义一个“水”瓦:
您的最终地图将是这个样子:在迷你地图
白色像素=蓝色像素的地图瓦片的右上角放大10倍。每块瓷砖宽13公里。使用更大的地图和更高的缩放级别来获得更高的准确性。将其存储在设备上。
现在您只需检查代表输入lat/long的地图图块的像素是黑色还是白色。显然,这里的每个像素可以被编码为一个单独的位,并且您可以使用位掩码,因此您不需要占用太多内存。是
你需要分析瓷砖如下:
2)检查城区
同样,你可以用这种技术为做傻事这使ReverseGeocodeQuery
和检查城市领域填写返回的第一个条目,并且距离最近的 点。问题是你认为什么是市区?也许在这里正确的技术将是看公路密度 - 以芝加哥的这种瓷砖,例如:
这是相当明显,平均颜色瓷砖的上半部分的将比下半部分更“灰暗”。您可以分析较大区域的平均像素以制作您的位掩码。
最终的结果将是这个样子:
在迷你地图=市区白色像素。该图像的投影是错误的,但你会明白。
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
你需要谨慎使用该森林没有出现要一直呈现在不同的缩放级别。
您可以使用以下计算来查找longitude
和latitiude
的xTile
和yTile
值。显然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;
谢谢你的答案的大小是固定的,我真的很感激你中Effert,我很感激,因为应用程序,我想创造是我一直想做的事:)。我真的有这个想法,但不知道是否有可能。现在我知道了。我会将此标记为答案,因为它符合我想要做的事情。 – user1577566