ArcGIS的图层

ArcGIS的图层
 最后更新于 2024年10月02日 23:00:09

图层

图层是用来在 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 中最常用的两种图层,大部分的 程序功能都要基于它们来完成。

FeatureLayer图层

查询模式

要素图层有不同的查询显示模式。

  • MODE_AUTO 如果图层中的要素总数小于maxRecordCount值,且vertexes总数小于250000,则使用快照模式。否则,采用按需模式
  • MODE_SNAPSHOT 快照模式,一次加载所有的要素,当移动缩放地图范围时,不再请求服务器。服务端对该模式有最大数据量限制,要素总数超过最大阈值后,服务端不返回超出的数据。该上限阈值可在ArcCatalog中更改。
  • MODE_SELECTION 选择模式,用矩形选择工具绘制一个范围后,加载范围内的要素。
  • MODE_ONDEMAND 按需模式,按照当前视图中的地图范围向服务器请求所要显示的要素。

MODE_SNAPSHOT修改上限阈值:

Catalog中找到需要操作的Feature图层,先停止服务,然后右击选择Service Properties,在 Parameters选项卡下设置Maximum Number of Records Returned by Server,最后重启图层服务。

Loading...