2016-07-25 47 views
1

This article描述了如何根据实际缩放级别以像素为单位获取总地图大小。MapControl地图大小(像素)

的公式应该是:

地图宽度=地图高度= 256 * 2 ^水平像素

不幸的是这似乎并没有为MapControl普遍应用的工作。首先,ZoomLevel属性的类型是double not integer(根据本文示例中的需要)。但是对于整数数字的缩放级别,即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; 
    } 

这适用于一些像素的差异,但这个问题其实并不重要。

我得到我的面临3个的结果如下(缩放级别为4.0):

面屏(规模1.5):3654px

表面外屏(规模1.0):3274px

无这些结果是4096px像文章中所述。结果是正确的,我可以与此合作。但对我来说,这只是一种解决方法,而且如果ZoomLevel高于大约13,则GetOffsetFromLocation方法为pE.X和pW.X返回-1(对于-90和90)。对于更接近经度的实际中心而言。看来GetOffsetFromLocation具有最大的距离。所以我需要使用更高的ZoomLevel时使用更接近的经度值。

这一切都不是一个明确的解决方案。所以我的问题是:有没有一种保存方法来获取UWP MapControl的精确地图大小(以像素为单位)?

谢谢!

马斯

回答

1

你引用的文章年前写的,是所有的Bing地图控件的基础地图平铺系统。但是,这是针对平铺系统的,并不一定是显示的地图。 UWP控件会修改它如何呈现与屏幕的像素密度对齐,以便它很好,清晰。这就是为什么您在使用GetOffsetFromLocation时会看到预期地图像素大小之间的差异。我相信用于计算的UWP控件基本像素密度为128. Surface Pro 3的像素密度为216.33。因此,通过一些数学运算并考虑到1.5的缩放比例,我们可以看到(128 * 1.5)/216.33*4096=3635,这更接近您使用您的方法计算的值。考虑到这一点,我估计你的外屏的像素密度3274分之4096* 128 = 160

至于:

map width = map height = 256 * 2^zoom; 

这也可与双打。旧的Bing Maps Silverlight控件允许双缩放级别,并且在进行像素计算时可以很好地工作。

+0

我会玩一点。谢谢! 但是不,我的屏幕像素密度为91。 从Windows.Graphics.Display.DisplayInformation.GetForCurrentView(): 表面屏幕 - > LogicalDpi:144 | RawDpi:216 |比例:1.5 外部屏幕 - > LogicalDpi:96 | RawDpi:91 |比例:1.0 – Maas