一、WebGIS系统定义

WebGIS(网络地理信息系统)是指工作在Web网上的GIS,是传统的桌面GIS在网络上的延伸和发展,具有传统GIS的特点,可以实现空间数据的检索、查询、制图输出、编辑等GIS基本功能,同时也是Internet 上地理信息发布、共享和交流协作的基础。

二、WebGIS系统的模块划分

在企业级WebGIS开发中,一个完整的WebGIS系统一般要包含如下三大模块

业务模块

用户管理、系统设置、统计报表、日志管理

地图模块

地图数据管理、地图数据可视化、空间服务接口

监控模块

在线用户监控、服务节点监控、服务预警

三、设计方案

3.1架构设计图

3.2层次解读

3.2.1UI层:

使用HTML5+CSS3+JS作为基础开发语言、选用具有高度模块化功能的Vue.js+ElementUI框架黄金组合,可以以极低的成本、快速地开发出Web前端页面。一个复杂的前端应用,一定不能使用JQuery这种传统的js框架,因为开发效率太低、维护起来太难。

3.2.2展示层:

这里主要是指的 地图可视化,目前 开源免费的 前端JavaScript地图库 主要有 Openlayers、Leaflet 这两个。

Openlayer 还是Leaflet

这里我强烈建议使用Openlayers,也许你在搜了百度之后,你会搜到Openlayers和Leaflet的优缺点对比,大概就是Openlayers很重量级,Leaflet轻量级,Leaflet更适合带宽有限、需要快速加载的场景,但是我要以我的亲生经历告诉你,血的教训,不要使用Leaflet!!!不要使用Leaflet!!!不要使用Leaflet!!!

Leaflet的轻量,来自于它只实现最最基本的地图功能,而稍微复杂一点的功能(如绘制),它自身都不支持,都必须要找插件,引入插件,又会引发很多问题,难以解决,开发效率低。第二点,目前Openlayers已经采用了ES6最新的语法,可以做到按需导入,不会引入全部的包进入你的工程,因此Leaflet相较于Openlayers唯一的优点--轻量级 已经不复存在了,现在Openlayers也是轻量级的了,在功能、性能、用户体验层面,Openlayers实力碾压Leaflet,选Openlayers,不会错的。

3.3.3业务逻辑层

这一层,属于WebGIS的后端,目前做WebGIS的后端,开源方案,首选Java技术生态,国内互联网公司使用的多,技术成熟,生态成熟,不存在解决不了的问题。

普通业务技术实现

普通的WebGIS系统(用户量在1000号人以下)使用SpringBoot框架就可以了。如果WebGIS系统用户量庞大(几千以上)要应对较大的访问并发量,则需要引入Spring Cloud Alibaba框架,把一个后台系统拆分成多个小的微服务,然后集群部署,提供高并发的能力。

GIS业务技术实现

后端一般要负责GIS数据的读取,解析、转换、入库,空间分析功能(如相交查询、距离计算等),为了实现这些功能,需要使用到GeoTools工具库。

GeoTools的使用可以参考我的另外的文章

3.2.4地图服务层

WebGIS最大的一个特征就是要加载业务图层,业务图层数据往往比较大,直接通过GeoJSON的方式加载到前端渲染,会非常卡顿,为了性能要求,通常都是把业务图层放到GIS地图服务器GeoServer中进行后端渲染,给前端传送渲染好的图片,大大提升地图浏览的流畅度。不过,GeoServer作为一个开源的产品,用户体验方面还是不够好,对于非技术人员来说,太难操作了。在有技术能力和人力的情况下,建议给GeoServer做个二次开发,提升一下用户体验(本人做过这个方面的工作,有问题可以一起沟通交流)

3.2.5数据库层

开源WebGIS,数据库最佳选择,选用PostgreSQL+PostGIS,性能强大,技术生态好,国内外用的很多,技术成熟,社区丰富,有问题不怕找不到解决方案。

数据库分库

数据库设计层面,建议分库处理,主要分 业务库、图层数据库

业务库主要负责业务表的管理(如用户表)、图层数据库主要管理图层数据(如点数据表、面数据表等)

性能优化

建立空间索引

建立GIST空间索引,建立空间索引,可以极大地加速空间查询的响应速度。

数据分区

如果单个数据表非常大(大于500万),建议把数据进行分区,以什么指标进行分区?主要看数据的特征,如表中的数据是全国的数据,每条记录都有省份编码,那么就可以根据省份编码进行分区,假设一个数据表的数据量是1000万,根据省份分区,全国34个省份,那么平均下载每个分区就只有1000万/34 约等于30万,这样查询性能会大大提升。

3.2.6基础环境层

基础环境强烈建议使用阿里云全家桶,运维无忧!

最后

本文是我这些年使用开源技术方案设计、开发WebGIS系统的一点总结。我做过传统的GIS系统(性能要求较低,但是业务逻辑复杂),也做过互联网化的WebGIS系统(要求高并发高可用,但是业务逻辑相对简单),都是在使用这些技术架构,只是在使用的时候侧重点不同,具体情况具体处理。总体上来讲,这套技术架构,在开发体验、系统上线使用体验 这两个层面来讲,都是经受的起时间的考验的。因此我就它分享给大家,期望与大家一起交流学习,共同进步。

文章来源:https://zhuanlan.zhihu.com/p/531472494