如何将 Bing 地图的缩放级别设置为足够宽以显示所有图钉?

Posted

技术标签:

【中文标题】如何将 Bing 地图的缩放级别设置为足够宽以显示所有图钉?【英文标题】:How to set the zoom level of Bing Map to just wide enough to display all pushpins? 【发布时间】:2021-04-23 01:04:38 【问题描述】:

当我将大量 Pushpins 添加到 Bing 地图时,我希望缩放级别自动更新为“最适合” - 允许显示所有图钉的“最接近”视图。

我想这可以通过发现最北和最南端的纬度值以及最东端和最西端的经度值,然后以它们的平均值为中心来计算所需的缩放级别来完成.

我的想法是将GeoCoordinates 的列表传递给一个可以返回适当缩放级别的方法,并且可能是一个单独的方法来计算地图的中心点。

这两个值可以用于地图的SetView(location, ZoomLevel) 方法。

这是否已经完成,或者是否有一个 Bing 地图调用可以处理这个?

【问题讨论】:

【参考方案1】:

SetView 的重载接受位置列表并将视图设置为这些位置的边界矩形。它确保所有位置都可见;您还需要为视图矩形添加一些额外的边距,以确保所有图钉都可见。

在地图上有图钉,意味着您已经有一个位置列表,或者如果您没有,您可以轻松获取所有这些图钉的位置。

示例

假设您已按照How can I add a Bing Maps Component to my C# Winforms app? 上的步骤操作,向表单添加一个按钮并像这样处理其点击事件:

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 地图的缩放级别设置为足够宽以显示所有图钉?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 将 Bing 地图四键转换为缩放级别、x 坐标和 y 坐标?

当只有一个图钉时,如何确定 Bing 地图的正确缩放级别?

Android:如何将地图视图的缩放级别设置为当前位置周围 1 公里半径?

如何设置谷歌地图缩放级别以显示所有标记?

Google Maps API v3:如何将缩放级别和地图中心设置为用户提交的位置?

如何在谷歌地图中设置缩放级别