我在Silverlight 2项目,充分利用Bing地图控制斜坡上升。 有一件事情我们UX的家伙想知道是它是否可以完全自定义地图的外观。 例如,绘制国家与不同颜色的内饰简洁的轮廓。 或绘制海洋,白色和国家的黑点形状。
有谁知道是否有可能达到这个级别的自定义? 该MapMode
类看起来前途无量,但它似乎并不十分给我我需要什么。
谢谢,肯特
我在Silverlight 2项目,充分利用Bing地图控制斜坡上升。 有一件事情我们UX的家伙想知道是它是否可以完全自定义地图的外观。 例如,绘制国家与不同颜色的内饰简洁的轮廓。 或绘制海洋,白色和国家的黑点形状。
有谁知道是否有可能达到这个级别的自定义? 该MapMode
类看起来前途无量,但它似乎并不十分给我我需要什么。
谢谢,肯特
要回答我的问题,是的,这是可能的。
首先,使用自定义瓷砖源添加自己的层:
<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工具准备吧。