说明:本月的主要工作都是围绕制作矢量切片这一个核心问题进行的,所以2月的主题就以这个问题为主,目前分支出来的一些内容主要包括了TMS(Tile map service),OpenLayers3中的Projection和Resolution以及proj4js在OpenLayers3中的应用,这些在这篇文章之后会继续展开,作为本月的番外内容。
一、GIS数据与OGC标准地图服务
本节主要是介绍一些基础的数据概念以及基本的WebGIS地图服务,如对这些内容已经熟知,可直接跳过本节。
1)GIS中的矢量与栅格数据
熟悉GIS的人应该都知道,在GIS中的数据分类有很多种方式,其中最常用的一种是根据数据组织结构方式的不同而分类成矢量数据和栅格数据的两种类型。其中栅格数据以
二维矩阵的形式来表示地理空间信息的数据结构,其中数据的最小存在单元是以像素的形式存在,可以理解为和图片的组织结构类似,以分辨率等特征作为精度的定义标准。
栅格数据
矢量数据
而矢量数据则是试图利用点、线、面等几何要素来表现这个世界,其数据结构紧凑精准,数据图形质量好,有利于地理信息检索与网络传输等。其中矢量数据的最小单元是以点的形式存在,点构成线,线组成面,面构造出体。所以,我个人看来矢量数据应该更贴近于信息的精准分析与计算,而栅格数据则偏重于信息的表达(主要受制于当前图像处理技术的瓶颈)。
2)OGC地图服务
在WebGIS中,访问数据是通过访问服务器端的数据库来获取数据,鉴于GIS数据的特殊性,在这一套标准的请求响应模型中引入了一套基于OGC标准的地图服务标准,在
这里我只介绍几个与本文有关的服务(如果你需要了解一个完整的内容,在这里可以到很多资料:blog.csdn/wildboy2001/article/details/7743350):
- WMS(Web Map Service)
Web地图服务,利用地理空间信息的数据输出地图,地图本身只是一张图片,其中包括了图片的宽高、坐标系统、图片格式以及渲染方式,也正是因为本身的简洁性,读取传输速度都比较快,要高于WFS
//WMS请求实例
localhost:8080/geoserver/szdata/wms?SERVICE=WMS&VERSION=
1.1.1&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true
&LAYERS=szdata:DLZXX_2011_PL_10000_3857&SRS=EPSG:4326&STYLES =&WIDTH=1347&HEIGHT=336
&BBOX=113.68754425048829,22.5346435546875,114.61245574951172,22.
7653564453125
- WFS(Web Feature Service)
Web要素服务,请求获取要素,最小单元是以要素的形式存在的,用户可以通过与——请求获得的矢量数据——在前端渲染绘制的几何图形进行交互,从而达到对矢量要素的控制。
//WFS请求实例
localhost:8080/geoserver/wfs?service=WFS&request=GetFeature &version=1.1.0&outputFormat
=application/json
&typename=szdata:DLZXX_2011_PL_10000_new3857
- TMS(Tile Map Service)
(详细内容见番外篇)
所以,为了带来更好更快的用户体验,目前许多主流WebGIS应用都采用了栅格切片技术,通过缓存切片的形式使得地图数据的浏览体验更顺畅。打开你的浏览器,F12出控制台,进入任意一家地图供应商提供的地图应用,你会发现大部分的地图数据都是以切片的形式请求获得的,我在这里就不举例了。栅格地图的切片应用是很广泛,可在我们的日常工作中遇到的需求往往要比这些功能需求较浅的商业性地图复杂,有的时候用户甚至会提出需要地图配的编辑修改功能这样的需求,这是商业主流地图所达不到的,因为栅格
切片在完成切图之后,你所能控制的最小单位是一张图片,失去了对图片上地理信息的交
互能力。
总结来看,栅格切片存在以下的几个缺点:
- 地图数据一次渲染,无法修改
- 无交互能力
那可否用WFS来替代呢?直接用WFS请求获取矢量数据,这样不就获得了交互能力吗?当然,如果在你的应用中矢量数据量不大的情况下,这样做也是可行的,但是当一旦
数据量大了起来,前端对于数据的请求和响应处理渲染会提高客户端的硬件门槛,而频繁3tiles
的交互操作也会对服务器产生压力。
直接加载的矢量数据与对栅格地图进行切片这两种方式看起来好像有些互补,如果能
将这二者结合起来的话应该会很美好: 矢量+切片=矢量切片。
二、矢量切片
1)什么是矢量切片?
和栅格切片一样的思路,以金字塔的方式切割矢量数据,只不过切割的不是栅格图片,而是矢量数据的描述性文件,目前矢量切片主要有以下三种格式:GeoJSON,
TopoJSON和MapbBox Vector Tile(MVT)。
栅格切图后文件存储形式
矢量切图后文件存储形式