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