C# 给定一组位置,如何确定Bing地图的适当缩放级别和地图中心?

C# 给定一组位置,如何确定Bing地图的适当缩放级别和地图中心?,c#,geolocation,bing-maps,C#,Geolocation,Bing Maps,我正在使用Bing地图开发一个Windows应用商店应用程序(C#) 我希望能够在给定位置集合(纬度和经度对)的情况下,确定地图的缩放级别以及中心点(位置) 从位置值集合中,我提取了需要显示的四个“极端”基点(最远的北、南、东和西) 旧金山,如果我想在全世界展示PuxPIN,我想得到缩放级别来显示这个城市。如果我想展示遍布美国的图钉。。。你明白了 这就是我目前所拥有的(正如您所看到的,只是一个粗略的草稿/伪代码): 确定一组位置的极端基数值(代码未显示;应该是微不足道的)。创建自定义类的实例:

我正在使用Bing地图开发一个Windows应用商店应用程序(C#)

我希望能够在给定位置集合(纬度和经度对)的情况下,确定地图的缩放级别以及中心点(位置)

从位置值集合中,我提取了需要显示的四个“极端”基点(最远的北、南、东和西)

旧金山,如果我想在全世界展示PuxPIN,我想得到缩放级别来显示这个城市。如果我想展示遍布美国的图钉。。。你明白了

这就是我目前所拥有的(正如您所看到的,只是一个粗略的草稿/伪代码):

确定一组位置的极端基数值(代码未显示;应该是微不足道的)。创建自定义类的实例:

public class GeoSpatialBoundaries
{
    public double furthestNorth { get; set; }
    public double furthestSouth { get; set; }
    public double furthestWest { get; set; }
    public double furthestEast { get; set; }
}
…然后调用这些方法,传递该实例:

// This seems easy enough, but perhaps my solution is over-simplistic
public static Location GetMapCenter(GeoSpatialBoundaries gsb)
{
    double lat = (gsb.furthestNorth + gsb.furthestSouth) / 2;
    double lon = (gsb.furthestWest + gsb.furthestEast) / 2;
    return new Location(lat, lon);
}

// This math may be off; just showing my general approach
public static int GetZoomLevel(GeoSpatialBoundaries gsb)
{
    double latitudeRange = gsb.furthestNorth - gsb.furthestSouth;
    double longitudeRange = gsb.furthestEast - gsb.furthestWest;
    int latZoom = GetZoomForLat(latitudeRange);
    int longZoom = GetZoomForLong(longitudeRange);
    return Math.Max(latZoom, longZoom);
}
var collection = new LocationCollection();
collection.Add(new Location(47.5, 2.75));
collection.Add(new Location(48.5, 2.75));
collection.Add(new Location(43.5, 5.75));
map.SetView(new LocationRect(collection));
不过,这是我真正迷路的地方。如何根据这些VAL确定要返回的缩放级别(介于1到20之间)?下面是一个非常粗略的想法(GetZoomForLat()基本相同):


是否有人有任何建议或链接可以告诉我如何实现这些功能?

您可以使用
LocationRect
类设置边界框,请参阅MSDN:

然后使用
Map
类及其
SetView()
方法,请参见MSDN:

下面是一个可以工作的代码(其中
map
是您的map控件实例):


因此,您可以使用要在集合中的地图上显示的元素的每个坐标来生成边界框并相应地设置视图。

您可以使用
LocationRect
类来设置边界框,请参见MSDN:

然后使用
Map
类及其
SetView()
方法,请参见MSDN:

下面是一个可以工作的代码(其中
map
是您的map控件实例):


因此,您可以使用要在集合中的地图上显示的元素的每个坐标来生成边界框并相应地设置视图。

您可以使用
LocationRect
类来设置边界框,请参见MSDN:

然后使用
Map
类及其
SetView()
方法,请参见MSDN:

下面是一个可以工作的代码(其中
map
是您的map控件实例):


因此,您可以使用要在集合中的地图上显示的元素的每个坐标来生成边界框并相应地设置视图。

您可以使用
LocationRect
类来设置边界框,请参见MSDN:

然后使用
Map
类及其
SetView()
方法,请参见MSDN:

下面是一个可以工作的代码(其中
map
是您的map控件实例):


因此,您可以使用要在集合中的地图上显示的元素的每个坐标来生成边界框并相应地设置视图。

我不久前在这里写了一篇关于如何执行此操作的博文:

我不久前在这里写了一篇关于如何执行此操作的博文:

我不久前写了一篇关于如何执行此操作的博文这里:

我不久前在这里写了一篇关于如何做到这一点的博文:

完美,尼古拉斯!我会尽快给你答复的。太好了,尼古拉斯!我会尽快给你答复的。太好了,尼古拉斯!我会尽快给你答复的。太好了,尼古拉斯!我会尽快给你答复的。
var collection = new LocationCollection();
collection.Add(new Location(47.5, 2.75));
collection.Add(new Location(48.5, 2.75));
collection.Add(new Location(43.5, 5.75));
map.SetView(new LocationRect(collection));