所以我对在Silverlight中使用Bing Maps控件非常陌生,但我已经设法在地图上绘制了一组图钉对象(每个都有纬度/长值)。
我现在的问题是,如何根据当前缩放级别更改这些内容的可见性?
假设我在英国有10个地点,我只希望当英国在当前视图中时可见,而不是在整个世界都在视野中...
我意识到这是一个非常普遍的问题,但任何帮助都会很棒!
克里斯
答案 0 :(得分:2)
您需要处理其中一个地图控件事件,例如viewchangeend或TargetViewChanged,并决定是否根据新视图缩放级别和边界框(构成新视图边界的纬度/经度)显示引脚
http://msdn.microsoft.com/en-us/library/microsoft.maps.mapcontrol.map_events.aspx
答案 1 :(得分:1)
如果您理解
,这将有所帮助设置扩展方法。
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事件处理程序中执行裁剪。如果你有很多引脚,你的下一个问题的答案是“四叉树”。查一查。