2017-07-05 65 views
1

我正在使用Bing的流量圖圖層顯示Bing地圖上的流量情況。目前這隻在刷新瀏覽器時纔會更新。有沒有簡單的方法來更新這個生活?也許有一個計時器?我無法在構造函數中設置計時器,也無法找到我目前正在做什麼的替代方法。更新/刷新Bing的流量覆蓋圖

TrafficTileSource.cs

using Microsoft.Maps.MapControl; 
using Microsoft.Maps.MapControl.Core; 
using System; 

namespace MR.CommandBridge.VEMap.MapExtensions 
{ 
    public class TrafficTileSource : TileSource 
    { 
     public TrafficTileSource() 
      : base("http://t0.tiles.virtualearth.net/tiles/t{0}.png") 
     { 
     } 

     public override Uri GetUri(int x, int y, int zoomLevel) 
     { 
      var quadKey = new QuadKey(x, y, zoomLevel); 
      return new Uri(String.Format(this.UriFormat, quadKey.Key)); 
     } 
    } 
} 

這是唯一的代碼,我不得不添加創建我的地圖交通層,我只使用一個開關按鈕別處打開和關閉它。但我希望它在打開時定期更新。任何幫助都會很棒。我只是不確定最好的方式去做這件事。我不是在要求代碼,而是在要求這個概念,但是如果你想提供的代碼會很棒!

+0

您是否嘗試刪除並重新添加層? – Marco

+0

我曾想過這樣做,但我一直無法找到任何有關如何去做的信息。 – Tony

回答

0

最簡單的解決方案是在特定的時間間隔內刪除和添加圖層,並添加額外的參數以避免在客戶端擁有緩存。

在你的情況,你的實現可能看起來像:

using Microsoft.Maps.MapControl; 
using Microsoft.Maps.MapControl.Core; 
using System; 

namespace MR.CommandBridge.VEMap.MapExtensions 
{ 
    public class TrafficTileSource : TileSource 
    { 
     public TrafficTileSource() 
      : base("http://t0.tiles.virtualearth.net/tiles/t{0}.png?time={1}") 
     { 
     } 

     public override Uri GetUri(int x, int y, int zoomLevel) 
     { 
      var quadKey = new QuadKey(x, y, zoomLevel); 
      return new Uri(String.Format(this.UriFormat, quadKey.Key, DateTime.Now.Ticks)); 
     } 
    } 
} 

您還可以使用模運算符使用緩存一定的時間或採取的日期時間格式的利潤。

此外,最後一個技巧是避免在url中只使用t0,您應該在字符串格式中添加一個額外的參數,以便您可以在服務器之間切換以負載平衡您的使用情況。

最終代碼應該是這樣的:

using Microsoft.Maps.MapControl; 
using Microsoft.Maps.MapControl.Core; 
using System; 

namespace MR.CommandBridge.VEMap.MapExtensions 
{ 
    public class TrafficTileSource : TileSource 
    { 
     public TrafficTileSource() 
      : base("http://ecn.t{0}.tiles.virtualearth.net/tiles/t{1}.png?time={2}") 
     { 
     } 

     public override Uri GetUri(int x, int y, int zoomLevel) 
     { 
      var quadKey = new QuadKey(x, y, zoomLevel); 
      return new Uri(
       String.Format(
        this.UriFormat, 
        quadKey.Key[quadKey.Key.Length - 1] 
        quadKey.Key, 
        DateTime.Now.ToString("g", System.Globalization.DateTimeFormatInfo.InvariantInfo))); 
     } 
    } 
} 
+0

注意:我沒有檢查您的圖塊網址,也沒有描述刪除圖層的過程。讓我們知道你是否需要幫助。 –