地理信息系统(Geographic information System 简称 GIS),是一种在计算机软硬件的支持下,对整个地球表层空间有关地理发布数据进行采集、存储、管理、运算、分析等等的技术系统。而网络地理信息系统(WebGIS)是传统GIS在网络上的延伸和扩展,具有传统GIS的特点,可以实现空间数据的检索、查询、绘图输出编辑等等。最近项目需要用到webGIS里面的一些功能,当然GIS是一门学科,掌握需要系统且深入的学习。因为在开发中需要用到一些webGIS技术,需要对一些概念和常用技术需要基本了解,所以我查了一些资料,写一篇笔记记录一下。
Open Geospatial Consortium 开放地理信息联盟。是一个由530家企业、政府机构、研究组织、大学组成的国际性协会。致力于提供地理信息行业软件和数据服务的标准化工作,推动地理空间位置信息和服务的公平性、可查性、访问性、交互性、复用性。上面说的有些不明不白,简单来说OGC是指定GIS行业标准的组织,GIS行业从数据采集制作,到地图位置服务发布,都要遵循OGC定义和规范。
WMS(web map service)网络地图服务。OGC里最常见的规范就是WMS规范——WMS为网络地图的数据格式、图例样式、地图发布、交互设计等等方面制定了一系列规范。
WMS = WMTS + WFS ; WMTS—— (web map tile service 地图瓦片服务); WFS ——(web feature service 网络要素服务)
地图瓦片服务:地图数据量很大所以无法直接传递到前端显示,且电脑显示器分辨率有限,因此地图瓦片服务的处理方式是先在后端生成栅格图片再讲图片传到前端展示。意思是说每次滚动鼠标滚轮放大缩小的时候后端都有发数据来。WMTS发布的是栅格图片,栅格内容无法被修改。
而WFS服务是矢量的,地图要素为feature;feature是一个可操作的对象,通过WFS可以对数据(几何+属性)进行增删改查等操作。
跟上面的地图瓦片服务相关联,瓦片的意思是后端渲染的图片一块一块传送到前端,就好像盖房子一片片的瓦片一样。瓦片地图是一种地图解决方案,为了解决地图数据很大无法传送的问题。将一整块大地图进行切分,分成相同大小的地图,用户访问的时候再将小地图拼接在一起还原成大地图。
具体来说瓦片地图就是多个比例尺下配置地图,然后提前把每个比例尺下的地图绘制成小地图,保存在服务器上名为缓存的目录中。这样当客户端访问地图时可以直接获取需要的小块图片拼接成的地图,而不是由服务器动态创建出一幅地图再发送到客户端从而极大提高访问速度。如下图。
levels of Detail (细节图层)
LOD技术根据物体模型的节点在显示环境中所处的位置和重要度。决定物体渲染的资源分配,降低非重要物体的面数和细节度从而获得高效率的渲染运算,LOD在电子游戏中经常运用,对于需要显示全球地图的GIS系统而言,更需要应用这项技术。
为了表示地球上的某个点,还有点与点之间的关系——我们需要使用坐标系来表示。在WebGIS系统中,常见的坐标系有两种:一种wkid=102100(102113);一种wkid=4326。102100:GCS_WGS_1984_web_mercator是在线网络地图常用的坐标系统,它是投影坐标系的一种。百度地图、高德地图和大多数ArcGIS提供的在线瓦片地图采用了这种投影方式。4326:GCS_WGS_1984是地理坐标系统的一种,一般GPS、遥感影像、专业测绘数据等都是采用的这种坐标系类型。
有了坐标系就来说说投影,我们经常看到EPSG:3857和EPSG:4326两种投影方式。EPSG:3857实际上是墨卡托投影。墨卡托投影的过程是将地球展开成一个圆柱,再将圆柱展开平面(如下图);对于墨卡托投影来说,越到高纬度,大小扭曲越严重,到两级会被无限放大,因此无法显示极地地区。对于EPSG:4326也叫经纬度投影,使用此坐标会导致页面变形。
WKT是一种文本标记语言——用于表示矢量几何对象、空间参照以及空间参照系统之间的转换。它用二进制表示且符合OGC规定。WKT与geojson分为点线面几何四种Point,LineString,Polygon,GeometryCollection。
WKB采用二进制存储点线面,解决WKT表达冗余的问题,便于传输和存储在数据库中。
GeoJson是一种基于JSON格式的地理空间数据交换格式,它定义了几种类型JSON对象以及它们组合在一起的方法,以表示地理要素、属性和它们空间范围的数据。几何对象包括有点(表示地理位置)、线(表示街道、公路、边界)、多边形(表示国家、省、领土)以及以上类型合成的复合几何图形。数据库postgreSQL+postGIS插件可以存储这种具有地理属性的数据。
在计算领域,GeoServer是一个用Java编写的开源服务器,它允许用户共享、处理和编辑地理空间数据。为了互操作性而设计,它使用开源标准发布来自任何主要空间数据源的数据。
GeoServer已经发展成为一种将现有信息与Google地球、NASA World Wind等虚拟地球仪以及OpenLayers、Google地图和必应地图等基于网络的地图连接起来的简单方法。
GeoServer的功能是开放地理空间协会Web要素服务(WFS)标准的参考实现,同时也实现了Web地图服务(WMS)、Web覆盖服务(WCS)和Web地理信息处理服务(WPS)规范。
安装Geoserver除了通过二进制包安装外,还需要JDK1.8和Tomcat才能运行起来(因为GeoServer是Java写的)
Openlayers是一个开源的Javascript库(基于修改过的BSD许可发布),用来在Web浏览器显示地图。它提供API接口创建类似于Google Maps和Bing Maps的基于web的地理应用。这个库包括Rico和Prototype框架。运行openlayers也比较简单(openlayers用js写的),下载好依赖的包之后npm start直接可以运行。访问1234端口能看到地图了。
PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统;通过与postGIS配合能够存储地理信息。这里使用pgAdmin4作为postgreSQL的可视化界面。
里以湖北省荆州市为例说明如何用ArcGIS API发布离线谷歌卫星地图。
在万能地图下载器中选择湖北省荆州市的行政区划,然后点击“下载”按钮新建下载任务。
在新建任务对话框中选择需要下载的级别,一般是从当前行政区划显示的级别开始选择(这里是第9级),一直接选择到第19级(国内19级清晰度效果最佳,19级以上基于19级放大),由于数据量非常大,这里只为了说明如何用ArcGIS API发布离线卫星地图的方法,因此这里以选择到第14级为例。
在“新建任务”对话框中,点击“导出设置”可以设置相关导出参数,我们可以选择导出大图、导出瓦片和导出离线包等三种方式。由于这里我们用ArcGIS API发布离线卫星地图需要用的是瓦片格式,因此这里选择“导出瓦片”选项。
新建任务详细参数说明,请参阅:
新建地图下载任务参数说明
在“导出瓦片”选项的相关参数中,我们选择瓦片格式为“TMS瓦片”、文件格式为PNG,坐标坐标投影为墨认的“WGS84 Web 墨卡托投影”,选择“边界范围裁剪”,背景颜色为“透明”背景。
导出瓦片详细参数说明,请参阅:
导出瓦片参数说明
分别点击“确定”按钮开始下载任务,下载并自动导出后可以看到导出的瓦片目录为8到13级而不是我们选择的9到14级,这是因为软件中的级别编号是从1开始,而标准的TMS瓦片命名规则都是从0开始,因此该情况属于正常情况,瓦片的行列号编号规则同理。
在ArcGIS API发布离线卫星地图的源码示例中,将“arcgis_js_v321_api.zip”解压到当前文件夹。
打开解压后文件夹中的“install.html”可以查看ArcGIS API的安装布署说明。
ArcGIS API可以在Windows和Linux系统中安装布署,这里我们以Windows为例,点击“Windows”查看布署方法。
从ArcGIS API的安装布署说明中可以看到,需要将“\arcgis_js_api\library”文件复制到IIS默认站点下,该操作的目的是要将ArcGIS API放在Web站点中,说明它需要Web服务器支持。
另外,文档中说明了ArcGIS API有两个版本,一个是普通版,一个是精简版。
现在,我们需要布署一个Web服务器,用于布署ArcGIS API源码。
一般来讲,常用的Web服务器软件工具有IIS、Apache和Tomcat,这里我们以Windows自带的IIS为例。
如何开启IIS 功能,请参阅:
如何在Win10中开启IIS功能
IIS功能开启后,在电脑图标的右键菜单中选择“管理”菜单项。
在“计算机管理”的功能树列表中点击“服务和应用程序\Internet Information”项,然后在“网站”节点的右键菜单中选择“添加网站”项。
在显示的“添加网站”对话框中,可以为当前站点指定名称(这里为“WebGIS”),将物理路径设置为ArcGIS API解压后的目录,这里将端口号设置为“8080”,这样不会与访问Web页面的80端口冲突,如果没有布署过80端口的网站则不会有冲突。
点击新建的Web站点“WebGIS”后,再点击“内容视图”可以查看站点文件。
Web站点布署好之后,我们再回过头来看ArcGIS API的布署说明文档,文档中分别说明了普通版和精简版中都需要对相关文件作修改编辑,这里我们以普通版本为例。
根据ArcGIS API布署说明文档中的说明,在指定的源码路径中找到init.js文件,并在右键菜单中选择用记事本打开它。
按文档中的说明,将“https:/[HOSTNAME_AND_PATH_TO_JSAP]dojo”字符串修改为“https://<myserver>/arcgis_js_api/library/3.21/3.21/dojo”字符串。
其中的<myserver>表示服务器地址,由于我们这里是以在本机上布署为例,因此它要相应的改为本机地址,即127.0.0.1或localhost,同时需要加上端口号,即最后的替换结果为:
http://127.0.0.1:8080/arcgis_js_api/library/3.21/3.21/dojo
注意:文档中的Web地址头为“https”,如果你的服务器不支持安全加密访问,只需要将地址头改为“http”即可。
编辑修改成完成后,需要测试init.js文件是否可以通过Web地址正常访问。
在浏览器中如果打开以下地址显示init.js文件内容,说明布署正确。
http://127.0.0.1:8080/arcgis_js_api/library/3.21/3.21/init.js
ArcGIS API安装布署完成后,将ArcGIS API离线地图发布源码示例中的“extlayers”文件夹复制到“arcgis_js_v321_api\arcgis_js_api\library.21.21”路径下。
将下载的地图瓦片目录复制到ArcGIS API发布离线地图的源码示例中。
用专业的WebGIS开发工具Visual Studio Code打开“arcgis_js_v321_api\arcgis_js_api\library.21.21\extlayers\gaodelayer.js”文件,将第133行中的“gaodeTiles”字符串修改为当前的瓦片目录名称,即“荆州市谷歌地图TMS瓦片”。
Visual Studio Code下载安装教程,请参阅:
如何安装WebGIS开发工具Visual Studio Code
双击ArcGIS API离线地图发布源码中的“map.html”文件,可以在浏览器中打开ArcGIS API发布的离线地图结果。
在浏览器中打开离线地图发布结果如下图所示。
在该源码示例中,除了能离线显示谷歌卫星地图外,还包括了基本的地图标注等相关GIS功能。
ArcGIS API for JavaScript在线实例请参阅:
http://api.rivermap.cn/ArcGIS/map.html
眼间十一长假结束了,
还没充分表达对祖国的热爱之情,
朋友圈的照片还没发够,
8天假期居然就已经结束了!
不论国庆你是在外面浪,
还是在家里蹲,
都无法逃避、必须面对的就是:
节!后!上!学!上!班!
今年可再也没有长假了哦!
生命不息,奋斗不止!
收心养性,继续努力!
GISer如何快速收心,
摆脱假期综合征
这些回归状态的方法
亲测,很实用哟!
一、GIS理论知识
理论基础能够决定技术之路能走多远
GIS开发人员应具有一定的GIS理论基础,在开发中常见的地图坐标系,如大地坐标系统WGS-84、火星坐标系统GCJ-02、百度坐标系统BD-09等,常见的地图投影方法如墨卡托投影、高斯-克吕格投影等,以及常用的空间分析功能及其作用,如缓冲区分析、可达性分析、最短路径分析等,这些应该了解一下,最好在大一、大二就掌握清楚,打好基础!
1.理解GIS理论,如地图坐标系、投影、空间分析等概念
2.熟悉OGC标准,如WMS、WMTS、WCS、WFS等
3.深入理解地图可视化及相关知识
4.深刻理解地图切片原理
5.熟悉WebGIS体系结构
6.掌握地理数据处理能力
7.了解GIS相关数据格式
理论入门推荐书籍,仅供参考
主要是这些书,小编可以免费分享:
《地理信息系统导论》
《GIS空间分析指南》
《GIS 基础知识:地理信息系统的第一本书》
《制图:专题地图设计》
《地理信息系统概论》
《了解 Web GIS》
二、GIS软件使用
软件的熟练程度,是考察一个GIS工程师的标准之一
GIS软件的种类非常多,而且功能相对复杂,部分软件需要花时间学习才能熟练操作。
但是对地理信息科学专业来说,日常经常用到的软件主要有CAD制图,PS设计软件,MapGIS、ArcGIS、QGIS、谷歌地球等GIS类软件,以及ENVI、Erdas等遥感图像处理软件这些专业软件,Smark3D、Benlder、3DMAX等三维建模软件。
了解 GIS 软件,有可以使我们的GIS开发工作更轻松、更快,它们还可以充当测试环境,关键是很多GIS软件的底层原理是相通的,一通百通。
三、从前端入门GIS开发
在WebGIS的学习中,Web开发技术尤为重要,是整个项目的基础。
1.掌握前端三件套
对于Web端学习,只要把 HTML + CSS + JavaScript 这前端三件套学好,就基本差不多入门前端了,并且可以利用这三门知识,进一步学习前端框架,达到更高的开发效率。
对于GIS开发,重点掌握HTML技术、CSS3页面布局、JavaScript开发、WebAPls编程、JavaScript高级特性
2.掌握前端框架
重点需要关注的前端框架,主要有VUE、React、Jquery、Angular,这几个前端框架至少要掌握一样。
Vue(https://vuejs.org/):Vue 以模型-视图-视图模型结构构建 UI。对于小白来说,VUE相对比较好入门,触类旁通再去学习其他框架,应该更容易理解。
四、熟悉开源GIS类库
在WebGIS开发中,在具备一定的前端基础后,就要开始学会使用各类GIS相关类库,实现用户所需功能。
这就涉及到API的调用,API作为处理系统之间数据传输的媒介。我们在开发的过程中,常常调用API接口,这就要求我们必须掌握API的调用,了解API的属性。如果你能了解这里面的底层开发逻辑更好,可以起到事半功倍的效果。如果你不熟悉,但是学会如何调用,对入门来说也是够用的。
熟悉开源GIS类库,开源GIS相关类库可以分为三类,二维、三维及AI库
1. 二维
二维类库中常用的由Echarts、Leaflet、Openlayer、Mapbox、百度地图API、高德地图API、天地图API及Turf等,开发人员通过调用相关类库,可实现地理数据可视化、GIS空间分析和地图可视化等功能。
2. 三维
三维WebGIS中,应用较为广泛的由Cesium.js和Three.js。Cesium.js可以实现三维数据加载、三维空间分析等GIS应用所需的功能,能够承载较大的空间信息量,但视觉效果一般;Three.js为计算机图形库,可以实现更加优美的场景,但信息承载能力有限,因此在小场景的可视化如室内中,推荐Three.js,在进行大量地理数据可视化及空间分析等功能时,推荐Cesium。
在三维WebGIS中,不仅要具有前端和GIS基础,还要拥有一定的三维建模软件及三维格式的基础,如 3dMax/Maya/SketchUp/Blender/Pro-E(三维建模)等软件的使用,并了解各种软件生成的模型格式及Cesium.js和Three.js所支持的数据格式。
3. AI
AI在大前端领域已经火爆了两三年了。随着设备算能的跃升和端侧模型的演化,越来越多的AI场景开始涌现。从最初的图片分类,到而今基于人体的百变特效、嵌入日常的语音识别、大众津津乐道的自动驾驶,AI已经开始进入我们生活的方方面面。前端AI类库主要有TensorFlow.js、Ml.js、 Brain.js及Paddle.js 等,TensorFlow.js目前应用较为广泛。
前端AI应用领域主要包括人物识别、语义诊断、情绪分析、图像自动分类等方面,在WebGIS中,主要可应用于图像自动分类、图像处理等领域。
作为GIS小白入门,你不需要学习上面列出的所有库,建议可以从leaflet或OpenLayers入手。此外,AI库对小白来说,难度系数比较大,建议可以先重点掌握二维、三维。
*请认真填写需求信息,我们会在24小时内与您取得联系。