声明:本篇在李晓晖的《杂谈WebGIS》,补充更多的资料说明。基于地图二次开发一直断断续续在做,这里算是补充一下基本功把。其实对于前端,WebGis开发都是api,抄demo,改。GIS深入似大海,杂鱼汤来一碗

GIS是什么?

GIS(Geographic Information System),它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。

因为它可以对空间信息进行分析和处理(简而言之,是对地球上存在的现象和发生的事件进行成图和分析)。 GIS 技术把地图这种独特的视觉化效果和地理分析功能与一般的数据库操作(例如查询和统计分析等)集成在一起。

结合地理学与地图学以及遥感和计算机科学,已经广泛的应用在不同的领域,主要用于输入、存储、查询、分析和显示地理数据。

什么是GIS学科

谈GIS,得先回顾地理科学的发展

地图绘制的发展历史与地图功能的演变史

人类使用地图的历史大约有3000年。地图是早期人类探索世界时发明的一种工具。推荐阅读 西蒙·加菲尔德的《地图之上:追溯世界的原貌》

现存最古老的地图,是古巴比伦的世界地图,约公元前700年~公元前500年间在美索不达米亚制成,刻在一块泥板上。地图把古巴比伦描绘成圆环形状,处在地图中心位置,国土被幼发拉底河一分为二,外围被海洋环绕。地图的真正作用,不是用来导航出行,而是让地图持有者(帝国皇帝)认识整个世界,当然前提是以自己为中心。这是地图最原始的作用。

古罗马制作了一幅高约0.3米,宽达数米长,可以卷起来的大地图。罗马帝国广袤的疆域就画在这幅卷轴上,显然它不适合出行携带,作用只是彰显帝国领地的一种艺术表现形式。那时地图的作用也基本如此。

公元2世纪,古罗马帝国天文学家托勒密,也是占星家,为了制作星相占卜图,把罗马帝国许多城镇的位置进行了精确标注(出生地位置是星相占卜的一大因素)。托勒密收集了大量档案、故事等各种信息,并设计一套经纬线系统,覆盖了西欧、亚洲、北非等各地。他还设计了使大地的三维球面投影在二维平面上的方法(当时人们已相信大地是球形的),并称之为“地理”。由此托勒密开创了人类史上两个第一:第一份具备实际导航意义的地图,第一次涉及到了新的地理学科。然而它昙花一现,西罗马帝国灭亡后,托勒密地图随即消失。

公元4世纪开始,基督教得到合法地位,并向欧洲各地传播,基督教的特色也随之附着在地图上。地图重在彰显基督福音在世上的传播。当时人们认为东方是神圣的方向,因为上帝最初创造的伊甸园位于东方。地图顶端就朝向东方,还配了几幅图画,即亚当夏娃被逐出伊甸园,及世界末日基督再临。设计地图,根本不是为了人在地上出行找路,而是为了引导人进入天国。

真正帮助人出行的地图,直到文艺复兴才发展起来。商业贸易迅速发展,尤其是远洋贸易,特别需要地图指导。人们重新挖掘古代遗产,找到了托勒密的地图和制图法。再加上科技进步以及罗盘使用,人们又重新绘制了新地图,这就是“波多兰航海图”。它是大航海时代的产物,上面都是大海和港口,海面上航道密布,纵横交错,连接各个港口城市。

16世纪德国制图学家墨卡托发明了一种新的制图法,开创了墨卡托投影法。我们现在所用的世界地图,就是以这种方法设计的。为了能在平面地图上完整显现三维球体表面,墨卡托把北方和南方远处的陆地、海洋面积逐步扩大,投射下来。这种设计第一次把全球绘制在一张地图上。

虽然其有如下缺点:它轻微地扭曲了人们对世界的看法。靠近北极的国家,其国土面积被人为扩大,如加拿大和俄罗斯,而赤道地区则人为地缩小了,如非洲。但是它既对航海帮助很大,也对国王们争夺殖民地“帮助不小”——宣示主权

