|
概述
Virtual Earth是什么,我想不用多做解釋了。微軟在推出自己的Virtual Earth之后,開(kāi)放了大量的APIs,使得我們可以方便集成到自己的應(yīng)用程序中。
本文將介紹如何在自己的Silverlight 2應(yīng)用程序中集成Virtual Earth。
在HTML中集成
在開(kāi)始之前,我們先來(lái)簡(jiǎn)單看一下如何在HTML中集成Virtual Earth,大家可以去這里查詢相關(guān)APIs,我們來(lái)看看如何加載默認(rèn)地圖,如下代碼所示:
<html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/Javascript" src="http://dev.virtualearth.NET/mapcontrol/mapcontrol.ashx?v=6.1"></script> <script type="text/Javascript"> var map = null; function GetMap() { map = new VEMap('myMap'); map.LoadMap(); } </script> </head> <body onload="GetMap();"> <div id='myMap' style="position:relative; width:480px; height:320px;"></div> </body></html>
其實(shí)這段代碼非常簡(jiǎn)單的簡(jiǎn)單,首先引入Virtual Earth Map控件,并且使用JavaScript來(lái)加載地圖。
這是最簡(jiǎn)單的一個(gè)示例,但是并沒(méi)有多大實(shí)用價(jià)值,下面我們?cè)倏匆粋€(gè)如何在查找地圖上的特定位置的示例,如下代碼所示:
<html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/Javascript" src="http://dev.virtualearth.NET/mapcontrol/mapcontrol.ashx?v=6.1"></script> <script type="text/Javascript"> var map = null; function GetMap() { map = new VEMap('myMap'); map.LoadMap(); } function FindLoc() { try { var where = document.getElementById('txtWhere').value; map.Find(null, where); } catch(e) { alert(e.message); } } </script> </head> <body onload="GetMap();"> <div id='myMap' style="position:relative; width:500px; height:300px;"></div> <input id="txtWhere" type="text" name="txtWhere"/> <input id="find" type="button" value="Find" name="find" onclick="FindLoc();"/> </body></html>
其實(shí)查找位置也特別簡(jiǎn)單,直接調(diào)用VEMap對(duì)象的Find()方法即可,運(yùn)行后,查找“Beijing”如下圖所示:
在Silverlight中集成
通過(guò)上面的兩個(gè)示例,大家看到了,在HTML中加載Virtual Earth都是使用JavaScript來(lái)完成,我們知道Silverlight 2應(yīng)用程序可以很容易的實(shí)現(xiàn)與JavaScript的交互,意味著我們可以在Silverlight 2應(yīng)用程序中通過(guò)調(diào)用JavaScript代碼來(lái)實(shí)現(xiàn)集成,這種方式的確是可以的,但如果要編寫(xiě)非常復(fù)雜的Virtual Earth應(yīng)用,實(shí)現(xiàn)起來(lái)也是一件不容易的事。
好在有一個(gè)開(kāi)源項(xiàng)目可以幫助我們,使用托管代碼在Silverlight 2中實(shí)現(xiàn)Virtual Earth應(yīng)用。該項(xiàng)目名稱為“Virtual Earth Wrapper for Silverlight”,官方地址:http://www.codeplex.com/views,當(dāng)前版本是1.1。該項(xiàng)目使用托管代碼來(lái)封裝了所有Virtual Earth中的JavaScript應(yīng)用,使得我們編寫(xiě)Virtual Earth與Silverlight 2集成應(yīng)用程序變得非常簡(jiǎn)單。下面我們看一個(gè)簡(jiǎn)單的示例,如何在Silverlight中加載Virtual Earth。
在下載Virtual Earth Wrapper for Silverlight后解壓縮,會(huì)看到有兩個(gè)程序集和一個(gè)JavaScript文件。首先在HTML中引入相關(guān)的JS腳本,如下代碼所示:
<head> <script type="text/Javascript" src="http://dev.virtualearth.NET/mapcontrol/mapcontrol.ashx?v=6.1"></script> <script type="text/Javascript" src="views.js"></script></head>
其中views.js在壓縮包里面有,然后添加一個(gè)div,用來(lái)作為地圖容器:
<div id='mapContainer' style="position:relative; width:500px; height:300px;"></div>
編寫(xiě)一段腳本,定義一個(gè)silverlight變量,該變量在此處雖然沒(méi)有做任何事,但它將會(huì)在views.js文件中被運(yùn)用:
<script type="text/Javascript"> var silverlight = null; function pluginLoaded(sender,args) { silverlight = document.getElementById('Silverlight'); }</script>
編寫(xiě)Silverlight Object,指定onLoad事件,如下代碼所示:
<div id="silverlightControlHost" style="position:absolute; width:300px; height:480px; left:10px; top:320px; z-index:2"><object data="data:application/x-silverlight," type="application/x-silverlight-2-b2" style="width:500px;height:50px;border-width:0;" id="Silverlight"> <param name="onLoad" value="pluginLoaded" /> <param name="source" value="ClientBin/SilverlightIntegrateVirtualEarth.xap"/> <param name="background" value="white" /></object></div>
現(xiàn)在來(lái)看Silverlight中的代碼編寫(xiě),首先引入ScriptInterop.dll和VIEWS.dll兩個(gè)程序集,并引入相關(guān)的命名空間。在Page_Loaded事件中加入:
void Page_Loaded(object sender, RoutedEventArgs e){ VEMap map = new VEMap("mapContainer"); HtmlPage.RegisterScriptableObject("SLMAP", map); map.LoadMap();}
代碼非常簡(jiǎn)單,創(chuàng)建一個(gè)VEMap對(duì)象,這里的mapContainer就是我們剛才定義的地圖容器,而SLMAP則是注冊(cè)的對(duì)象別名,注意這個(gè)名稱不能修改,因?yàn)樵趘iews.js中將會(huì)用到。現(xiàn)在運(yùn)行后可以看到加載的地圖:
現(xiàn)在我們?cè)倏匆幌氯绾卧赟ilverlight中加入查找位置的功能,代碼非常簡(jiǎn)單:
VEMap map;void Page_Loaded(object sender, RoutedEventArgs e){ map = new VEMap("mapContainer"); HtmlPage.RegisterScriptableObject("SLMAP", map); map.LoadMap();}void btnFind_Click(object sender, RoutedEventArgs e){ map.Find(null, this.txtWhere.Text); map.LoadMap();}
效果如下圖所示:
除此之外,我們還可以開(kāi)發(fā)更加復(fù)雜的應(yīng)用,如添加層、實(shí)現(xiàn)3D效果等,下面是作者給出的一個(gè)示例效果:
可以到這里下載該示例。
總結(jié)
本文簡(jiǎn)單介紹了如何使用VIEWS項(xiàng)目實(shí)現(xiàn)Silverlight 2與Virtual Earth的集成,希望對(duì)大家有所幫助。
NET技術(shù):在Silverlight 2應(yīng)用程序中集成Virtual Earth,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。