zoukankan      html  css  js  c++  java
  • arcgis图层 GraphicsLayer与FeatureLayer

    什么是图层

    图层是用来在 ArcGIS 产品套件中显示地理数据集的机制。每个图层代表一种数据集(可以是地图服务、图形或是矢量数据),并指定该数据集是如何描绘使用一组属性的。

    包含一个地图控件的每个应用程序是通过添加一系列图层组装的。图层以特定的顺序显示在地图上,列在最底部的图层在地图的最上面显示,也就是先添加的图层在下面显示(原理类似于“栈”)。比如,在XAML代码中,最靠上的图层在显示时会出现在Map控件的最底端,如图:

    图层介绍

     第一个图层的空间坐标系SpatialReference决定了地图的空间坐标系,图层只能在UI线程上进行实例化。以下是所有的图层类:

     所有的图层都是从Layer类型继承而来的,可以参考下载的API中的对象模型图。

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

    Layer是最基本的基类,常用的几种图层类型已经用红色标记出来了。

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

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

    (3)ArcGISTiledMapServiceLayer:继承自TiledMapServiceLayer。这个图层扩展了TiledMapServiceLayer,支持由ArcGIS Server发布的经过缓存的地图服务。

    (4)DynamicLayer:继承自Layer,是动态地图服务的基类。

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

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

    (7)ArcGISImageServiceLayer:继承自DynamicMapServiceLayer,针对ArcGIS Server 9.3版本发布的Image Service,因为影像服务也属于动态的地图服务。在客户端API中,可以通过ArcGISImageServiceLayer的一些属性,方便通过浏 览器来展示服务器端的影像数据,比如通过BandIds属性,可以快速调整影像数据显示波段的组合(RGB通道),提供不同结果供用户查看。点击这里,查看一个实例。

    (8)GPResultImageLayer:继承自DynamicMapServiceLayer,针对Geoprocessing服务所产生的 结果。可以请求服务器端的GP服务将结果动态生成一张图片,将此图片作为GPResultImageLayer图层直接添加到Map控件中。

    (9)GraphicsLayer:继承自Layer,是图形数据集中展现的地方。GraphicsLayer是保留在内存中的一种图层(与 ArcMap、ArcGIS Engine、ArcGIS Server ADF程序中的相应概念类似),顾名思义是很多Graphic的集合,而所有与用户交互的内容通常都用Graphic来显示。比如多边形查询中用户画出的 多边形,属性/空间查询结果中的所有要素(Feature)等内容,都是Graphic。可以说,除了地图本身,基本上看到的所有与地理位置有关的东西都 可以用Graphic来表示。Graphic对象有3个重要的属性:Geometry,Symbol和Attributes。Geometry代表了一个 Graphic的几何形状(可疑是点、线、面任意一种)或地理位置,而Symbol则表示Graphic的呈现样子,比如颜色、效果,同时有了这两个属性 (缺一不可),Graphic就可以显示到地图上了。而Attributes是键值对集合,可在里面存储任意类型的对象,比如一个要素的属性信息。

    (10)FeatureLayer:继承自GraphicsLayer,这也是ArcGIS API for Silverlight/WPF 中的亮点之一,通过它可以完成一些比较炫的功能。FeatureLayer继承自GraphicsLayer,它与后者的区别 是,GraphicsLayer中的Graphic都是人为创建出来的,而FeatureLayer中的Graphic都是从ArcGIS Server发布的服务中读取出来的,因此FeatureLayer比GraphicsLayer多了一个URL属性。这个URL通常指向一个 ArcGIS Server发布的MapService或FeatureService的子图层(对应一个FeatureClass)。FeatureLayer有了这 个URL后,就可以读取出该服务对应子图层里的所有要素内容,因此FeatureLayer里Graphic的Geometry属性会自动被 FeatureClass的Shape字段填充,而Graphic的Attributes字段则会根据要求,被FeatureClass中的属性信息所填 充。如果发布服务的服务器是ArcGIS Server 10版本,则Graphic的Symbol属性会自动被服务的DrawingInfo信息填充。另外,FeatureLayer是客户端API中对 FeatureService的唯一载体,这是它另一个非常重要的作用(也是主要作用)。

    (11)ElementLayer:继承自Layer,它可以用来专门呈现Silverlight/WPF中原生的 FrameworkElement,比如视频,音频等。虽然在FillSymbol的Fill属性中也能利用Brush类来展现一段视频,但毕竟有些“小 气”,在ElementLayer中可以大大方方的放置Silverlight/WPF元素。虽然在Map控件之外,Grid等布局元素中也能放置 Silverlight的东西,但是ElementLayer的优势在于:当一些非地理数据元素随着地图范围的变化(放大,缩小,平移)的时候,无须在地 图Extent变化后重新计算客户端坐标,再改变这些元素的位置。

    ArcGISTiledMapServiceLayer和ArcGISDynamicMapServiceLayer分别用于加载ArcGIS Server发布的缓存地图服务和动态地图服务。GraphicsLayer和FeatureLayer,可以说这是API中最常用的两种图层,大部分的 程序功能都要基于它们来完成。

  • 相关阅读:
    Atitit.ati orm的设计and架构总结 适用于java c# php版
    Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
    Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
    Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
    Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
    atitit.基于  Commons CLI 的命令行原理与 开发
    atitit.基于  Commons CLI 的命令行原理与 开发
    atitit.js 与c# java交互html5化的原理与总结.doc
  • 原文地址:https://www.cnblogs.com/Zz-maker/p/10095565.html
Copyright © 2011-2022 走看看