我有一个 Bing 地图 Silverlight 应用程序并希望在地图上显示交通信息。它似乎在 AJAX 版本中实现,但在 Silverlight 版本中没有实现。
那么如何为 Silverlight 实现一个工作流量层呢?
我有一个 Bing 地图 Silverlight 应用程序并希望在地图上显示交通信息。它似乎在 AJAX 版本中实现,但在 Silverlight 版本中没有实现。
那么如何为 Silverlight 实现一个工作流量层呢?
对于所有对解决方案感兴趣的人:
经过数小时的搜索和尝试,我在这里找到了解决方案: Bing Silverlight Control 中的自定义渲染
public class TrafficTileSource : TileSource
{
public TrafficTileSource()
: base(GetAbsoluteUrl("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));
}
public static string GetAbsoluteUrl(string strRelativePath)
{
if (string.IsNullOrEmpty(strRelativePath))
return strRelativePath;
string strFullUrl;
if (strRelativePath.StartsWith("http:", StringComparison.OrdinalIgnoreCase)
|| strRelativePath.StartsWith("https:", StringComparison.OrdinalIgnoreCase)
|| strRelativePath.StartsWith("file:", StringComparison.OrdinalIgnoreCase)
)
{
//already absolute
strFullUrl = strRelativePath;
}
else
{
//relative, need to convert to absolute
strFullUrl = System.Windows.Application.Current.Host.Source.AbsoluteUri;
if (strFullUrl.IndexOf("/ClientBin") > 0)
strFullUrl = strFullUrl.Substring(0, strFullUrl.IndexOf("/ClientBin")) + strRelativePath;
}
return strFullUrl;
}
}
然后将图层添加到地图:
<m:MapTileLayer Visibility="{Binding Path=TrafficVisibility,Converter={StaticResource BoolToVisibilityConverter},Mode=OneWay,UpdateSourceTrigger=PropertyChanged}">
<m:MapTileLayer.TileSources>
<utils:TrafficTileSource />
</m:MapTileLayer.TileSources>
</m:MapTileLayer>
我希望这对希望将流量层添加到 Silverlight 应用程序的每个人有所帮助。
问候。
只是为了清理一下:这与约翰内斯的回答完全一样:
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)
{
QuadKey quadKey = new QuadKey(x, y, zoomLevel);
return new Uri(String.Format(UriFormat, quadKey.Key));
}
}
和地图层:
<maps:MapTileLayer>
<maps:MapTileLayer.TileSources>
<utils:TrafficTileSource />
</maps:MapTileLayer.TileSources>
</maps:MapTileLayer>