数学推理和测量技术大幅进步,世界地图越来越精确,地方的局部地图也是如此,至此,地图的发展也就是查漏补缺,精度提高。地图的主要用途便是给人们的行军、航海等做向导,而这同样也是现代GIS学科里GIS最基本的功能之一。

GIS的发展

19世纪时,现代GIS学科开始慢慢萌芽。这里有一个很有名的例子。1854年伦敦发生霍乱,10天就死了500人。居民大多怀疑瘟疫是由于地下的墓穴引起的,引起了极大的社会恐慌。当时有个有名的医生叫Snow博士,他不信这个原因,为了查出真正的霍乱源头,他首先绘出了伦敦地图,然后将所有霍乱病人的所在地标出来,然后他发现了一个有趣的现象,在伦敦的一个居民饮水井附近出现的霍乱病人最多,并且最开始出现的霍乱病人也是在那里发现的。最后Snow博士对那口井进行检查,确定了霍乱发生的源头。从这个例子中我们可以看出,地图的应用已经不再局限于导航了,而开始慢慢利用其得天独厚的时间空间优势与其他学科开始进行结合。

到了20世纪电脑的出现,人造卫星的升天等技术的突破,GIS这个学科也相应的开始走向成熟以及开始普及。20世纪60年代,加拿大科学家首先提出了GIS这个学科。到了20世纪末,一大批优秀的GIS软件已经出现,比如Esri公司的ArcGIS系列,MapInfo公司的MapInfo。国内的GIS从上世纪80年代才开始起步,不过到上世纪末时,也出现了自己的GIS公司,比较有名的有GeoStar、MapGIS等。

而此时的GIS已不再是局限纸上的地图了,它已经成为了一个计算机技术和多种学科相交叉的新型学科了。它涉及到测量学——地理信息的采集和地图的制作等,计算机科学——电子地图的制作和展现以及各种GIS功能的实现,物理学——对传感器的研究以及光谱和影像的研究,气象学——大气层等对卫星影像的影响等,生物学、医学、犯罪学等——研究地理等各时间空间因素对这些学科的影响。

所以GIS是什么呢?说的最通熟易懂的就是,GIS是利用测绘生成纸制地图或者航拍以及卫星等生成影像后,将这些数据存储在计算机中,以地图或图片的形式表现出来,然后根据实际生产生活以及科研中的各种需求,进而提供具体的经过处理后的数据。

什么是WebGIS

WebGIS就是展现于网络上的GIS。在上世纪八十年开始,出现的大量GIS软件,基本上都是C/S架构的,也就是首先需要在本机上装有专业的GIS软件,然后用户根据需求使用这些GIS软件。当然这种桌面端的GIS软件有其天然的优势,比如开发相对简单,不需要Internet支持,以及可以做更多的复杂功能、响应相对迅速等优势。但是同时,其缺点更是不容忽视。首当其冲的便是不便于推广,而不便于推广的原因在于C/S系统其本身的天然的劣势:不便于更新,不便于跨平台,不便于用户在不安装指定客户端的情况下使用。

从本世纪开始,internet进入了爆发式增长阶段,网络的铺设以及网速的提升都有了大幅度增加,这为WebGIS的发展提供了坚实的大环境。于是,基于B/S的GIS系统越来越多的开始提供服务,并且在RIA(富客户端)技术、AJAX(动态网页)技术的涌现和成熟,WebGIS也基本能展现出与C/S一样的效果和功能。而WebGIS的大发展,更是用户的需求,google地图和百度地图等服务提供商的大规模扩张便是最好的证明。

什么是WebGIS,就是将GIS这门学科所能提供的功能,以B/S技术展现给用户,使用户只需要在浏览器上便能使用这些GIS功能的一个应用方向。

对国内WebGIS行业的理解

目前使用WebGIS技术的公司可以大致分为两个方向:一个是互联网方向,一个是行业应用方向。

