首先回顧下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
}
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就好了,以下代碼塊:
就這樣就能夠加載出衛星地圖了,編譯運行程序就會感受到有的圖層沒有加載出來,這是因爲TileSource的圖片映射Url映射計算錯誤的緣由,地圖的不一樣方大級別的算法這裏就不作介紹,但願經過本文拋磚引玉,引出更多更好更深刻的技術文章。