该部分内容与部分插图、学习框架的主要参考的网站与博主如下(也趁机分享给大家):
OSGeo开源WebGIS在线教程:http://webgis.cn/
OSGeo《地理信息系统原理》:https://www.osgeo.cn/gis-tutorial/index.html
OSGeo《Python与开源GIS》:https://www.osgeo.cn/pygis/index.html
博客园李晓晖:http://www.cnblogs.com/naaoveGIS/
GitHub/知乎/公众号 作者giscafer:https://github.com/giscafer;作者小专栏:https://xiaozhuanlan.com/webgis
GitHub博主Tek Kshetri:https://github.com/iamtekson
GitHub博主Emmanuel Jolaiya:https://github.com/jeafreezy
其他:https://github.com/petedannemann/gis-programming-roadmap/blob/master/README.md
https://medium.com/geekculture/web-gis-development-starter-guide-e9ecd32e7fad
还包括一些公众号推送,包括老靳的WebGIS:#从0开始的WebGIS (qq.com),giscafer公众号文章:认识 WebGIS (qq.com),测绘数据分析:WebGIS 开发人员的学习指南 (qq.com)等。
1、 WebGIS定义
WebGIS可以拆分为Web+GIS。Web按照我们一般人的理解就是网页、网站,但是这只是我们看到的最表面的东西,它更是分布式图形信息系统。而GIS即是地理信息系统,GIS被定义为由计算机软硬件支持和不同方法组成的系统,该系统被设计用来进行空间数据等的采集、管理、处理、分析、建模和显示,以便解决复杂的规划和管理问题。
Web是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统,由于 HTTP 协议采用基于C/S(Client/Server)的请求/应答机制,具有较强的用户交互能力,可以传输并在浏览器上显示多媒体数据。而GIS中的信息主要是需要以图形、图像方式表现的空间数据,用户通过交互操作,对空间数据进行查询分析。所以,WebGIS就是利用Web技术来扩展和完善地理信息系统的一项技术,人们基于WebGIS可以利用Web来实现空间数据的采集、处理、分析和显示等。
OSGeo将WebGIS定义为:一个基于超文本传输协议的B/S模式(Browser/Server,浏览器/服务器模式)分布式计算机应用系统,在Internet或Intranet环境下存储、管理、分析、发布和共享地理信息;并且其将WebGIS看作是Network GIS和Internet GIS的一个子集。
2、 WebGIS特点
主要特点是:面向对象、分布式、可互操作。
开放性:WebGIS是一个开放的系统,可以实现数据的客户端共享、跨平台运营、容易集成;不仅仅可以实现不同来源、尺度、格式的地理数据的共享,还可以实现与数据库系统等的集成,支持JavaScript、Python、Java等基础,支持c/s模式。
网络适宜性:WebGIS更适合在万维网中运行,共享空间数据,降低系统的数据分发、运维成本。
支持数据分发和分布式处理:GIS服务器为用户提供地理数据目录服务、地理数据访问服务、地理空间分析服务、地理模型系统服务和地理空间可视化服务。通过互操作技术,处理过程可以由多个GIS服务器来协调和完成,这些服务器共享分布的数据对象,并在多个不同的平台上协同运行,以最大限度地利用网络资源(http://webgis.cn)。
3、 WebGIS的组成/架构
简单来说,WebGIS架构如下图所示,主要是包括三层:数据层(数据库层)、逻辑层(地图服务器中间层)、客户端(浏览器)。
插图来源公众号:giscafer
4、WebGIS优势
平台独立性:基于浏览器实现访问和分析
更广泛的准入:同时访问不同服务器的多个数据
降低系统成本:不需要专业的GIS软件、学习和维护成本低
操作更简单:web浏览器操作复杂性更低
计算负载均衡高效:相比传统的GIS软件依赖用户的电脑处理器性能,WebGIS更加充分利用网络资源
5、主要开源WebGIS(主要内容源于OSGeo)
相比于大家比较熟悉的开源GIS桌面软件(QGIS、SAGA、GeoDa等),目前比较流行的服务器端软件包括Geoserver、MapServer和QGISSERVER,以及开源的GIS数据库项目,如PostGIS/PostgreSQL空间数据库,此外还有一些开源项目,如数据转换工具(如GDAL/OGR)和地图投影算法库(如Proj和GeoTrans),这大多数软件都得到了osgeo的支持。
而从WebGIS的角度来看,开源工具可以分为两大类:组件产品和全栈产品。组件产品可以简单理解为该软件是一个软件单元,安装过程不捆绑安装其他的,而全栈产品安装使用中需要捆绑安装其他软件单元。
5.1 组件产品
MapServer(http://www.mapserver.org)
MapServer是一个用于在Web上发布空间数据和创建交互式地图应用程序的开源平台。它自20世纪90年代中期出现以来,被认为是成熟稳定的,并不断发展。其主要关注点是从多个层生成地图,包括基础图像和空间数据集。此外,还提供智能标签,包括先进的排版和布局、碰撞检测;可以读取和提供各种格式的空间数据,包括Shapefile、WMS、GDAL、PostGIS和GeoTIFF;常用于生成地图切片及其MapCache扩展;拥有支持各种语言的应用程序开发的库,包括Python、Perl、Ruby、Java和PHP。
PostGIS(http://postgis.net/)
PostGIS是支持空间查询的PostgreSQL数据库的扩展。PostgreSQL既是关系数据库又是对象数据库,被广泛认为是最先进的开源数据库,类似于Oracle。PostGIS支持各种空间查询,包括邻近度、半径、边界框、碰撞/重叠检测等。在SolVES等生态或地理模型中也经常使用。
Leaflet(http://leafletjs.com/)
Leaflet是一个侧重于前端用户界面的JavaScript库,它支持多个基本层和几何图形类型的组合,并涵盖了与OpenLayers类似的领域,但功能略有减少。其相对于OpenLayers的优势在于它对移动设备的出色支持、巨大的产品价值、简洁的极简主义设计以及对性能的强烈关注。
5.2 全栈产品
以下产品以“堆栈”或“捆绑”的形式分发,它们是模块化产品的预配置组合。有些在添加配置层和基础层之后可以按原样使用,所有这些都可以进一步扩展以创建自定义应用程序。
GeoServer(http://geoserver.org/display/GEOS/Welcome)
Geoserver主要基于Java语言,其提供了在面向服务的体系结构中创建和编辑地理空间数据以及提供地图的基本功能;使用OpenLayers模块并提供和实现Web地图服务(WMS)标准;使用GeoTools框架,该框架涵盖了MapServer的一小部分功能。与Geoserver本身一样,该框架也是用Java编写的。Geoserver主要吸引习惯使用Java工具和平台的开发人员。
GeoDjango(http://geodjango.org)
GeoDjango是Django应用程序框架的一组空间扩展。Django主要由Python编写,是使用Python构建Web应用程序的最流行的通用框架之一。与GeoMoose或MapGuide不同,它不提供开箱即用的应用程序,而是一组精心设计的构建块,用于构建自定义应用程序。与上面描述的一些其他堆栈产品不同,它对堆栈中将使用哪些其他地理空间工具的假设较少,并通过一系列设计清晰、文档齐全的API提供集成点。它可能会吸引那些希望在构建应用程序时有更多选择和控制的开发人员,以及那些更喜欢使用Python语言的开发人员。
MapFish(http://mapfish.org)
MapFish是来自Python社区的另一个堆栈产品。它基于(Python)Pylons框架,以及(基于Java的)OpenLayers和ExtJs框架。与GeoDjango不同,它提供了一个简单的开箱即用的应用程序,可以进行定制和扩展;还支持通过插件在Rails和PHP中进行开发。它提供了一个干净、紧凑的起点,可以很容易地在各种语言中扩展。与GeoDjango相比,它的优势在于为开发人员提供了更多的选择,因此他们可以更快地开始使用。它吸引具有Python或JavaScript经验的开发人员,以及重视其干净、紧凑设计的Rails/PHP开发人员。
6、WebGIS学习路线
全部内容见公众号