国内的互联网方向里基本可以说已经被百度地图,搜搜地图,高德地图,三个巨头垄断。所以对于想从事互联网方向的WebGIS开发人员,其实可以选择的大公司并不多。但是,如果你是一个技术足够好,且技术不局限于一般的关系数据库,对大数据和分布式系统感兴趣的WebGIS开发人员,强烈建议你去这些互联网公司,在那里你能接触到最新的IT技术以及感受到强大的头脑风暴。也便是,对新技术,对前沿方向有更多追求的人,去互联网公司是很好的选择。

但是我们不得不承认另外一个现实,这些互联网公司基本集中在北上广深,并且对GIS研发人员在技术上的需求是,计算机技术的比重要远大于对GIS学科本身的理论所占的比重。于是,更多的GIS学科出身的人,最后选择的是行业应用公司。而投身于这样的公司,就没有前途吗?答案是否定的。

Esri公司作为全球最成功的GIS软件公司,很好的给出了这个答案。目前Esri的AO库号称世界上第二大的库,除了微软的Framework,就是它了。它同时也是一个年盈利在8亿美元的公司。Esri公司与美国和加拿大政府的合作堪称行业公司的典范,它为这两个国家的数字化城市的建设立下了汗马功劳,做出了很多优秀的作品。说这个例子,只是为了表明,在我们的数字化城市的需求越来越深入,政府的需求越来越实际,整个国家的市场建设越来越合理以及公平公正透明,WebGIS在行业上的应用也将越来越广泛,并且越来越能够服务政府、企业和人民,并且更能做出有真实价值的产品。并且,从事行业应用的研发人员,随着对所从事行业理解的深入,这些理解给未来所带来的收获可能比技术单纯的提高所带来的收获要大得多。要知道,项目需求分析靠的基本是行业理解,当然,对技术的了解也给项目可行性分析提供了保障。两者相辅相成。

每个人追求不一样,根据自己的需求,根据自己的现状,做出选择,坚持下去,不说梦想是否能实现,起码你不会是一个自己都认为自己活该如此平庸的人。

WebGIS的框架

前面说了太多的非技术类的话,这里我们开始提一个技术类话题——WebGIS的框架。其实WebGIS的框架跟其他Web项目的框架没有很多本质上的区别。可能唯一的不同是WebGIS需要提供一些地图方面的功能服务。这里我先把这个框架给出,同时每个层面需要的技术我也在其中大致画出。

目前很多公司都提供了自己的二次开发包,在前端的有OpenLayers、AGS API for JS、maptalks。在后台的也有geoTools、AO等。用这些开发包,我们可以很快的实现出图以及很多GIS功能,基本上不用写太多的编码。玩会一种开源的maptalk,ol,mapbox即可。比如ArcGIS Web APIs,SuperMap iClient 等,表示:玩不起!请招或者外包GIS人员来搞

但是,由于封装的太好,很多WebGIS的原理我们也便忽略而不做了解了。

WebGis前端

首推Open GIS,WebGIS所提出的这些要求正是Open GIS联盟(OGC)所成立的目的

开源的maptalk,ol,mapbox

地图方面: Mapbox、ArcGIS、OpenLayers、cesiums、百度地图BMap、高德地图AMap、Google Map 等;

集成包有:OpenLayers、AGS API for JS、maptalks  leaflet

Echarts 地图可视化,

https://echarts.baidu.com/option.html#geo

https://echarts.baidu.com/option.html#series-map

可以看看我之前写的:《echarts矢量地图自定义图标数据展示—echarts地图图表三种方案

WEBGIS前端自动生成工具 QGIS,试了一下,我是放弃了。

WebGIS开发API选择

主流的开发API有:ArcGIS API、SuperMap API 、OpenLayer、LeafLet、百度API、天地图API等。谷歌和必应的相对用的较少。

