在Silverlight的Bing Maps控件中,根据缩放级别更改图钉可见性

时间:2011-06-07 08:32:20

标签: .net silverlight bing-maps

所以我对在Silverlight中使用Bing Maps控件非常陌生,但我已经设法在地图上绘制了一组图钉对象(每个都有纬度/长值)。

我现在的问题是,如何根据当前缩放级别更改这些内容的可见性?

假设我在英国有10个地点,我只希望当英国在当前视图中时可见,而不是在整个世界都在视野中...

我意识到这是一个非常普遍的问题,但任何帮助都会很棒!

克里斯

2 个答案:

答案 0 :(得分:2)

您需要处理其中一个地图控件事件,例如viewchangeend或TargetViewChanged,并决定是否根据新视图缩放级别和边界框(构成新视图边界的纬度/经度)显示引脚

http://msdn.microsoft.com/en-us/library/microsoft.maps.mapcontrol.map_events.aspx

答案 1 :(得分:1)

如果您理解

,这将有所帮助
  • GeoCoordinate和Location兼容。
  • 剪裁矩形故意比地图略大,以便稍微偏离地图的点标记边缘可见,提示用户平移。

设置扩展方法。

public static class ExtensionMethods
{
  public static bool Contains(this LocationRect r, GeoCoordinate p)
  {
    double w = r.West - 0.2;
    double e = r.East + 0.2;
    double s = r.South - 0.2;
    double n = r.North + 0.2;
    return w <= p.Longitude && p.Longitude <= e && s <= p.Latitude && p.Latitude <= n;
  }
}

使用类似的表达式检查每个引脚是否在地图边界内。

map.TargetBoundingRectangle.Contains(pin.Location)

如果您的点在IEnumerable中,那么导入LINQ并且您可以使用这样的表达式一次性处理它们,这样就返回一个只包含您需要显示的引脚的集合。

pushpins.Where(pin => map.TargetBoundingRectangle.Contains(pin.Location))

在地图的ViewChangeEnd事件处理程序中执行裁剪。如果你有很多引脚,你的下一个问题的答案是“四叉树”。查一查。