UWP MapControl 子项在 W10 Creators 更新后不再固定定位



Windows 10 Creators 升级(内部版本 15063)后,我的 UWP 应用中的 MapControl 子项在移动或缩放地图本身时不再固定在地图上。 从特定的缩放级别,我注意到在地图上缩放时的行为有所不同。从这一点来看,有一个视觉上的"地球"效果值得注意。很难描述,但在我看来,地图不是纯平面(2D)。

在此处查看内部版本 14393 上的所需输出,因为您可以看到雷达叠加层在移动或缩放地图时保持在同一位置: 图片:https://www.regenthetin.nl/files/desired_behaviour_v14393.gif

在内部版本 15063 上不需要的输出,叠加层随映射缓慢移动: 图片:https://www.regenthetin.nl/files/undesired_behaviour_v15063.gif

负责的代码块:

片段 1

// Add children to MapControl at specified location
var radarImgPosition = new Geopoint(new BasicGeoposition()
{
Latitude = 59.60,
Longitude = -12.00
});
RadarMap.Children.Clear();
if (RadarMap.Children.Count == 0)
{
RadarMap.Children.Add(radarImg);
MapControl.SetLocation(radarImg, radarImgPosition);
}

片段 2

private void RadarMap_ZoomLevelChanged(MapControl sender, object args)
{
Windows.Foundation.Point southWestPoint;
RadarMap.GetOffsetFromLocation(new Geopoint(new BasicGeoposition()
{
Longitude = -11.9687,
Latitude = 46.9106
}), out southWestPoint);
Windows.Foundation.Point northEastPoint;
RadarMap.GetOffsetFromLocation(new Geopoint(new BasicGeoposition()
{
Longitude = 15.5080,
Latitude = 60.0247
}), out northEastPoint);
double radarImgWidth = northEastPoint.X - southWestPoint.X;
double radarImgHeight = Math.Abs(northEastPoint.Y - southWestPoint.Y);
DisplayInformation displayInformation = DisplayInformation.GetForCurrentView();
double scaleValue = (displayInformation.RawPixelsPerViewPixel * 100.0);
radarImg.Height = (radarImgHeight) / (scaleValue / 100);
radarImg.Width = (radarImgWidth) / (scaleValue / 100);
}

我已经在其中调查了几个小时,但到目前为止还没有找到解决方案。希望有人能帮到我!

开发配置:Visual Studio 2017 i.c.m. Windows 10 Creators update SDK。

我找到了我的问题的解决方案,我觉得你的是相关的。背景:我的 MapControl 有一个 XAML 元素作为子元素,我在元素可见时设置和更改位置。这个孩子表现出与开线程器已经描述的相同的效果。

事实证明,新的MapControl(创作者更新)在定位孩子时也考虑了高度。换句话说,现在 XAML 子项位于空间中,而不是在抖动映射上。我的猜测是,这是MapControl新的伪3D效果的结果。

解决方案是通过指定地形参考系统并将高度设置为 0 来将孩子定位到表面上:

var location = new Geopoint(new BasicGeoposition
{
Latitude = currentLatitude,
Longitude = currentLongitude,
Altitude = 0 
},
AltitudeReferenceSystem.Terrain);
MapControl.SetLocation(myChild, location);

相关内容

  • 没有找到相关文章

最新更新