GIS开发人员肯定知道地图服务器这个东西。API使用是免费的,但是地图服务器并不免费,毕竟结合相应的地图服务器才能发挥API的功效。国内主要是用ArcGIS Server和SuperMap iServer两个地图服务器,另外还有GeoServer的开源地图服务器。

  • ArcGIS API:适合大型的项目开发,ESRI作为最完善的GIS服务商,其API提供的功能也最为强大,支持的数据类型也多,能够很好地解决数据异构,坐标转换等问题,并提供二三维一体化的服务解决方案,版本的更新迭代也很快,API能够对兼容老版本的功能,实现的GIS功能也更为全面。API分为3.x版本开发2维应用,4.x开发三维版本。但是,其地图服务器采购价格接近30w,对于中小项目来说成本也是比较大的。

  • SuperMap API:国内公司,也被誉为国内业内第一的公司,也提供了一整套的数据解决方案,并且更符合国情,一些功能模块主要是面向国内用户的,三维GIS能够直接利用倾斜摄影的数据。这个API适合开发大中型项目,实现的功能当然没有ARCGIS的完善,但对于基本的和稍微复杂的GIS功能来说已经足够了。(特别不喜欢他的类参考,感觉很杂,三维)。地图服务器采购价也差不多是30w,但提供服务就不如ArcGIS的了。

  • OpenLayer 开源地图服务器,属于开源项目,这个主要是能节省成本,适合中小型项目,提供的功能也比较强,常常与其他软件结合使用(OpenLayer+GeoServer+uDig),提供地图服务。但是有问题就需要自己解决了,毕竟没有专门的技术支持人员。感觉更偏向弱或稍强的GIS项目,能够提供基本的数据服务。

  • LeafLet 主要是移动端的API,轻量级的,提供的功能服务就很弱了,更偏向于信息展示,在数据展示方面这个API的展示效果是很不错的,也不需要专业的能力,适应性更好。

  • 百度API、天地图API:这一类的API功能比较单一,只能使用在线地图服务器,可以说是同质化的产品。更适合开发项目中的GIS模块,而不适合开发GIS项目,另外说下,百度的不支持OGC协议(很憎恨这个),如果要使用对平台的地图服务,不建议使用百度的API,百度的更偏向于消费的商业市场,所以,乡镇数据很少,主要集中于城市数据。天地图的是由国家推动的,提供的服务某方面不如百度,但支持OGC协议。

总结来说,大项目选择ArcGIS 或SuperMap,大中型的选择SuperMap或者OpenLayer,小项目就使用maptalks。GIS模块的话可以考虑百度、天地图、leaflet、高德等,没有定数。另外,三维的项目需求也比较多了,特别是二三维一体化的项目,还有个Cesuim、three.js这个用得比较多。以后肯定是毋庸置疑往三维上发展的。

webgl开源三维引擎的选择

小场景的开源三维js引擎

1.babylonjs:http://www.babylonjs.com/(当前在用)

优点:有微软背景,有不少的demo,有较详细的api文档,有供测试的平台,有提供3dsmax转换模型的插件,

缺点:中文资料很少,没有系统的中文教程,如从入门到精通都可以给你讲一遍系统的教程,论坛也会被墙,相关的qq群较少,群里的人也不多,所以能真正指导我们的大牛也比较少。应该是国内用的 比较少。

2.threejs(当初选择引擎时关注过,选择了babylonjs后就没有去进步了解了)

优点:国内用的比较多,所以中文的资料也会比较多,有比较系统的中文教程如从入门到精通。用的人比较多,所以相关的qq群较多,群里的人也较多,接触到的大牛应该也会比较多。

缺点:没有提供一些基础建模软件的插件,比如3dsmax的模型导出插件,虽然说提供一些读3ds格式,fbx格式的场景。

大场景基于earth的开源三维js引擎

