【发布时间】:2011-06-07 08:32:19
【问题描述】:
所以我对在 Silverlight 中使用 Bing 地图控件非常陌生,但我设法在地图上绘制了一组图钉对象(每个都有纬度/经度值)。
我现在的问题是,如何根据当前缩放级别更改这些的可见性?
假设我在英国有 10 个地点,我只希望它们在当前视图中英国时可见,而不是在整个世界都可见时...
我知道这是一个非常笼统的问题,但任何帮助都会很棒!
克里斯
【问题讨论】:
标签: .net silverlight bing-maps
所以我对在 Silverlight 中使用 Bing 地图控件非常陌生,但我设法在地图上绘制了一组图钉对象(每个都有纬度/经度值)。
我现在的问题是,如何根据当前缩放级别更改这些的可见性?
假设我在英国有 10 个地点,我只希望它们在当前视图中英国时可见,而不是在整个世界都可见时...
我知道这是一个非常笼统的问题,但任何帮助都会很棒!
克里斯
【问题讨论】:
标签: .net silverlight bing-maps
您需要处理其中一个地图控件事件,例如 viewchangeend 或 TargetViewChanged,并根据新视图缩放级别和边界框(构成新视图边界的纬度/经度)决定是否显示图钉
http://msdn.microsoft.com/en-us/library/microsoft.maps.mapcontrol.map_events.aspx
【讨论】:
如果你明白这一点会有所帮助
设置扩展方法。
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 事件处理程序中进行剪辑。如果你有很多别针,那么下一个问题的答案是“四叉树”。查一下。
【讨论】: