Уровень трафика для карт Bing в Silverlight
У меня есть приложение Bing Maps Silverlight, и я хочу отображать информацию о трафике на карте. Кажется, он реализован в версии AJAX, но не в версии Silverlight.
Итак, как я могу реализовать рабочий слой трафика для Silverlight?
2 ответа
Решение
Для всех, кто заинтересован в решении:
После нескольких часов поисков и попыток я нашел решение здесь: Пользовательский рендеринг в 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>