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