Bing Maps Silverlight アプリケーションがあり、地図上に交通情報を表示したいと考えています。AJAX バージョンでは実装されているようですが、Silverlight バージョンでは実装されていないようです。
では、Silverlight 用のトラフィック レイヤーを実装するにはどうすればよいでしょうか。
Bing Maps Silverlight アプリケーションがあり、地図上に交通情報を表示したいと考えています。AJAX バージョンでは実装されているようですが、Silverlight バージョンでは実装されていないようです。
では、Silverlight 用のトラフィック レイヤーを実装するにはどうすればよいでしょうか。
ソリューションに関心のあるすべてのユーザー向け:
何時間も検索して試してみた結果、ここで解決策を見つけました: Bing Silverlight コントロールでのカスタム レンダリング
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>