获取地图的视图边界

时间:2014-06-28 15:22:12

标签: c# bing-maps windows-phone-8.1

我正在开发一个适用于Bing Maps的Windows Phone 8.1应用。 在渲染此地图期间,我使用TrySetViewBoundsAsync正确设置了我的自定义视图。但现在我想获取这些信息(在用户通过缩放/移动地图来更改视图之后),但我找不到任何可以帮助我的方法。

如何获取视图边界?

2 个答案:

答案 0 :(得分:4)

没有内置的方法,但可以相当容易地完成。以下是我从Microsoft Maps Spatial Toolbox project

中提取的一些代码
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;
}

答案 1 :(得分:4)

请注意,rbrundritt's solution不适用于倾斜(倾斜)视图。在这种情况下,可见区域类似于倒角梯形而不是边界框。如果地平线可见,左上角可能也不是有效位置。

对于Windows 10周年更新(版本1607),MapControl支持使用新方法GetVisibleRegion()来帮助您解决此问题。

以下内容应该返回地图的视图边界:

map.GetVisibleRegion(MapVisibleRegionKind.Full)

有关详细信息,请参阅MapControl文档。