本文介绍如何根据实际缩放级别获取以像素为单位的总地图大小。
公式应该是:
地图宽度 = 地图高度 = 256 * 2^level 像素
不幸的是,这似乎不适用于通用应用程序的MapControl 。首先,ZoomLevel 属性的类型是双精度而非整数(如本文示例中所需要的那样)。但是对于整数 ZoomLevel 即 4.0 (int --> 4),该公式也不起作用。
现在,我尝试借助 MapControl.GetOffsetFromLocation 方法获取以像素为单位的地图大小:
private double GetMapSize()
{
Point pW, pE;
myMap.GetOffsetFromLocation(new Geopoint(new BasicGeoposition()
{ Longitude = -90, Latitude = 0 }), out pW);
myMap.GetOffsetFromLocation(new Geopoint(new BasicGeoposition()
{ Longitude = 90, Latitude = 0 }), out pE);
return (pE.X - pW.X) * 2;
}
这适用于某些像素的差异,但这个问题实际上并不重要。
我在 Surface Pro 3 上得到以下结果(ZoomLevel 为 4.0):
曲面屏幕(比例 1.5):3654px
Surface外屏(比例1.0):3274px
这些结果都不是文章中描述的 4096 像素。结果是正确的,我可以使用它。但对我来说,这只是一种解决方法,而且如果 ZoomLevel 高于大约 13,GetOffsetFromLocation 方法为 pE.X 和 pW.X (对于 -90 和 90)返回 -1。对于更接近实际中心的经度,它可以工作。似乎 GetOffsetFromLocation 的距离最大。因此,当具有更高的 ZoomLevel 时,我需要使用更接近的经度值。
这一切都不是一个明确的解决方案。所以我的问题是:是否有保存方法来获取 UWP MapControl 的精确地图大小(以像素为单位)?
谢谢!
马斯