Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 贴图控制贴图大小(像素)_C#_Win Universal App_Uwp_Bing Maps_Uwp Maps - Fatal编程技术网

C# 贴图控制贴图大小(像素)

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() {

描述如何根据实际缩放级别获取以像素为单位的总贴图大小

公式应为:

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

不幸的是,这似乎不适用于通用应用程序。首先,ZoomLevel属性的类型是double而不是integer(如本文示例所需)。但是,如果整数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

表面外屏幕(比例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