0x01 GIS相关概念介绍
地图规范组织
OGC(Open Geospatial Consortium)组织定义了很多关于互联网地图的规则,开发者,企业,组织机构依照这个规则进行地理信息系统的开发。
地图数据源分类
a. 以图片作为地图数据源,例如tiff,JPG,PNG等等。【image类型】【栅格数据】
b. 矢量形式的图形。就像在arcgis里我们用编辑工具绘制的那种第五轮廓的多边形。还有一些不随放大程度改变而失真的SVG图形。【vector类型】【矢量数据】
c. 一个shape在数据库中实际上就是一张表,每一个要素(feature)是表中的一行或者多行。shape的属性数据和普通的二维表一样存储,而几何图形信息被存放在一个叫geomtry的字段里。这个字段能够用文字描述图形形状信息。【GeoJSON】
GeoJSON的强大之处在于它可以作为一种数据格式媒介,和其它几种数据格式进行相互转化,就例如上文提到的可以和数据库表格做转化,他也可以直接和shape格式的文件做转化。非常方便。而且它保存的数据是完整的,数据体积也很小。
d. 以xml等标记语言形式保存上述地理数据的的方法。【KML】【GML】
地图切片
在实际地图使用过程中,由于服务器性能开销等原因,当需要对地图局部进行精细浏览时,不可能每次都加载所有区域的高分辨率图像,故发明了切片技术。
对于栅格数据,切片的实现原理是只加载需要查看的局部小图,在实际工程中往往使用地图分层级,切割瓦片的形式实现。
对于矢量数据,被切割完的数据还是用GeoJSON格式来展现,只不过这时候的GeoJSON里面又多了许多关于切片和级别的描述字段。
地图服务
OGC组织根据上面讲到过的数据源分别为他们设计了一些服务。
第一种image类型的,图片格式的地图被封装成了叫做WMS的服务。意思是web map service,网络地图服务。这个最简单也最基础,就是把你的数据源想方设法转化成一张和你数据源长得一样的图片。【WMS】
供用户浏览,用户可以放大缩小这张图片,但是无论怎么放大缩小,它就只是一张图片。
第二种矢量类型的数据源被封装成了WFS服务。意思是 web feature service 网络要素服务。意思是用户所看到的是要素。是矢量图形,而不是一张图片。那么与图片相比要素有什么好处呢?【WFS】
大致有这么两点:第一,矢量图形不会随着放大程度的改变而失真,图片做不到。第二,是两要素方便与交互和编辑,修改形状等,这一点图片也做不到。
第三种是image进行切片后的服务,叫做WMTS,全称 web map tile service 网络地图切片服务。WMTS比WMS 好的地方就是它能够加快加载速度,提升加载效率。可是它同时也失去了灵活性,你看的每一个区域都是被提前划分好的,限制在固定条带内的。【WMTS】
还有一种服务虽然不是OGC提出的,但在实际使用中较为通用的服务,叫做TMS(Tiled Map Service),即瓦片地图服务。其不同之处在于切片为正方形,而WMTS的切片可以是矩形,另外TMS的金字塔横纵坐标与WMTS是相反的。【TMS】
0x02 WebGIS介绍
后端
Mapserver
MapServer是基于胖服务器/瘦客户端模式开发的webgiS平台,读取地理数据,并利用GD库绘制好jpg/png/gif格式的图片后再传回客户端浏览器。MapServer支持Windows、UNIX、Linux等多种平台。MapServer支持OGC的WMS/WFS服务规范。MapsServer本身是由C语言编写的程序,提供了两种开发模式,一种是基于CGI的,另一种是MapScript方式。MapScript支持的语言:PHP,Perl,Python,java,Tcl,C#等。
GeoServer
OpenGIS Web 服务器规范的 J2EE 实现,利用 GeoServer 可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息。
兼容 WMS 和 WFS 特性;支持 PostgreSQL、 Shapefile 、 ArcSDE 、 Oracle 、 VPF 、 MySQL 、 MapInfo ;支持上百种投影;能够将网络地图输出为 jpeg 、 gif 、 png 、 SVG 、 KML 等格式;能够运行在任何基于 J2EE/Servlet 容器之上;嵌入 MapBuilder 支持 AJAX 的地图客户端OpenLayers;除此之外还包括许多其他的特性。
前端
Openlayers
OpenLayers是一个开源的项目,其设计之意是为互联网客户端提供强大的地图展示和操作功能以及灵活的扩展机制。
OpenLayers支持0GC 制定的WMS、WFS 等服务规范,可以通过远程服务的方式,将以OGC服务规范发布的地图数据加载到基于浏览器的 OpenLayers客户端中显示。目前,OpenLayers所支持的数据格式有XML、JSON、GeoJSON、MVT、GML、GPX、KML、WFS、MVTWKT(Well-Known Text)等在其format名称空间下的各个类里实现了具体读/写这些数据格式的解析器。
因此,基于OpenLayers能够利用的地图资源非常丰富,提供给用户最多的选择,包括公共地图服务,如0penStreetMap、Google 地图、Bing地图、Baidu地图等,0GC 资源(如WMS、WMTS、WFS),其他矢量数据以及简单的图片等。
Leaflet
Leaflet 是一款轻量级,用于移动友好交互式地图的JavaScript库,代码总大小比较小。Leaflet利用HTML5和CSS3在现代浏览器上的优势,同时也可以在旧浏览器上访问。
它可以通过大量插件进行扩展,具有漂亮的、易于使用的、文档丰富的API,使用上也比较简单。
同 OpenLayers 一样,因为是开源就会有更多的人选择,另外 Leaflet 轻量易用的特性,很多Web或者GIS应用在做简单的地图展示的时候,都会优先选择。
Cesium是一个跨平台、跨浏览器的展示三维地球和地图的javascript库,其具备如下特点:
- 支持2D25D3D形式的地图展示
- 可以绘制各种几何图形、高亮区域,支持导入图片,甚至3D模型等多种数据可视化展示。
- 可用于动态数据可视化并提供良好的触摸支持,支持绝大多数的浏览器和mobile。
- Cesium还支持基于时间轴的动态数据展示
Cesium需要浏览器支持WebGL,可以通过CesiumJS官网提供的一个HelloWorld例子来测试自己的浏览器是否支持Cesium。(推荐使用Chrome)