Get view bounds of a Map

后端 未结 2 1380
無奈伤痛
無奈伤痛 2020-12-10 21:59

I\'m developing a Windows Phone 8.1 app that works with Bing Maps. During the rendering of this map I use the TrySetViewBoundsAsync to set correctly my custom

相关标签:
2条回答
  • 2020-12-10 22:14

    Note that rbrundritt's solution will not work for oblique (tilted) views. In that case, the visible region resembles more an inverted trapezoid than a bounding box. Also the top-left corner might not be a valid location if the horizon is visible.

    For Windows 10 Anniversary Update (version 1607), the MapControl supports a new method GetVisibleRegion() to help you with this.

    The following should return you the view bounds of the map:

    map.GetVisibleRegion(MapVisibleRegionKind.Full)
    

    See the MapControl documentation for more details.

    0 讨论(0)
  • 2020-12-10 22:29

    There isn't a built in method for this, however it can be done fairly easily. Here is a bit of code for this which I pulled from the 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;
    }
    
    0 讨论(0)
提交回复
热议问题