代码改变世界

介绍开源Silverlight地图控件DeepEarth[转自ET瓦里]

2009-06-01 13:04  闫妍  阅读(169)  评论(0编辑  收藏  举报

DeepEarth是一个地图控件,它将微软的Virtual Earth与Silverlight 2.0联合起来。该开源项目由其创建者(一群.NET的狂热爱好者)在CodePlex上发布。

根据该项目创建者所述:

DeepEarth是一个地图控件,它将微软的Silverlight 2.0平台和DeepZoom(MuliScaleImage)控件联合起来。其核心构建在这些创新的技术上以提供这样一种架构:可以将服务层、数据提供者以及你自己的客户化地图元素集成到富于表现力的用户体验中。同时它还有一些深入的示例说明了如何使用Virtual Earth Web Services以充分利用高级GIS的服务功能。通过以上这些,你就可以将一个交互式、本地的Silverlight 2.0地图集成到你的应用中了。

一些主要特性列举如下:

  • 通过属性和事件模型实现的完整的地图控件
  • 地图导航控件的完整模板集
  • 用来包含Points、LineStrings及Polygons(OGS)的层
  • 用来实现地理到屏幕坐标系统的变换库
  • Geocoding(发现地址)
  • 相反的Geocoding(从地图上的点来获得地址)
  • 路由(Directions)
  • 变化选择(默认是按住Ctrl键并拖动或从菜单中选择) 
  • 地图旋转

要想赶上Google Earth,DeepEarth还有很长的路要走,因为Google Earth提供了某些区域的3D视图,这使得用户可以跨越建筑进行查看,同时还有很多其他特性,如通过灯光和阴影来模拟阳光下的真实视图。

该项目基于Microsoft Public License(Ms-PL)

有用的链接:可用的示例源代码YouTub上的示例视频

 

DeepEarth是一个结合了Silverlight2.0技术和DeepZoom技术的地图控件,可以实现平滑的无极缩放(当然不是真正意义的无极,呵呵)地图操作,DeepEarth目前是一个基于Microsoft Public License (Ms-PL) 微软的开放许可协议的开源项目,DeepEarth支持Virtual Earth Web Service,地图坐标查找(根据坐标查找街道),坐标反向查找(根据街道查找坐标)等等。
Demo网站 Demo视频 Wiki帮助

下面我们来简单的做个实验。
先到这里下载最新的Bin文件: http://deepearth.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=21654
然后打开VS2008创建一个Silverlight的工程DeepEarthDemo,工程会创建一个DeepEarthDemo项目和DeepEarthDemo.Web项目,如下所示:
DeepEarth工程文件
然后右键点击References添加刚才下载的bin文件,DeepEarth.dll, DeepEarth.Provider.dll和DeepEarth.Provider.VirtualEarth(如果需要用到VE的地图的话)。
添加References到DeepEarth
打开Page.xaml添加如下namespace定义

   xmlns:DeepEarth="clr-namespace:DeepEarth;assembly=DeepEarth"
    xmlns:DeepOSM="clr-namespace:DeepEarth.Provider.OpenStreetMaps;assembly=DeepEarth.Provider"
    xmlns:DeepControls="clr-namespace:DeepEarth.Controls;assembly=DeepEarth"

然后添加DeepEarth控件到grid里,

打开Page.xaml.cs加入namespace定义

using DeepEarth;
using DeepEarth.Provider.OpenStreetMaps;    //因为我们要用到OpenStreetMaps

然后只要再往函数里加入一行定义基础地图层的源就一切搞定了,代码如下:

using DeepEarth;
using DeepEarth.Provider.OpenStreetMaps;

namespace DeepEarthDemo
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();

            map.BaseLayer.Source = new OsmTileSource(OsmMapModes.Osmarend);
        }
    }
}

如果想要用Silverlight实现Virtual Earth更漂亮的地图你需要到这里申请一个Virtual Earth开发者帐号,具体可以看DeepEarth的源代码示例。
相关链接:
1. MSDN关于发布Virtual Earth的Silverlight应用
2. Virtual Earth SDK

转载请注明来自blog.etvalley.com,下面是我们完成的Demo页面。
http://blog.etvalley.com/wp-content/uploads/2009/04/DeepEarthDemoTestPage.html
鼠标滚轮进行地图的无极缩放是不是很酷?