本文摘自:http://blog.csdn.net/leesmn/article/details/6916458(很优秀的博客)
 
作为ESRI的平台的一份子arcgis api for silverlight,自然与ESRI的其它产品有联系。上一篇我们做了一个地图浏览的程序,它的确很简单。只是有一点不大明白:            <esri:ArcGISTiledMapServiceLayer ID="MyLayer" Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />这个是什么意思。想弄明白这个问题,我们就不得不提到图层的概念。

ArcGISTiledMapServiceLayer:是缓存图层,通过预先将地图数据切片缓存在服务器硬盘,客户端访问时服务会根据其当前访问区域计算出显示的图片返回给客户端。客户端就可以看到地图了,其实是几张图片组合起来的。

ArcGISDynamicMapServiceLayer:是动态图层,动态图层是预先没有切片的,客户端访问时服务会根据其访问的区域实时生成一张图片返回给客户端。这个明显的速度上就比不过做了缓存的图层。

所以,明显的一般作为基础数据的地图(比如上海市基础图),我们就可以把它发布成缓存地图,因为基础图一般不会变动,那么我们就预先切片缓存;而为了满足自己业务需求的专题地图(比如电力行业路灯信息等),就作为动态图层发布,以为这些信息时经常变动的,做缓存明显没有意义。

当然,这两个图层是可以叠加在一起的。也正是这样,就可以满足我们一般的地图开发功能。下面就是一段叠加的例子:

<esri:Map x:Name="MyMap"  WrapAround="True">
            <esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer"
                Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"
                InitializationFailed="Layer_InitializationFailed" />
            <esri:ArcGISDynamicMapServiceLayer ID="DynamicLayer"
                Url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Earthquakes/RecentEarthquakesRendered/MapServer"
                InitializationFailed="Layer_InitializationFailed" />
        </esri:Map>

下面系统总结一下arcgis api for silverlight中图层的结构

Layer
  |--TiledMapServiceLayer
  |       |--ArcGISTiledMapServiceLayer
  |--DynamicLayer
  |       |--DynamicMapServiceLayer
  |                 |--ArcGISDynamicMapServiceLayer
  |                 |--ArcGISImageServiceLayer
  |                 |--GPResultImageLayer
  |--GraphicsLayer
  |       |--FeatureLayer
  |--ElementLayer

1、Layer:
        继承自Silverlight中的DependencyObject,并实现了INotifyPropertyChanged接口,是Silverlight API中其他图层的基类。

2、TiledMapServiceLayer:
        继承自Layer,是所有使用了缓存的地图服务的基类。通过它可以在程序中加入经过缓存的,来自不同数据源的地图服务。比如ArcGIS Server的地图服务,Google Map的地图,Virtual Earth的地图等;

3、ArcGISTiledMapServiceLayer:
        继承自TiledMapServiceLayer。像上面说的一样,这个图层扩展了TiledMapServiceLayer,于是支持由ArcGISServer 9.3版本发布的经过缓存的地图服务。

4、DynamicLayer:
        继承自Layer,是动态地图服务的基类;

5、DynamicMapServiceLayer:
        继承自DynamicLayer,对应于TiledMapServiceLayer,要使用未经过缓存的动态地图服务,就得通过扩展这个图层来实现。

6、ArcGISDynamicMapServiceLayer:
        继承自DynamicMapServiceLayer,针对ArcGIS Server9.3版本发布的动态地图服务。同理,如果要在客户端API中使用其他动态地图服务,比如OGC的WMS服务,则也需要像这个图层一样,扩展上面的DynamicMapServiceLayer来实现;

7、ArcGISImageServiceLayer:
        继承自DynamicMapServiceLayer,针对ArcGIS Server 9.3版本发布的ImageService,因为影像服务也属于动态的地图服务。在客户端API中,可以通过ArcGISImageServiceLayer的一些属性,方便通过浏览器来展示服务器端的影像数据,比如通过BandIds属性,可以快速调整影像数据显示波段的组合(RGB通道),提供不同结果供用户查看。点击这里http://serverapps.esri.com/javascript_examples/image_service_band_spinners.html,查看一个实例;
8、GPResultImageLayer:
        继承自DynamicMapServiceLayer,针对Geoprocessing服务所产生的结果。可以请求服务器端的GP服务将结果动态生成一张图片,将此图片作为GPResultImageLayer图层直接添加到Map控件中;
9、GraphicsLayer:
        继承自Layer,这个图层一般满足我们与地图交互时呈现的元素。比如拉框放大,我们能看见鼠标所画的一个矩形;又比如对兴趣点的查询,结果通常是将符合条件的兴趣点的形状高亮显示等。我们做GPS位置跟踪时,一般才用的也就是它。

10、FeatureLayer:
        继承自GraphicsLayer,这也是Silverlight API中的亮点之一,通过它可以完成一个比较炫的专题图Renderer。
