如何将 Bing 地图的缩放级别设置为刚好足以显示所有图钉?
How to set the zoom level of Bing Map to just wide enough to display all pushpins?
当我向 Bing 地图添加一系列 Pushpins
时,我希望缩放级别自动更新为“最适合”- 允许所有的“最接近”视图要显示的图钉。
我想这将通过发现最北和最南的纬度值以及最东和最西的经度值,然后以平均值为中心来计算所需的缩放级别来完成其中
我的想法是将 GeoCoordinates
的列表传递给一个方法,该方法将 return 适当的 ZoomLevel,并且可能是一个单独的方法来计算地图的中心点。
这两个值随后可用于地图的 SetView(location, ZoomLevel)
方法。
这已经完成了吗,或者是否有一个 Bing 地图调用可以处理这个?
有一个 SetView 的重载,它接受位置列表并将视图设置为这些位置的边界矩形。它确保所有位置都可见;您还需要向视图矩形添加一些额外的边距,以确保所有图钉都可见。
在地图上有图钉,意味着您已经有一个位置列表,或者如果您没有,您可以轻松获得所有这些图钉的位置。
例子
假设您已按照 中的步骤操作,向表单添加一个按钮并像这样处理其点击事件:
private void button1_Click(object sender, EventArgs e)
{
var map = this.userControl11.myMap;
//Locations
var locations = new[] {
new Location(47.6424, -122.3219),
new Location(47.8424, -122.1747),
new Location(47.67856, -122.130994)};
//Add Pushpins
locations.Select(x => new Pushpin() { Location = x })
.ToList().ForEach(x => { map.Children.Add(x); });
//Margin
var w = new Pushpin().Width;
var h = new Pushpin().Height;
var margin = new Thickness(w / 2, h, w / 2, 0);
//Set view
map.SetView(locations, margin, 0);
}
这是结果:
注意:如果您没有位置列表,但地图上只有几个图钉,那么您可以轻松获得这样的位置:
var map = this.userControl11.myMap;
var locations = map.Children.OfType<Pushpin>().Select(x => x.Location);
当我向 Bing 地图添加一系列 Pushpins
时,我希望缩放级别自动更新为“最适合”- 允许所有的“最接近”视图要显示的图钉。
我想这将通过发现最北和最南的纬度值以及最东和最西的经度值,然后以平均值为中心来计算所需的缩放级别来完成其中
我的想法是将 GeoCoordinates
的列表传递给一个方法,该方法将 return 适当的 ZoomLevel,并且可能是一个单独的方法来计算地图的中心点。
这两个值随后可用于地图的 SetView(location, ZoomLevel)
方法。
这已经完成了吗,或者是否有一个 Bing 地图调用可以处理这个?
有一个 SetView 的重载,它接受位置列表并将视图设置为这些位置的边界矩形。它确保所有位置都可见;您还需要向视图矩形添加一些额外的边距,以确保所有图钉都可见。
在地图上有图钉,意味着您已经有一个位置列表,或者如果您没有,您可以轻松获得所有这些图钉的位置。
例子
假设您已按照
private void button1_Click(object sender, EventArgs e)
{
var map = this.userControl11.myMap;
//Locations
var locations = new[] {
new Location(47.6424, -122.3219),
new Location(47.8424, -122.1747),
new Location(47.67856, -122.130994)};
//Add Pushpins
locations.Select(x => new Pushpin() { Location = x })
.ToList().ForEach(x => { map.Children.Add(x); });
//Margin
var w = new Pushpin().Width;
var h = new Pushpin().Height;
var margin = new Thickness(w / 2, h, w / 2, 0);
//Set view
map.SetView(locations, margin, 0);
}
这是结果:
注意:如果您没有位置列表,但地图上只有几个图钉,那么您可以轻松获得这样的位置:
var map = this.userControl11.myMap;
var locations = map.Children.OfType<Pushpin>().Select(x => x.Location);