2009-07-07 4 views
1

Ich arbeite gerade an einem Silverlight 2-Projekt, das die Bing Maps-Steuerung nutzt. Eine Sache, die unsere UX-Leute sich fragen, ist, ob es möglich ist, das Aussehen der Karte vollständig anzupassen. Zeichnen Sie beispielsweise Länder als einfache Umrisse mit unterschiedlichen Farbinterieurs. Oder zeichnen Sie den Ozean als weiß und Länder als schwarz gepunktete Formen.Benutzerdefinierte Darstellung in Bing Silverlight-Steuerelement

Weiß jemand, ob es möglich ist, diese Stufe der Anpassung zu erreichen? Die Klasse MapMode sah vielversprechend aus, aber sie scheint mir nicht das zu geben, was ich brauche.

Danke, Kent

Antwort

1

meine eigene Frage zu beantworten, ist ja dies möglich.

Erstens Ihre eigene Schicht mit einer benutzerdefinierten Fliese Quelle hinzufügen:

<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> 

Als nächstes werden die CustomTileSource definieren. Hier ein Beispiel:

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; 
    } 
} 

Beachten Sie, wie die Kachelquelle eine URL zurückgeben muss. Wenn Sie ein Bild haben, das Sie als Karte verwenden möchten, können Sie es mit dem Tool MapCruncher vorbereiten.