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

时间: 2024-10-24 09:27:02

arcgis图层 GraphicsLayer与FeatureLayer的相关文章

ArcGIS图层介绍

什么是图层 图层是用来在 ArcGIS 产品套件中显示地理数据集的机制.每个图层代表一种数据集(可以是地图服务.图形或是矢量数据),并指定该数据集是如何描绘使用一组属性的. 包含一个地图控件的每个应用程序是通过添加一系列图层组装的.图层以特定的顺序显示在地图上,列在最底部的图层在地图的最上面显示,也就是先添加的图层在下面显示(原理类似于“栈”).比如,在XAML代码中,最靠上的图层在显示时会出现在Map控件的最底端,如图: 图层介绍 第一个图层的空间坐标系SpatialReference决定了地

GraphicsLayer与FeatureLayer区别 (转)

转自http://xiaobaila.blog.163.com/blog/static/189705129201152711528852/ 本文内容:GraphicsLayer,FeatureLayer,自定义地图符号.  我们的应用场景是对超市数据进行展示,查询和分析,因此第一步当然是要将超市显示在地图之上.如所有的GIS软件一样,要将数据加载到地图里面,需要图层的概念,这里我们也需要合适的图层,将超市数据加载进来.  先看一下ArcGIS API for Windows Phone/Silv

ArcGis 中GraphicsLayer图层新加元素后map怎样更新

============问题描述============ RT,GraphicsLayer图层新加元素后,map没有更新,但是removeAll()方法却好使,请大神指点一下... ============解决方案1============ 没用过ArcGis啊,只能帮顶下了. ============解决方案2============ 感谢@,但是恕本菜才疏学浅,木有用过 ============解决方案3============ \samples\Display-Information\Dr

ArcGIS——图层与数据

该文章翻译至ArcGIS官网教程Layers and data,采用了Google翻译辅助,对不恰当的名称和语句做了修改.有能力的建议直接阅读英文原版. 1. 介绍 图层是可以在Map对象中使用的数据集合.可以在客户端上创建图层数据,由ArcGIS Online和ArcGIS Enterprise托管,或由外部服务器托管. 2. 数据--要素的集合 图层通常用于管理和显示大量要素.要素是地理位置或实体的记录.每个要素都包含为几何图形(点,折线或多边形)定义的空间坐标和存储其他信息的属性字段.这些

Arcgis for Js之featurelayer实现空间查询和属性查询

空间查询和属性查询是常用的两种对数据的检索与查询方式,在本节,将讲述Arcgis for Js下如何实现featurelayer的这两种查询方式,先贴图给大家看看: 实现界面 属性查询 空间查询 看完了效果,下面说说我的实现思路. 首先,实现查询的关键是Query,属性查询时query.where来实现,空间查询时query.geometry来实现,具体代码如下: 1.属性查询 on(dom.byId("query"), "click", function(even

Arcgis for Javascript之featureLayer图和属性的互操作

说明:主要实现加载FeatureLayer与显示属性表,并实现属性表与地图的联动,首先,看看实现后的效果: 显示效果 如上图所示,本文章主要实现了以下几个功能:1.FeatureLayer属性表的分页加载与显示:2.属性表和地图的互操作,包括鼠标经过时在地图上显示名称并高亮显示.点击列表显示对象的信息框,如下图: 显示信息框 下面,说说具体的实现思路与代码. 1.FeatureLayer属性表的获取 获取FeatureLayer的属性表,首先得创建FeatureLayer对象,如下: ftch

arcgis图层控制

1 define(["dojo/_base/declare"], function(declare){ 2 var mapEvent = null; 3 return declare(null,{ 4 "id": '', 5 "layer": null, 6 "treeList": [], 7 "map":null, 8 constructor: function(id,layer,map){ 9 this

ArcGIS图层添加字段出现:“定义了过多字段”

首先,我图层数据格式为mdb,也就是Access数据库 Access一个表最大支持255个字段,可是我的才添加第一个字段就出现“定义了过多字段”的错误 打开ArcMap添加字段也是出现这个问题 原因:这个问题很简单,那是因为Access数据库没有压缩,Access的字段数量最多确实是255个,但是在没有压缩的情况下,它连你删除的也计算在内, 比如你原本有65个字段,现在删除了15个,又增加了5个,在数据库没有压缩的情况下,Access的计算方法是:65+15+5=85个,也就是说虽然你现在只有5

ArcGis for Android 添加及更新GraphicsLayer图层

ArcGis中GraphicsLayer图层图层用来添加标记画线等等,例如点击定位后,在地图上标出当前的位置同时以当前位置作为地图中心可以用如下代码: Drawable drawable = getResources().getDrawable(R.drawable.arrow); PictureMarkerSymbol picSymbol = new PictureMarkerSymbol(drawable); Point loc= new Point(1.4191862462692365E7