在地理信息系统的相关开发过程中,采用一种好的方式去展现地图,以及在地图中融合各种各样的空间数据,是很重要的。
ArcGIS 就是一个用于创建、管理、共享和分析空间数据的优秀平台,包含了各种地图服务组件、移动和桌面应用,以及开发者工具。
这里记录下学习 ArcGIS 的过程,方便以后查看,由于自己主要开发 web GIS 方面,即网页版地图信息系统,所以 ArcGIS API for JavaScript 是重点。
参考文章:
https://www.esri.com/en-us/about/about-esri/overview(About Esri)
https://developers.arcgis.com/labs/what-is-arcgis/(What is ArcGIS?)
https://developers.arcgis.com/javascript/(ArcGIS API for JavaScript)
http://www.cnblogs.com/daihere1993/p/4999760.html(对一些ArcGIS for JS的API的一些理解)
1、背景知识
(1)GIS
GIS 是 geography information 和 system 的缩写,表示地理信息系统。
GIS 是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统
(2)Esri
Esri 是 environment system research institute 的缩写,是一家美国环境系统研究所,成立于 1969 年。
Esri 开创了利用 GIS 解决问题的先河,是世界最大的 GIS 技术提供商。
Esri 相信位置智能(科学有效利用地理信息)在每个组织中都能发挥数据的全部潜力。
(3)ArcGIS
ArcGIS 就是 Esri 建立的世界上最强大的地图和空间分析软件,用于 GIS 的开发。
准确来说,ArcGIS 是一系列地图相关软件和服务的统称,所以称为管理地理信息的一个平台,主要的如下:
1、核心软件: ArcGIS 在线版和 ArcGIS 企业版
2、桌面软件:ArcGIS pro 和 ArcMap
3、辅助软件:
- Collector for ArcGIS - 移动数据采集
- Navigator for ArcGIS - 高度可定制的移动路由解决方案
- Operations Dashboard for ArcGIS - 资源实时监控和自定义工作台
- Explorer for ArcGIS - 发现和查看组织中的 GIS 服务
- Workforce for ArcGIS - 用于协调现场工作的移动和web应用
- Survey123 For ArcGIS - 轻量级数据收集和调查
4、开发者手册
- ArcGIS REST API
- ArcGIS API for JavaScript
- ArcGIS Runtime SDK for Android
- ArcGIS Runtime SDK for iOS
- ArcGIS Runtime SDK for Java
- ArcGIS Runtime SDK for macOS
- ArcGIS Runtime SDK for .NET
- ArcGIS Runtime SDK for Qt
- ArcGIS API for Python
2、ArcGIS API for Javascript 的相关概念
在进行 Web GIS 的开发过程中,查看 ArcGIS API for Javascript 是很重要的,主要还是看官网的例子和 API,下面只是一些简单的理解。
(1)Map、MapView、SceneView
Map 是每个地图控件中必须引入的类,要生成地图,进行地图操作,都需要生成一个 Map 对象。
而 Map 的载体则是 View,其中有两种比较重要:
MapView 表示以 2D 的形式展示地图,SceneView 表示以 3D 的形式展示地图
(2)geometry
geometry 指代各种几何图形,以及其相关操作,具体分为如下:
1、Point:点
2、Polyline:多线
3、Polygon:多边形
4、Multipoint:多点
5、ScreenPoint:屏幕点,表示相对于视图左上角的像素点
6、circle:圆,是一种特殊的多边形
7、coordinateFormatter:用于在点和表示点的特殊字符串之间进行相互转换
8、Extent:通常用于设置或表示显示区域的范围,用坐标进行表示
9、Geometry:是各个几何图形的基类
10、geometryEngine:几何工具,主要用于测试、测量和分析多个几何图形直接的空间关系,当然得在同一个空间参考系
11、geometryEngineAsync:异步的几何工具,基本同 geometryEngine
12、HeightModelInfo:定义垂直坐标系的特征,为了避免渲染出在不相容的垂直坐标系的图层
13、mesh :网格,是一种通用的,由带有属性的顶点组成3D客户端几何图形
14、projection:投影,用于将几何图形从一个空间引用转换为另一个空间引用
15、SpatialReference:空间参考系,由 WKID 或 WKT 定义
(3)graphic
graphic 指代单个图形。所有的几何图形 geometry,都需要通过 graphic 进行添加,相当于各个图形的载体。
graphic 中 geometry 代表具体是什么图形,而 symbol 则用来表示如何进行展现,这两个属性对于绘制 graphic 来说是必需的。
如下添加点 point:
(4)GraphicsLayer
从上面 graphic 的添加方式来看,单个 graphic 可以通过 view 的 graphics 进行添加。
而如果想要一次添加很多个几何图形,就可以用 GraphicsLayer 来作为载体,从而使用 map 进行添加,方便进行管理。如下:
(5)FeatureLayer
通过 GraphicsLayer 添加各个几何图形,有个好处就是可以添加各种类型的几何图形在一个图层里。
但 GraphicsLayer 缺乏很多对图形属性的操作,比如查询、过滤等。
FeatureLayer 对属性的查询和过滤等有很好的支持,但一个 FeatureLayer 只能加载一种类型的几何图形。
可以说 FeatureLayer 是 GraphicsLayer 的一个变体,构造方式上也是格式有所不同,如下:
其中 source 所含的要素集合,实际上就是 graphics ,即几何图形的集合,只是几何图形都是同种类型,和 geometryType 保持一致。
而要素的展示方式,则是由 renderer 来指定了,其中实际上也就是 symbol。
(6)QueryTask、Query
要素图层 FeatureLayer 要进行属性查询,可以用其自带的 queryFeatures() 方法等,不过需要先创建 FeatureLayer。
如果不想创建 FeatureLayer,但有其地址 url ,则可以用 QueryTask 创建一个查询任务,来进行查询。
Query 主要是用来构造查询参数,传入 QueryTask 的 execute() 方法,即可实现条件查询,如下: