0

Bing Maps Silverlight アプリケーションがあり、地図上に交通情報を表示したいと考えています。AJAX バージョンでは実装されているようですが、Silverlight バージョンでは実装されていないようです。

では、Silverlight 用のトラフィック レイヤーを実装するにはどうすればよいでしょうか。

4

2 に答える 2

2

ソリューションに関心のあるすべてのユーザー向け:

何時間も検索して試してみた結果、ここで解決策を見つけました: 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 アプリケーションにトラフィック レイヤーを追加したいと考えているすべての人に役立つことを願っています。

ご挨拶。

于 2012-09-24T09:29:01.137 に答える
2

物事を少し整理するために:これはヨハネスの答えとまったく同じです:

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>
于 2014-03-06T16:33:19.060 に答える