一、项目背景
本人所在项目主打无线电数据分析及web端可视化展示,公司现有产品采用arcgis for js在浏览器实时绘图,主要表现形式为网格、热力图及轨迹图等。无线电数据采集量巨大,原有产品数据已在后端做过预先清洗处理压缩,一个市级一天数据量均在十万个点左右,原有客户端绘图模式导致浏览器压力很大,用户体验也及其不好。按照项目组安排,本人承接地图数据展示部分优化选型及开发工作,第一版本为期两月。
本人主职为java开发,由于创业公司性质,慢慢卷的什么都会点,对于GIS也是第一次接触(刚开始接到任务都不知道这个任务要搜索GIS方面的东西)。相对于曾经快速填鸭式CV经历,GIS圈由于参考文章少,难啃了很多,所以决定一边啃一边记录整理一下。
二、研究思路
本次优化升级研究,主要需解决web端加载绘制数据图层压力,第一版要求千万个点级页面响应友好,不卡顿。为减少客户端压力,首先想到的就是在服务端完成图片绘制及做好对应的缓存,对客户端来说,不管多少数据量,最后加载的都是一张图片。本着站在巨人肩膀的原则,从图片、地图缓存服务器开始搜索各种成熟组件,最终整理出GIS相关的一些组件与关系(入门级理解,后续了解深入有不当的地方会继续补充)
巨人的肩膀就是高,简单梳理后,了解到地图服务器就是我需要的图片、地图缓存服务。对于地图服务数据源选择,由于老项目数据已经存储在关系型数据库中,并且JDBC连接及sql语言都比较熟悉,所以就不考虑转换为其它矢量数据源,重点研究关系型数据库+空间数据引擎模式为地图服务器提供数据。
三、GIS开发相关组件
1.地图服务器
1.1arcgis server
ArcServer是ESRI公司推出的一个基于服务器的ArcGIS工具,主要特点如下:
(1)不开源,且费用很贵----就这一条就不考虑,用不起
(2)ArcServer中的几乎涵盖所有GIS服务器应该具备的功能
(3)ArcServer相对于其他开源的GIS服务器它的访问速度是比较快的
(4)ArcServer简单、可操作性强,自身具备对应的桌面软件ArcMap
(5)ArcServer比其他一些开源GIS服务器相对来说能更稳定一些
(6)就目前来说ArcGIS的发展已经比较成熟
1.2geoserver
GeoServer是一个遵守OGC开放标准的开源地图服务器,
(1) 用 java 语言编写、标准的 J2EE 框架、基于 servlet和STRUTS 框架、 支持高效的 Spring 框架开发;
(2)且实现了WCS、WMS(网络地图服务)及WFS(网络要素服务)规格,擅长于结合WFS(Web Feature service)规范的属性查询
(3) 支持上百种投影
(4)提供web界面操作发布地图服务
(5)数据源数据变化,地图自动刷新
(6)......还有更多其它功能,还没用到,理解了再继续补充
1.3 mapServer
MapServer 源自美国太空总署(NASA)资助的美国明尼苏达大学(University of Minnesota)ForNet项目,最终衍生为一个WebGIS开源软件,是一个功能强大的跨平台的网络地图服务软件包
(1)使用C++编写,基于CGI脚本实现
(2)遵守OGC制定的WMS、WFS、和GML等一系列规范
(3)Mapserver对WMS(Web Map service)的支持比较geoserver更为高效
(4)提供web界面操作,但控制上体验不是很好
比较项 | arcgisServer | geoserver | mapserver |
---|---|---|---|
语言 | —— | java | c++ |
开源 | 否 | 是 | 是 |
功能 | 多 | 中等 | 一般 |
速度 | 好 | 一般 | 中等 |
操作性 | 好 | 中等 | 一般 |
稳定 | 好 | 中等 | 中等 |
热度(可CV度) | 好 | 中等 | 一般 |
arcgisServer由于不开源直接淘汰,mapserver虽然在wms服务效率上比较快,但wfs支持度不好,数据热更新度不好,并且geoserver使用java开发,还支持spring快捷开发,在两个月出第一版稳定产品的要求下,简直旺我本命。所以第一轮筛选下,主研究geoServer。
(ps:各种专业名词解释准备后续专门整理一篇文章,刚开始研究时被OGC、WMS、WFS、SRID、投影...给折腾的头晕晕的,看一篇文章要另行百度好几次......)
2.数据源
“关系型数据库+空间数据引擎”通常是近年来由GIS厂商研发的一种中间件解决方案。用户将自己的空间数据交给独立于数据库之外的空间数据引擎,由空间数据引擎来组织空间数据在关系型数据库中的存储;当用户需要访问数据的时候,再通知空间数据引擎,有引擎从关系型数据库中取出数据,并转化为客户可以使用的方式。(中间件技术) 因此,关系型数据库仅仅是存放空间数据的容器,而空间数据引擎则是空间数据进出该容器的转换通道。这类系统的典型代表有ESRI的ArcSDE和MapInfo的SpatialWare。其优点是,访问速度快,支持通用的关系数据库管理系统,空间数据按BLOB存取,可跨数据库平台,与特定GIS平台结合紧密,应用灵活。其缺点主要表现为,空间操作和处理无法在数据库内核中实现,数据模型较为复杂,扩展SQL比较困难,不易实现数据共享与互操作。 原文
敲定地图服务器后,数据源的选择依照图层服务器支持来选择。geoserver支持矢量数据源如下:
按照“关系型数据库+空间数据引擎”来选择,选型对比Oracle和PostGIS
Oracle收费,不考虑,所以没做实测数据,并且参考网上实测文章,Oracle 性能<PostGIS,PostGIS妥妥胜出(简单看过前辈们经验分析,矢量数据源中postGIs性能速度甚至>=shapefile,postGIS无论热度还是各类测评都碾压其它项)。
3.客户端
本次开发的产品只考虑web端,所以只考虑web端组件选型
1、OpenLayers
(1)支持的地图来源包括了WMS,GoogleMap,KaMap,MSVirtualEarth
(2)OpenLayers实现了行业标准的地理数据访问方法如OGC的Web Mapping Service(WMS)and Web Feature Service(WFS)协议
(3)OpenLayers可以简单的在任何页面中放入动态的地图
2、arcgis for js
ArcGIS API for JavaScript是由ESRI公司基于JavaScript语言的Dojo框架开发的程序接口,用户可以通过调用接口实现浏览、查询地图等基本操作,也可以通过编写函数实现更加复杂的功能。
ArcGIS API for JavaScript中的类是按照模块组织的,主要包含esri、esri/geometry、esri/renderers、esri/symbols、esri/symbols、esri/dijit、esri/dijit/editing、esri/layers、esri/tasks、esri/toolbars、esri/virtualearth模块
(1)可加载WMS服务、热点图(HeatMap)、Bing地图、OpenStreetMap、GeoRSS、KML数据等
(2)可实现图形绘制、渲染功能等
3、Cesium
Cesium(https://cesium.com/cesiumjs/)基于 WebGL 的前端3D JavaScript 类库。 Cesium在2016年3月份左右推出3D Tiles数据规范,在gltf基础上提供了LOD能力, 就是Web环境下海量三维模型数据。
看到cesium简介,前端3D JavaScript 类库(领导要求,第二版要实现3D效果),仿佛看到了光,虽然旧代码是用arcgis for js写的,但是从某个传说的年代就流传下来的,本人前端也是基本不会,前端选型就按照简介和热度估摸着定一个重点研究,后续结合后台生成的海量数据模拟案例实现,能跑能实现,不卡就不再研究别的啦。