在Bing Silverlight控件自定义呈现(Custom Rendering in Bing

2019-06-25 06:25发布

我在Silverlight 2项目,充分利用Bing地图控制斜坡上升。 有一件事情我们UX的家伙想知道是它是否可以完全自定义地图的外观。 例如,绘制国家与不同颜色的内饰简洁的轮廓。 或绘制海洋,白色和国家的黑点形状。

有谁知道是否有可能达到这个级别的自定义? 该MapMode类看起来前途无量,但它似乎并不十分给我我需要什么。

谢谢,肯特

Answer 1:

要回答我的问题,是的,这是可能的。

首先,使用自定义瓷砖源添加自己的层:

<m:Map>
    <m:Map.Mode>
        <mCore:MercatorMode/>
    </m:Map.Mode>
    <m:Map.Children>
        <m:MapTileLayer>
            <m:MapTileLayer.TileSources>
                <local:CustomTileSource/>
            </m:MapTileLayer.TileSources>
        </m:MapTileLayer>
    </m:Map.Children>
</m:Map>

接下来,定义CustomTileSource 。 下面是一个例子:

public class CustomTileSource : TileSource
{
    public CustomTileSource()
        : base(GetAbsoluteUrl("/ClientBin/Resources/{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;
    }
}

注意瓷砖源必须如何返回一个URL。 如果你有你想要的地图使用图像,您可以使用MapCruncher工具准备吧。



文章来源: Custom Rendering in Bing Silverlight Control