因此,我非常習慣在Silverlight中使用Bing地圖控件,但我設法獲取圖釘對象的集合(每個圖標都帶有緯度/經度值)繪製在地圖上。根據Silverlight的Bing地圖控件中的縮放級別更改圖釘可見性
我現在的問題是,如何根據當前縮放級別更改這些可見性?
說我有分散在英國10個地點,我只希望他們看到的時候,英國是在當前視圖,而不是當整個世界都在看...
我意識到這是一個非常普遍的問題,但任何幫助將是太棒了!
克里斯
因此,我非常習慣在Silverlight中使用Bing地圖控件,但我設法獲取圖釘對象的集合(每個圖標都帶有緯度/經度值)繪製在地圖上。根據Silverlight的Bing地圖控件中的縮放級別更改圖釘可見性
我現在的問題是,如何根據當前縮放級別更改這些可見性?
說我有分散在英國10個地點,我只希望他們看到的時候,英國是在當前視圖,而不是當整個世界都在看...
我意識到這是一個非常普遍的問題,但任何幫助將是太棒了!
克里斯
你需要處理的地圖的一個控件的事件,像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事件處理程序中執行剪裁。如果你有很多針腳,你的下一個問題的答案是「四叉樹」。看看它。