11、ElementLayer:
        继承自Layer,它可以用来专门呈现Silverlight中原生的FrameworkElement,比如视频,音频等。虽然在FillSymbol的Fill属性中也能利用Brush类来展现一段视频,但毕竟有些“小气”,在ElementLayer中可以大大方方的放置Silverlight元素。你可能会问,在Map控件之外,Grid等布局元素中不是也能放置Silverlight的东西吗,为什么要放在ElementLayer里呢?其实有个问题经常困扰GIS开发人员,就是想让一些非地理数据元素随着地图范围的变化(放大,缩小,平移)而变化,而无须自己在Extent变化后重新计算客户端坐标,手工改变这些元素的位置。瞧,ElementLayer正解决了这个问题。

图层那么多,我们重点关注红色标记的图层,一般的GIS开发就够用了。

arcgis api for silverlight开发系列之二:缓存图层与动态图层及图层总结 .的更多相关文章

  1. ArcGIS API for Silverlight开发入门

    你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我 都没关系.但你不能否认3G是一种趋势,最终我们每个人都会被包裹在3G网络中.1100也不是一成不变,没准哪天为了打击 ...

  2. ArcGIS API for Silverlight开发入门准备

    原文:ArcGIS API for Silverlight开发入门准备 微软的Silverlight提供了跨浏览器和跨平台开发环境,在Web中可用于创建和展现富互联网应用(RIA,Rich Inter ...

  3. ArcGIS API for javascript开发笔记(二)——解决ArcGIS Service中的服务在内网环境下无法进行javascript预览问题

    感谢一路走来默默支持和陪伴的你~~~ ----------------------------拒绝转载-------------------------------- 1.问题说明 在使用ArcGIS ...

  4. ArcGIS API for Silverlight/ 开发入门 环境搭建

    Silverlight/ 开发入门 环境搭建1 Silverlight SDK下载ArcGIS API for Microsoft Silverlight/WPF ,需要注册一个ESRI Gloab ...

  5. ArcGIS API for Silverlight学习笔记

    ArcGIS API for Silverlight学习笔记(一):为什么要用Silverlight API(转) 你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我都 ...

  6. 扩展ArcGIS API for Silverlight/WPF 中的TextSymbol支持角度标注

    原文 http://blog.csdn.net/esricd/article/details/7587136 在ArcGIS API for Silverlight/WPF中原版的TextSymbol ...

  7. ArcGIS API for Silverlight部署本地地图服务

    这一节我们来讲新建立的ArcGIS API for Silverlight应用程序如何加载自己的地图服务的问题,网上的资料讲的都有点含糊不清,这次我们详细的讲一下配置的步骤: 首先介绍下我们的开发和部 ...

  8. ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试

    原文:ArcGIS API for Silverlight 调用GP服务准备---GP模型建立.发布.测试 第一篇.GP降雨量等值线建模.发布及测试 在水利.气象等行业中,要在WebGIS中实现空间分 ...

  9. ArcGIS API For Silverlight使用在线地图的多种方法总结

    引自:http://www.cnblogs.com/meimao5211/p/3283969.html ArcGIS API For Silverlight使用在线地图的多种方法总结 本人也正在学习A ...

随机推荐

  1. Iframe中子窗体给父窗体传值

    <html> <head> <script type="text/javascript"> function GetData(data) { a ...

  2. Maven搭建Nexus私有仓库

    下载压缩包nexus-2.13.0-01-bundle.tar.gz 解压后有两个目录 进入程序目录启动 ./nexus start 启动告警(确认用root启动把以下加入到环境变量) export ...

  3. Code Forces 652D Nested Segments(离散化+树状数组)

     Nested Segments time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  4. 聊一聊goroutine stack

    通过阅读这篇文章对内存的处理以及栈的扩容有了新的认识,我们在生产环境中也遇到了内存使用量超大的情况,现在怀疑也可能是由于栈扩容导致的 很好的一片文章: 推送在外卖订餐中扮演着重要的角色,为商家实时接单 ...

  5. LightGBM值参数配置

    LightGBM 可以使用一个 pairs 的 list 或一个字典来设置参数: 1.Booster提升器的参数: param={'num_class':33, 'boosting_type':'gb ...

  6. Django - 路由层(URLconf)

    一.django 静态文件配置 /mysite1/settings.py STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_ ...

  7. logging.basicConfig参数简介

    通过logging.basicConfig函数对日志的输出格式及方式做相关配置 import logging logging.basicConfig(level=logging.DEBUG, form ...

  8. 微软威胁情报中心总经理的十句话——From John Lambert——太精辟了.......

                                                      微软威胁情报中心总经理 John Lambert的十句话   1. What is the most ...

  9. 【转】Deep Learning(深度学习)学习笔记整理系列之(四)

    九.Deep Learning的常用模型或者方法 9.1.AutoEncoder自动编码器 Deep Learning最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有层次结 ...

  10. Django组件拾忆

    知识预览 一 Django的form组件 二 Django的model form组件 三 Django的缓存机制 四 Django的信号 五 Django的序列化 回到顶部 一 Django的form ...