第六章 使用Web地图API访问地图服务
以下均掺杂个人理解
书目:Web GIS 原理与应用开发 —— 刘光 曾敬文 曾庆丰 著
6.1 Web地图API
API
:Application Programming Interface,应用程序接口。是编写程序的一个框架,包含了一组封装了底层代码的类与功能。
API并不是一种编程语言,只是某种语言或者某些语言可调用的一组类和功能
6.1.1 Web地图API的选择
- 运行在移动端或者pc端
- 应用程序或者是浏览器查看
- 开发与维护的难度
- 开源API或者是商业API
- 等等方面
6.1.2 主要FOSS类型的Web地图API
6.1.2.1 Openlayers
Openlayers采用面向对象方式开发,并使用来自Prototype.js和Rico中的一些组件。
较为成熟,虽然文档较难理解,但是有大量的实例,还有社区。
6.1.2.2 Leaflet
小巧方便,易于上手,在移动设备上有良好的体验。
强调使用切片地图以及客户端的矢量图绘制。
实例较少
6.1.2.3 D3
常用于绘制图表
将数据绑定到页面的DOM(文档对象模型)上,然后应用数据驱动转换到文档(页面元素),从而实现数据灵活地动画与变换效果。
6.1.2.4 Polymaps
在地图风格化方面有一个类似于CSS的选择器
6.1.3 主要的商业Web地图API
6.1.3.1 谷歌地图与必应地图API
6.1.3.2 ArcGIS APIs
6.2 使用Web地图API的基本步骤
虽然API使用方法不尽相同,每种API都是自己的优点和缺点,但是这个API都有一些通用模式与过程。
该方式为HTML页面引用方式,若使用框架开发,还需了解框架的具体操作方法。
6.2.1 引用Javascript与样式文件
在使用前,需要在html的head标签内,对API进行引用。
需要注意的是:引用的js越多,页面加载时间越长(页面的js是通过网络请求获取到的)
引用API的方式:
- 将API下载并部署到自己的服务器上,这样做的好处是将加载时间减到最小,而且可以自定义API。
- 引用他人服务器上的API。内容分发网络(Content Delivery Network ,CDN)站点专门用于存储通用API。
对于Web地图API,在引用js文件的同时,一般会有配套的样式文件(css)需要引用。
6.2.2 地图div与对象
在创建地图对象前,需要在页面创建一个div元素,用于显示地图,一个div对应一个地图对象,一般通过id属性进行绑定。
6.2.3 Layer对象
在某种意义上,图层就代表WMS或者切片地图的一个Web服务,它本身也可以包含许多数据图层
图层对象通常是一个抽象类,提供一系列通用的属性方法,开发人员不能直接对其进行实例化,而是实例化它的子类(如ArcGIS APIs中的WMSLayer、FeatureLayer、GraphicsLayer等等)
创建好Layer对象后,不要忘记将其添加至地图对象中
6.2.4 图层样式化机制
对于从服务端获取的地图元素来说,样式已经提前定义好了,而对于在客户端动态绘制的地图元素,我们需要为其定义样式,API会提供一些定义样式的方法,包括符号、填充颜色、填充样式等等。
6.2.5 事件与交互元素
最常用的交互有两类,一类为鼠标或键盘事件,一类为图层显示控制
API会提供地图的事件监听,创建监听对象时可以定义事件发生的回调函数
图层显示控制即控制某个图层的显示与隐藏。需要注意的是,切片服务无法控制内部某个图层,只能控制整体
6.2.6 异步处理
在Web地图API中,大部分操作都是异步的,这就要求我们处理好代码运行的先后问题。
若没有处理好,在运行过程中通常会出现的状况是某结果变量为undefined。
最基础的解决方案是在回调函数中定义回调函数
,若回调过长会出现回调地狱,大大降低代码可阅读性。
较好的解决方案为使用promise
或promise配合es6的async函数
。
有些API也提供链式调用
的方案。