概述
Virtual Earth是什么,我想不用多做解释了。微软在推出自己的Virtual Earth之后,开放了大量的APIs,使得我们可以方便集成到自己的应用程序中。
本文将介绍如何在自己的Silverlight 2应用程序中集成Virtual Earth。
在HTML中集成
<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>
其实这段代码非常简单的简单,首先引入Virtual Earth Map控件,并且使用JavaScript来加载地图。
<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>
在Silverlight中集成
通过上面的两个示例,大家看到了,在HTML中加载Virtual Earth都是使用JavaScript来完成,我们知道Silverlight 2应用程序可以很容易的实现与JavaScript的交互,意味着我们可以在Silverlight 2应用程序中通过调用JavaScript代码来实现集成,这种方式的确是可以的,但如果要编写非常复杂的Virtual Earth应用,实现起来也是一件不容易的事。
好在有一个开源项目可以帮助我们,使用托管代码在Silverlight 2中实现Virtual Earth应用。该项目名称为“Virtual Earth Wrapper for Silverlight”,官方地址:
[url]http://www.codeplex.com/views[/url],当前版本是1.1。该项目使用托管代码来封装了所有Virtual Earth中的JavaScript应用,使得我们编写Virtual Earth与Silverlight 2集成应用程序变得非常简单。下面我们看一个简单的示例,如何在Silverlight中加载Virtual Earth。
<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>
<div id='mapContainer' style="position:relative; width:500px; height:300px;"></div>
<script type="text/javascript"> var silverlight = null; function pluginLoaded(sender,args) { silverlight = document.getElementById('Silverlight'); } </script>
编写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>
现在来看Silverlight中的代码编写,首先引入ScriptInterop.dll和VIEWS.dll两个程序集,并引入相关的命名空间。在Page_Loaded事件中加入:
void Page_Loaded(object sender,RoutedEventArgs e) { VEMap map = new VEMap("mapContainer"); HtmlPage.RegisterScriptableObject("SLMAP",map); map.LoadMap(); }
代码非常简单,创建一个VEMap对象,这里的mapContainer就是我们刚才定义的地图容器,而SLMAP则是注册的对象别名,注意这个名称不能修改,因为在views.js中将会用到。现在运行后可以看到加载的地图:
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(); }
效果如下图所示:
可以到这里
下载该示例。
总结
本文简单介绍了如何使用VIEWS项目实现Silverlight 2与Virtual Earth的集成,希望对大家有所帮助。
本文示例下载:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。