获取Map的视图边界

本文关键字:边界 视图 Map 获取 | 更新日期: 2023-09-27 18:10:43

我正在开发一款与必应地图兼容的Windows Phone 8.1应用程序。在渲染这张地图的过程中,我使用TrySetViewBoundsAsync来正确设置我的自定义视图。但是现在我想获得这些信息(在用户通过缩放/移动地图改变视图之后),但我找不到任何方法可以帮助我。

如何获得视图边界?

获取Map的视图边界

没有内置的方法,但是可以很容易地完成。以下是我从微软地图空间工具箱项目中提取的一些代码:

public static GeoboundingBox GetBounds(this MapControl map)
{
    Geopoint topLeft = null;
    try
    {
        map.GetLocationFromOffset(new Windows.Foundation.Point(0, 0), out topLeft);
    }
    catch
    {
        var topOfMap = new Geopoint(new BasicGeoposition()
        {
            Latitude = 85,
            Longitude = 0
        });
        Windows.Foundation.Point topPoint;
        map.GetOffsetFromLocation(topOfMap, out topPoint);
        map.GetLocationFromOffset(new Windows.Foundation.Point(0, topPoint.Y), out topLeft);
    }
    Geopoint bottomRight = null;
    try
    {
        map.GetLocationFromOffset(new Windows.Foundation.Point(map.ActualWidth, map.ActualHeight), out bottomRight);
    }
    catch
    {
        var bottomOfMap = new Geopoint(new BasicGeoposition()
        {
            Latitude = -85,
            Longitude = 0
        });
        Windows.Foundation.Point bottomPoint;
        map.GetOffsetFromLocation(bottomOfMap, out bottomPoint);
        map.GetLocationFromOffset(new Windows.Foundation.Point(0, bottomPoint.Y), out bottomRight);
    }
    if (topLeft != null && bottomRight != null)
    {
        return new GeoboundingBox(topLeft.Position, bottomRight.Position);
    }
    return null;
}

请注意,rbrundritt的解决方案不适用于倾斜视图。在这种情况下,可见区域更像一个倒梯形,而不是一个边界框。另外,如果地平线是可见的,左上角可能不是一个有效的位置。

对于Windows 10周年更新(版本1607),MapControl支持一个新的方法GetVisibleRegion()来帮助您完成此操作。

下面的代码将返回映射的视图边界:

map.GetVisibleRegion(MapVisibleRegionKind.Full)

查看MapControl文档了解更多细节