【问题标题】:Get distance of MapControl border in degrees以度为单位获取 MapControl 边界的距离
【发布时间】:2016-01-09 00:53:29
【问题描述】:

我有一个 MapControl,想知道当前在 x 和 y 轴上显示了多少度数。

第一个例子:

360 度显示在 x 轴(经度)上

~90 度显示在 y 轴(纬度)上

(缩放级别为 3.2,最大缩小)

第二个例子:

~220 度 x 轴(经度)

y 轴 180 度(纬度)

(缩放级别:1.7;最大缩小)

我尝试使用以下代码计算 x 轴上的当前度数:

double dist = 360 * Math.Pow(0.5, macSurrounding.ZoomLevel - 1);

但它不起作用,因为缩放级别很奇怪......

【问题讨论】:

    标签: c# uwp windows-10-universal bing-maps uwp-maps


    【解决方案1】:

    您应该使用 MapControl 的GetLocationFromOffset 方法来计算当前地图视口的东南角和西北角点的地理坐标。视口的宽度和高度就是这些点的经纬度差。

    Geopoint northEast;
    Geopoint southWest;
    
    map.GetLocationFromOffset(new Point(map.ActualWidth, 0), out northEast);
    map.GetLocationFromOffset(new Point(0, map.ActualHeight), out southWest);
    
    var width = northEast.Position.Longitude - southWest.Position.Longitude;
    var height = northEast.Position.Latitude - southWest.Position.Latitude;
    

    【讨论】:

      【解决方案2】:

      知道了:

      经度:

      360 * Math.Pow(0.5, mcMapControl.ZoomLevel - 1) * mcMapControl.ActualWidth / 409.5;
      

      纬度:

      180 * Math.Pow(0.5, mcMapControl.ZoomLevel - 1) * mcMapControl.ActualHeight / 409.5;
      

      【讨论】:

      • 这个计算是错误的,因为它没有考虑地图投影(当然使用了可疑的魔法值409.5)。看我的回答。
      • 我在试验地图时得到了魔法值。如果我在 1000x1000 大小的地图上完全缩小,我可以看到 360 度经度和 180 度纬度,缩放级别约为 ~2.2 如果我在 409.5x409.5 大小的地图上缩小,我也可以看到 360 度和180 度,缩放级别为 1。所以我发现,缩放仅指 409.5x409.5 的中心 ^^
      猜你喜欢
      • 2014-08-29
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      相关资源
      最近更新 更多