更新/刷新Bing的流量覆盖

时间:2017-07-05 14:37:41

标签: c# bing-maps

我正在使用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));
        }
     }
 }

这是我在地图上创建交通图层时必须添加的唯一代码,我只是在其他地方使用切换按钮来打开和关闭它。但我希望它在开启时定期更新。任何帮助都会很棒。我只是不确定这样做的最好方法。我不是要求代码而只是要求这个概念,但是如果你想提供的代码那么棒!

1 个答案:

答案 0 :(得分: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));
        }
     }
 }

您还可以使用模运算符在一定时间内使用缓存或利用DateTime格式。

另外,最后一个提示是避免在网址中仅使用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)));
        }
     }
 }