使用MapControl的UWP App中的迷你总览图

时间:2018-06-28 15:41:02

标签: c# dictionary uwp mercator

我正在尝试构建一个与完整MapControl视图同步的小型概述/方向图,例如:(Full Screenshot

this picture

我在尝试根据MapControl的大小,位置和缩放来计算迷你地图内部的红色小矩形的宽度,高度和位置时遇到了麻烦。

应与MapControl的视图同步,单击小地图也应更改MapControl的CenterPoint。

完整地图是UWP中的MapControl,迷你地图只是静态图像上的Border UIElement。

我正在使用以下公式。它们有效,但不准确。误差幅度非常明显,特别是对于大缩放。

用于计算红色矩形的位置和大小:

var positions = MapControl.GetVisibleRegion(MapVisibleRegionKind.Near).Positions.ToArray();
var topLeft = positions[0];
var bottomLeft = positions[1];
var topRigt = positions[2];

//Transfering the Longitude system from [-180, 180] to [0, 360]
var centerX = (MapControl.Center.Position.Longitude + 180) * (SmallMapWidth / 360);

//Transfering the Latitude system from [-90, 90] to [0, 180]
var centerY = (-MapControl.Center.Position.Latitude + 90) * (SmallMapHeight / 180);

var topLeftX = topLeft.Longitude + 180;
var topRightX = topRigt.Longitude + 180;

//MapControl wraparound by default. In that case, the topRightX might be smaller than topLeftX, as it will start from the 'beginning'.   
var deltaX = Math.Abs(topLeftX - (topLeftX < topRightX ? topRightX : 360 - topRightX));

//The width of the red rectangle
SmallMapViewPortWidth = Math.Abs(deltaX) * (SmallMapWidth / 360);

//The height of the red rectangle
SmallMapViewPortHeight = Math.Abs(topLeft.Latitude - bottomLeft.Latitude) * (SmallMapHeight / 180);

//The center point of the red rectangle.
RedRectangleCenterPoint = (centerX - SmallMapViewPortWidth / 2, centerY - SmallMapViewPortHeight / 2);

以下内容用于将MapControl导航到在概览地图上单击的点。 X Y 是相对于总览图单击的点。

var lon = 360 * x / SmallMapWidth - 180;
var lat = 90 - 180 * y / SmallMapHeight;

我的计算出了什么问题?为什么会有相当明显的错误余量?

1 个答案:

答案 0 :(得分:0)

问题实际上是我用于方向图的图像。一旦我开始使用适当的Bing Maps图像,此问题就解决了。

似乎有一个官方API,可根据Bing Maps的投影来渲染不同大小的图像 https://docs.microsoft.com/en-us/bingmaps/rest-services/imagery/get-a-static-map