图层是Map最基本的组件。它是表示现实世界现象的矢量图形或光栅图像形式的空间数据的集合。图层可能包含存储矢量数据的离散特征或存储栅格数据的连续像元/像素。
对于基于矢量的图层,例如FeatureLayer和GraphicsLayer,图层中包含的每个要素都有一个Geometry,允许将其渲染为具有视图空间上下文的Graphic。图层内的要素还包含提供附加信息的数据属性,这些信息可以在弹出窗口中查看并用于渲染图层,也可以根据这些信息进行属性查询与空间查询的操作。
/layers中的API即图层实例化的API,用来实例化发布的服务图层。可以使用map.add来添加layers。后加入的图层时放置于最上方的。
FeatureLayer是一种比较常用的图层类型,为矢量图层。继可以创建单个图层,包含属性信息,可以查询、分析、和呈现可视化数据。例如点图层、线图层、面图层等。FeatureLayer有具体的属性,可以根据这些属性为图层添加popup,弹窗并显示地图要素的属性信息。
新建一个FeatureLayer的图层时,需要传入一个url值,这是ArcGIS Server发布的服务,需要特别注意的是,想要发布一个矢量服务时,不能利用shp文件来发布,需要将地图要素放置于gdb库或其他数据库中,必要要存放在数据库中的地图要素才能发布矢量服务。
import FeatureLayer from 'arcgis/core/layers/FeatureLayer'
const featureLayer = new FeatureLayer({
url:
"https://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Landscape_Trees/FeatureServer/0"
});
map.add(featureLayer);
继承自Layer,是图形数据集中展现的地方。GraphicsLayer是保留在内存中的一种图层(与ArcMap、ArcGIS Engine、ArcGIS Server ADF程序中的相应概念类似),顾名思义是很多Graphic的集合,而所有与用户交互的内容通常都用Graphic来显示。比如多边形查询中用户画出的多边形,属性/空间查询结果中的所有要素(Feature)等内容,都是Graphic。
可以说,除了地图本身,基本上看到的所有与地理位置有关的东西都可以用Graphic来表示。Graphic对象有3个重要的属性:Geometry,Symbol和Attributes。
Geometry代表了一个Graphic的几何形状(可疑是点、线、面任意一种)或地理位置,而Symbol则表示Graphic的呈现样子,比如颜色、效果,同时有了这两个属性(缺一不可),Graphic就可以显示到地图上了。而Attributes是键值对集合,可在里面存储任意类型的对象,比如一个要素的属性信息。
import Graphic from 'arcgis/core/Graphic'
import Graphic from 'arcgis/core/geometry/Polyline'
import Graphic from 'arcgis/core/symbols/SimpleLineSymbol'
import GraphicsLayer from 'arcgis/core/GraphicsLayer'
const graphic = new Graphic({ // 创建线要素的graphic并渲染
geometry: new Polyline({...}), // 设置几何类型
symbol: new SimpleLineSymbol({...}) // 符号渲染
});
const graphicslayer = new GraphicsLayer({
graphics: [graphic]
});
map.add(graphicslayer)
//如果初始化时未赋予graphics属性
graphicslayer.add(graphic)
FeatureLayer与GraphicsLayer的区别是,FeatureLayer中的Graphic一般是从ArcGIS Server发布的服务中读取出来的,因此FeatureLaye中有一个URL属性。而GraphicsLayer中的Graphic一般通过前端代码自行创建,例如在一个人的轨迹追查中,获取到的数据是坐标数据,那么此时可根据需求创建Graphic,得到轨迹路线。
将影像服务资源表示为图层。ImageryLayer 从影像服务中检索和显示数据。影像服务支持访问镶嵌影像、其目录以及目录中的各个栅格。影像服务支持动态访问和平铺访问。
import ImageryLayer from 'arcgis/core/ImageryLayer'
const imagerlayer = new ImageryLayer({
url: "https://landsat2.arcgis.com/arcgis/rest/services/Landsat8_Views/ImageServer"
});
map.add(imagerlayer)
TileLayer 允许您使用由 ArcGIS Server REST API 公开的缓存地图服务,并将其作为切片图层添加到地图中。缓存服务从缓存访问切片,而不是动态渲染图像。要创建 TileLayer 的实例,必须引用缓存地图服务的 URL。
import TileLayer from 'arcgis/core/TileLayer'
const tilelayer = new TileLayer({
url: "https://services.arcgisonline.com/arcgis/rest/services/World_Terrain_Base/MapServer"
});
map.add(tilelayer)
});