C# 贴图控制贴图大小(像素)
描述如何根据实际缩放级别获取以像素为单位的总贴图大小 公式应为: 地图宽度=地图高度=256*2^级像素 不幸的是,这似乎不适用于通用应用程序。首先,ZoomLevel属性的类型是double而不是integer(如本文示例所需)。但是,如果整数ZoomLevel为4.0(int-->4),则该公式不起作用 现在,我尝试借助MapControl.GetOffsetFromLocation方法以像素为单位获取贴图大小:C# 贴图控制贴图大小(像素),c#,win-universal-app,uwp,bing-maps,uwp-maps,C#,Win Universal App,Uwp,Bing Maps,Uwp Maps,描述如何根据实际缩放级别获取以像素为单位的总贴图大小 公式应为: 地图宽度=地图高度=256*2^级像素 不幸的是,这似乎不适用于通用应用程序。首先,ZoomLevel属性的类型是double而不是integer(如本文示例所需)。但是,如果整数ZoomLevel为4.0(int-->4),则该公式不起作用 现在,我尝试借助MapControl.GetOffsetFromLocation方法以像素为单位获取贴图大小: private double GetMapSize() {
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
表面外屏幕(比例1.0):3274px
这些结果中没有一个是文章中描述的4096px。结果是正确的,我可以处理这个问题。但对我来说,这只是一个解决办法,而且如果ZoomLevel高于大约13,GetOffsetFromLocation方法对于pE.X和pW.X返回-1(对于-90和90)。对于离实际中心更近的经度,它起作用。GetOffsetFromLocation似乎有一个最大距离。因此,当缩放级别较高时,我需要使用更接近经度的值
这并不是一个明确的解决方案。因此,我的问题是:是否有一种保存方法来获取UWP MapControl的精确地图大小(以像素为单位)?
谢谢
Maas您参考的这篇文章是几年前写的,是所有Bing地图控件中地图平铺系统的基础。但是,这适用于平铺系统,不一定适用于显示的地图。UWP控件修改其渲染方式,使其与屏幕的像素密度对齐,从而使其美观、清晰。这就是为什么在使用GetOffsetFromLocation时会看到预期贴图像素大小之间存在差异。我相信UWP控制用于计算的基本像素密度是128。Surface Pro 3的像素密度为216.33。因此,通过一点数学运算,并考虑1.5的缩放比例,我们可以看到(128*1.5)/216.33*4096=3635,这与使用方法计算的值非常接近。考虑到这一点,我估计您的外部屏幕的像素密度为4096/3274*128=160 至于:
map width = map height = 256 * 2^zoom;
这也适用于双打。旧的Bing Maps Silverlight控件也允许双缩放级别,在进行像素计算时效果良好 我会玩一玩。谢谢但是没有,我的屏幕的像素密度是91。从Windows.Graphics.Display.DisplayInformation.GetForCurrentView():表面屏幕-->LogicalDpi:144 | RawDpi:216 |比例:1.5外部屏幕-->LogicalDpi:96 | RawDpi:91 |比例:1.0