2017-07-05 22 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

注:あなたのタイルURLをチェックしていないので、レイヤーを削除するプロセスについては説明していません。あなたがこれに助けが必要な場合はお知らせください。 –

関連する問題