【Silverlight】Bing Maps學習系列(八):使用Bing Maps Silverlight Control加載本身部署的Google Maps

  上個月微軟必應地圖(Bing Maps)大中華區業務拓展經理 acnchen發佈了一篇 《在必應地圖SilverLight控件中加載其餘地圖(Google衛星圖等)》的文章,裏面詳細介紹瞭如何實現加載Google衛星地圖。本文要介紹的內容和這篇文章差很少,Bing Maps Silverlight Control除了能夠加載外網的Google衛星地圖,一樣也是能夠加載自定義的Google Maps地圖數據的,包括衛星地圖和路況地圖。
 
  首先回顧下Bing Maps Silverlight Control是如何加載Google衛星地圖,其原理就是爲Google衛星地圖定製一個TileSource,在這個TileSource裏實現加載Google衛星地圖的算法,主要就是構造正確的TileSource映射Url,此Url的格式能夠經過HttpWatch等HTTP嗅探器工具抓取分析獲得。
 1  public class  GoogleTileSource : TileSource
 2
  {
 3
      public  GoogleTileSource()
 4
          : base("http://khm{0}.google.com/kh/v=47&x={1}&y={2}&z={3}" )
 5
      { }
 6
 
 7      public override Uri GetUri(int x, int y, int  zoomLevel)
 8
      {
 9
          return new Uri(string.Format(this.UriFormat, x % 4 , x, y, zoomLevel));
10
      }
11
  }
 
 
  如上完成了對Google在線衛星地圖數據的Url算法,在前端使用該TileSource就OK了。
 1  public partial class  MainPage : UserControl
 2
  {
 3
      public  MainPage()
 4
      {
 5
          InitializeComponent();
 6
 
 7          MapTileLayer tileLayer = new  MapTileLayer();
 8
          GoogleTileSource gts = new  GoogleTileSource();
 9
          tileLayer.TileSources.Add(gts);
10
          myMap.Children.Add(tileLayer);
11
          this.myMap.Mode = new  MercatorMode();
12
      }
13
  }
        
 
   如上便實現了加載Google在線衛星地圖,雖然實現了功能可是仍是不夠完美,若是咱們沒有聯網就沒法加載地圖,這就須要咱們本身部署地圖數據,那如何實現加載自定義部署的地圖數據呢?Google地圖數據其實很簡單,部署地圖數據一樣簡單,只須要將地圖數據經過Web服務器(如:IIS)部署好就好了。
      
      
 
  地圖數據部署完備,接下來就能夠基於本身部署的地圖數據開發TileSource的Url映射算法,而後同加載Google在線地圖數據同樣的方式將本身部署的地圖數據加載並呈現出來。修改上面加載在線地圖數據的算法,讓其適應於加載本身部署的Google Maps數據。
 1  public class  GoogleTileSource : TileSource
 2
  {
 3
      public  GoogleTileSource()
 4
          : base("http://localhost:5000/CQ_{0}/{1}-{2}.png" )
 5
      { }
 6
 
 7      public override Uri GetUri(int x, int y, int  zoomLevel)
 8
      {
 9
          int port =  Application.Current.Host.Source.Port;
10
 
11          string url = string.Format(this.UriFormat, (zoomLevel + 1).ToString("D2"), (y + 1).ToString("D6"), (x + 1).ToString("D6" ), port);
12
          return new  Uri(url);
13
      }
 
  再次編譯運行上面的程序,能夠看到已經成功的將本身部署的Google Maps數據加載並呈現出來了,爽~~~~~~。有了Google地圖數據,本身部署就不用擔憂沒有聯網形成不能加載地圖的麻煩了。
        
 
  若是你以爲上圖的效果不是很好看,你能夠給地圖設置一個背景顏色,相對來講就好看多了,和在線的Google Maps顯示效果是同樣的。上面完成了加載本身部署的地圖數據中的路況地圖,其實咱們也能夠從本身部署的地圖數據服務器上加載Google衛星地圖,實現方式和加載路況地圖同樣簡單,在此基礎上只須要作小小修改就能夠達到目的。在Google Maps地圖數據中,路況地圖和衛星地圖的Tile Source算法是同樣的,只是用了不一樣類型的圖片而已,上面使用路徑地圖是:
1  public  GoogleTileSource()
2
      : base("http://localhost:5000/CQ_{0}/{1}-{2}.png" )
3
  { }
 
  要實現加載本身部署的地圖數據服務器上的衛星地圖,只須要將上面的Tile System的映射Url的地圖圖片類型修改成.jpg就好了,以下代碼塊:
1  public  GoogleTileSource()
2
      : base("http://localhost:5000/CQ_{0}/{1}-{2}.jpg" )
3
  { }
 
 
   就這樣就能夠加載出衛星地圖了,編譯運行程序就會感受到有的圖層沒有加載出來,這是因爲TileSource的圖片映射Url映射計算錯誤的緣由,地圖的不一樣方大級別的算法這裏就不作介紹,但願經過本文拋磚引玉,引出更多更好更深刻的技術文章。
相關文章
相關標籤/搜索