概述

Virtual Earth是什么,我想不用多做解释了。微软在推出自己的Virtual Earth之后,开放了大量的APIs,使得我们可以方便集成到自己的应用程序中。

本文将介绍如何在自己的Silverlight 2应用程序中集成Virtual Earth。

在HTML中集成

在开始之前,我们先来简单看一下如何在HTML中集成Virtual Earth,大家可以去这里查询相关APIs,我们来看看如何加载默认地图,如下代码所示:

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

其实查找位置也特别简单,直接调用VEMap对象的Find()方法即可,运行后,查找“Beijing”如下图所示:

在Silverlight中集成

通过上面的两个示例,大家看到了,在HTML中加载Virtual Earth都是使用JavaScript来完成,我们知道Silverlight 2应用程序可以很容易的实现与JavaScript的交互,意味着我们可以在Silverlight 2应用程序中通过调用JavaScript代码来实现集成,这种方式的确是可以的,但如果要编写非常复杂的Virtual Earth应用,实现起来也是一件不容易的事。

好在有一个开源项目可以帮助我们,使用托管代码在Silverlight 2中实现Virtual Earth应用。该项目名称为“Virtual Earth Wrapper for Silverlight”,官方地址:http://www.codeplex.com/views,当前版本是1.1。该项目使用托管代码来封装了所有Virtual Earth中的JavaScript应用,使得我们编写Virtual Earth与Silverlight 2集成应用程序变得非常简单。下面我们看一个简单的示例,如何在Silverlight中加载Virtual Earth。

在下载Virtual Earth Wrapper for Silverlight后解压缩,会看到有两个程序集和一个JavaScript文件。首先在HTML中引入相关的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在压缩包里面有,然后添加一个div,用来作为地图容器:

<div id='mapContainer' style="position:relative; width:500px; height:300px;"></div>

编写一段脚本,定义一个silverlight变量,该变量在此处虽然没有做任何事,但它将会在views.js文件中被运用:

<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中将会用到。现在运行后可以看到加载的地图:

现在我们再看一下如何在Silverlight中加入查找位置的功能,代码非常简单:

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

效果如下图所示:

除此之外,我们还可以开发更加复杂的应用,如添加层、实现3D效果等,下面是作者给出的一个示例效果:

可以到这里下载该示例。

总结

本文简单介绍了如何使用VIEWS项目实现Silverlight 2与Virtual Earth的集成,希望对大家有所帮助。

本文示例下载:

转载于:https://www.cnblogs.com/Terrylee/archive/2008/07/01/integrate-virtual-earth-in-silverlight-2.html

在Silverlight 2应用程序中集成Virtual Earth相关推荐

  1. 技巧:在Silverlight 2应用程序中切换用户控件

    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://terrylee.blog.51cto.com/342737/85341 ...

  2. 如何在微信小程序中集成认证服务—邮箱地址篇

    近期华为AppGallary Connect的认证服务SDK新增支持了微信小程序.今天就来教大家如何在微信小程序中集成认证服务的邮箱地址认证方式 1.安装微信小程序环境 首先进入微信小程序官网下载微信 ...

  3. Silverlight:如何在程序中获取网站的根目录

    如果需要在Silverlight程序中获取当前网站的根目录,不能使用HttpContext.Current这样的方式,而需要用 @HostingEnvironment.ApplicationPhysi ...

  4. 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)

    1 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Microsoft Graph 服务针对一些主流的 ...

  5. 快速在同一个Web程序中集成扫描仪和手机摄像头

    简介 在笔者其它多篇文章中,已经多次提到了如何在桌面浏览器中集成扫描仪控制.近年来,随着智能移动设备的普及,网站设计时必须同时兼顾传统的桌面浏览器(包括最常见的三大系统Windows, macOS和L ...

  6. 在程序中集成地址簿、电子邮件和地图功能

    地址簿 iOS通过两个框架提供了全面的地址簿数据库访问功能:Address Book和Address Book UI. Address Book UI框架是一组用户界面类,封装了Address Boo ...

  7. 百家与g对比oogle_如何在Java Web应用程序中集成G​​oogle reCAPTCHA

    百家与g对比oogle I never liked Captchas because the burden was always on end user to understand the lette ...

  8. android 使用mupdf,android-在应用程序中集成MuPDF Reader

    我不知道如何使用cygwin在Windows中执行此操作,因为我正在使用Ubuntu进行开发. 但我认为程序应该相同. 在此处下载文件mupdf-0.9-source.tar.gz:[http://c ...

  9. java 中 webcam类_如何在Java的Swing应用程序中集成Webcam?

    >下载并安装 JMF >将jmf.jar添加到项目库中 >下载 FrameGrabber源文件并将其添加到项目中 >按如下方式使用它开始捕获视频. 新的FrameGrabber ...

最新文章

  1. mysql更改数据库数据存储目录_MySQL更改数据库数据存储目录
  2. 线段树分裂与合并 ---- 树上差分 P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并
  3. 引入外部css_css
  4. Intel汇编语言程序设计学习-第六章 条件处理-下
  5. ML:MLOps系列讲解之《MLOps Stack Canvas堆栈画布》解读
  6. 【Win32汇编】数组求和函数
  7. Postman接口测试神器从安装到精通
  8. Cloudera将被私有化,Hadoop时代或将落幕
  9. (矩阵快速幂)解所有类似Fibonacci 的题目
  10. 二叉树——淘汰赛(洛谷 P4715)
  11. 深度学习中的损失函数如何画图_如何用深度学习来做检索:度量学习中关于排序损失函数的综述(1)...
  12. com.alibaba.fastjson.JSONArray cannot be cast to com.alibaba.fastjson.JSONObject
  13. 使用继电器制作振荡器
  14. 基于物联网的智能门锁应用系统设计方案
  15. Freemarker商品详情页静态化服务调用处理
  16. 正态分布西格玛越大_6西格玛中正太分布包含什么?
  17. 单片机C51学习心得_02
  18. 快速排序的三种方式以及快排的优化
  19. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: FUNCTION wm.concat does not exist
  20. Mysql 多表联合更新

热门文章

  1. NSString、NSMutableString基本用法
  2. EIGRP负载均衡实验(如有疑问,请留言)
  3. github结合TortoiseGit使用sshkey,无需输入账号和密码
  4. 【HIbernate异常】could not initialize proxy - no Session (已解决)
  5. 硬盘数据恢复入门教程
  6. 大一计算机专业,大一计算机专业学生
  7. linux系统rar命令行,Linux下rar命令详解
  8. blender 3d打印_如何在Blender中开始3D打印
  9. 您不会相信Buzzfeed如何处理变更管理
  10. jggrid 设置了自适应宽度仍然有滚动条的问题