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