1.cesiumjs(http://cesiumjs.org/)

优点:有较多的demo,详细的api文档,有测试平台,比较丰富的展示特性和扩展。

2.webglearth(http://www.webglearth.com/)

demo较少,但一些基本的gis功能都有,简单实用,好像没什么更新过

3.openwebglobe(http://world.openwebglobe.org/)

效果不是很好,加载不流畅,展示的功能也比较少,后面就没有进步了解了

WebGis后端

arcgisServer、geoserver、mapserver ……

WebGis中间件

开发时,我们要选择适合自己的中间件。不同的中间件有其特性,如果是一般项目,tomcat等是很合适的,其使用方便,相关技术支持和资料也很好查找。但是如果是大型的集群项目,Weblogic和WebShpere可能是更好的选择,但是这两个中间件首先配置就是有难度的,同时不同的版本,可能对某些jar包的支持存在问题。如果项目必须使用国产的中间件,TongWeb和Apusics是不错的选择。

WebGis地图服务器

在WebGIS中,与其他一般的Web工程有明显区别的就体现在地图服务器上面。一般的地图服务器都由已有的软件商提供了解决方案,比较流行的有AGS、Geoserver、MapServer、SuperServer等。利用这些地图服务器我们能很好的实现地图的发布以及对一些空间查询和空间操作的支持。

WebGis业务服务器

业务服务器是Web项目里不可获取的一环。不管是利用哪些已有框架编写,比如Spring、Struts、Hibernate等,我们一般还是会将业务服务器的实现分为三个层次,即有名的MVC模式。而不同的框架里这三个层次的实现各有差别。

WebGis数据

WebGIS的数据大致可以分为三种,一种是地图、影像数据,一种是空间属性数据、一种是业务数据。地图、影像数据一般是一些png或者其他格式的数据组成。

在GIS中有个很重要的概念,即影像金字塔。这个概念主要是为了加速地图在前端的显示。而我们准备地图、影像数据时,也一般会首先对这些数据进行切图。

空间属性数据,是通过一些工具将已经整理好的数据进行入库。对于AGS,只有连接的是入库数据的mxd,才能发布成FeatureServer服务,以供数据的编辑。当然,空间数据入库后还可以支持业务逻辑的使用。

第三种数据,业务逻辑数据,是每个Web项目必须有的,它根据不同的业务需求将业务所需的数据进行采集和入库。

最后,《webgis开发资源整理》,对一些开发资料整理汇总。

原文链接:GIS历史概述与WebGis应用开发技术浅解 - maptalks填坑笔记 - 周陆军的个人网站

参考文章:

令德国人崇敬的地图学家——墨卡托 http://www.sohu.com/a/254951691_329538

杂谈WebGIS https://www.cnblogs.com/naaoveGIS/p/3887141.html

WebGIS开发进阶练手题(二) https://zhuanlan.zhihu.com/p/22424372

关于WebGIS开发API选择的问题 https://blog.csdn.net/LYQHZ/article/details/80720279

GIS历史概述与WebGis应用开发技术浅解的更多相关文章

  1. 《python开发技术详解》|百度网盘免费下载|Python开发入门篇

    <python开发技术详解>|百度网盘免费下载|Python开发入门篇 提取码:2sby  内容简介 Python是目前最流行的动态脚本语言之一.本书共27章,由浅入深.全面系统地介绍了利 ...

  2. hadoop应用开发技术详解

    <大 数据技术丛书:Hadoop应用开发技术详解>共12章.第1-2章详细地介绍了Hadoop的生态系统.关键技术以及安装和配置:第3章是 MapReduce的使用入门,让读者了解整个开发 ...

  3. 《Hadoop应用开发技术详解》

    <Hadoop应用开发技术详解> 基本信息 作者: 刘刚 丛书名: 大数据技术丛书 出版社:机械工业出版社 ISBN:9787111452447 上架时间:2014-1-10 出版日期:2 ...

  4. Python开发技术详解(视频+源码+文档)

    Python, 是一种面向对象.直译式计算机程序设计语言.Python语法简捷而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结 ...

  5. Python开发技术详解PDF

    Python开发技术详解(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1F5J9mFfHKgwhkC5KuPd0Pw 提取码:xxy3 复制这段内容后打开百度网盘手 ...

  6. Windows驱动——读书笔记《Windows驱动开发技术详解》

    =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮 ...

  7. 《Tomcat与Java Web开发技术详解》思维导图

    越想构建上层建筑,就越觉得底层基础很重要.补课系列. 书是良心书,就是太基础了,正适合补课. [纯文字版] Tomcat与Java Web开发技术详解 Servlet Servlet的生命周期 初始化 ...

  8. 《Android底层接口与驱动开发技术详解》digest

    第一章:IDE:Eclipse ADT for java developer其它: Apache Ant Java SE Development Kit5或6 Linux和Mac上使用Apache A ...

  9. PHP+MySQL开发技术详解—学习笔记

    1.      PHP is Hypertext Preproocessor. 2.      Hello World: <?php Echo ‘Hello World!’; ?> 3.  ...

随机推荐

  1. .Net 通过设置Access-Control-Allow-Origin来实现跨域访问

    目录 # 前言 # 为每个API接口单独添加响应头 1.针对 ASP.NET MVC 项目的Controllers 2.针对 ASP.NET Web API项目的Controllers 3.针对ASP ...

  2. Python题整理

    1.Python的多态.鸭子类型? 2.Python的序列化工具有哪些? 3.Python处理Excel的工具有哪些? 4.Python处理Graph的算法库有哪些? 5.Python的dict是基于 ...

  3. 再见Jenkins,从Gitlab代码提交到k8s服务持续交付只需七毛三(走过路过不要错过)

    Gitlab runner 快速搭建CICD pipeline 背景 日常开发中,相信大家已经做了很多的自动化运维环境,用的最多的想必就是利用Jenkins实现代码提交到自动化测试再到自动化打包,部署 ...

  4. 实例解说AngularJS在自动化测试中的应用

    一.什么是AngularJS ? 1.AngularJS是一组用来开发web页面的框架.模板以及数据绑定和丰富UI的组件: 2.AngularJS提供了一系列健壮的功能,以及将代码隔离成模块的方法: ...

  5. python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)

    简介 上一篇,我们虽然已经将生成的最新的测试报告发出去了,但是MIMEText 只能发送正文,无法带附件,因此我还需要继续改造我们的代码,实现可以发送带有附件的邮件.发送带附件的需要导入另外一个模块 ...

  6. JAVA BIO,NIO,Reactor模式总结

    传统同步阻塞I/O(BIO) 在NIO之前编写服务器使用的是同步阻塞I/O(Blocking I/O).下面是一个典型的线程池客服端服务器示例代码,这段代码在连接数急剧上升的情况下,这个服务器代码就会 ...

  7. Java文本类型输入与输出

    import java.io.*; import java.time.LocalDate; import java.util.Scanner; public class Test { public s ...

  8. 双剑合璧——掌握 cURL 和 Dig 走天涯

    如今随着大量的应用转移到网络,作为开发者,会经常做一些通讯测试,例如从网站获取信息.模拟用户向网站提交或者上传数据,查看应用通讯情况等等,现在变成了非常重要的任务. 一起来认识 cURL cURL 是 ...

  9. SVG波浪动画

    今天来试试用svg+css3制作波浪动画 下图是我制作出的效果 还不错吧 在制作波浪前,首先我们要画波浪啊,至于画波浪,如果你想直接通过计算贝塞尔曲线绘制出波浪... 好吧,那我也不拦着你 我就直接用 ...

  10. 个人永久性免费-Excel催化剂功能第87波-将批量发送邮件做到极致化,需借力Outlook

    在过往的功能中,已经实现过批量发送邮件的功能,但收到的反馈是部分企业邮箱不能用,原因是无解的,因为程序员能找到的公开的类库只能实现一些通用性的场景,太复杂的企业环境可能会失灵.近期认真来学习Outlo ...