【二】ArcGIS API for JavaScript 4之基础概念(上篇)
本篇博客主要介绍 ArcGIS API for JavaScript开发中常接触到的几个概念(模块)。深入了解这些概念或模块,便于开发者更好地理解和运用ArcGIS API for JavaScript开展具体的开发工作。
1、地图(Map)
Map 是承载图层的容器,主要用于呈现地图服务、影像服务、 WMS 服务等。一个图层只有被添加到 Map 中,才能在View中显示出来,通过MapView(用于查看二维数据)或SceneView(用于查看三维数据)进行渲染。
单个地图可以由多个视图引用,所以所有用户与地图图层的交互都在View视图上进行处理,而不是地图Map。这也是4版本与3版本的重要区别之一。
2、视图(View)
View用来展示Map以及包含的图层,它提供了查看地图的组件以及交互方法。在4版本中提供了两种类型的视图:MapView
和SceneView
。 MapView以2D、 SceneView以3D形式渲染Map及其图层。 创建视图时,需要实例化MapView或SceneView。
- MapView
下面是一个最简单的MapView创建示例,包含了map
和container
两个必需的属性:
require(["esri/Map", "esri/views/MapView"], function(Map, MapView) {
// 创建Map实例
var map = new Map({
basemap: "streets"
});
// 创建MapView实例并设置map属性为上一步的map实例
var view = new MapView({
map: map,
container: "viewDiv"
});
});
除了负责渲染Map及其元素外,MapView还处理用户和地图之间的交互。 如设置比例尺、视图中心点、缩放级别等等。
view.scale = 24000;
view.center = [-112, 38];
view.zoom = 13;
还有一些我们常常用到的事件:
goTo()
根据给定的目标参数为视图添加动态的切换效果
when(callback?, errback?)
创建类的实例后调用when(),实例加载后运行callback,加载失败时运行errbackhitTest()
常用在地图点击事件交互,如果对相交要素进行了点击,返回与指定屏幕坐标相交的图层的最顶层要素。图层类型包括:GraphicsLayer
,FeatureLayer
,CSVLayer
,GeoRSSLayer
,KMLLayer
和StreamLayer
。
view.on("click", function (event) {
// 获取指定图层中的graphic
view.hitTest(event).then(function (response) {
//判断是否包含相交的graphic
if (response.results.length) {
var graphic = response.results.filter(function (result) {
// myLayer为我们需要的图层
return result.graphic.layer === myLayer;
})[0].graphic;
//读取graphic属性
console.log(graphic.attributes);
}
});
});
whenLayerView()
获取在指定图层在视图上创建的LayerView,常用在与图层的事件交互中,如点击地图高亮显示对应的要素。
//实例化一个要素图层
var layer = new FeatureLayer(url);
map.add(layer);
view.whenLayerView(layer)
.then(function(layerView) {
// 获取到要素图层对应的layerview
})
.catch(function(error) {
//创建视图时出现错误
});
3、图层(Layer)
图层是Map的基本组成部分,即一个代表真实世界的矢量图形或栅格图像形式的空间数据集合。图层是承载服务的载体(GraphicsLayer 除外),通过ArcGIS for Server 将 GIS 资源作为服务发布共享,图层与这些服务相关联,可在浏览器端展示并使用相应的服务。图层在 Map 中是有一定的顺序,当一个图层加入到 Map 中,后加入的图层在Map 的最上层。
图层主要用于查询、可视化、分析,常用的图层类包括:TileLayer
,MapImageLayer
,ImageryLayer
,GraphicsLayer
,FeatureLayer
,SceneLayer
等等。具体介绍可见Layer
常用的属性:
- id:图层id标识,如果定义了id属性,可通过Map的
findLayerById()
方法获取对应的图层对象; - url:图层对应的服务访问地址;
- loaded:图层已加载标识,当改属性为true,即图层已加载到视图;
- loadStatus:图层加载状态,包括:not-loaded、loading、loaded、failed,我们可以通过监听该属性在图层加载的补贴阶段执行相应的操作;
- maxScale/minScale:定义图层可见的比例尺范围;
- opacity:不透明度,
常用的方法:on(type, listener)
、refresh()
、when(callback?, errback?)