从底层谈WebGIS 原理设计与实现(一):开篇
从底层谈WebGIS 原理设计与实现(一):开篇
1.前言
我相信大家对百度地图,谷歌地图等相关应用已经是非常熟悉了。通过这些应用,我们可以浏览地图、定位我们自己的位置、查找我们想知道的兴趣点、搜索交通路线等等。而其实,这些功能便是WebGIS的一些最基本的功能。
那么什么是WebGIS呢,说到这里,我还是首先给大家讲讲什么是GIS。
2.GIS简介
2.1 GIS的名词解释
GIS的全名是Geographic Information System,中文全名是地理信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
2.2 什么是GIS学科
撇开这些晦涩的文字,我争取用更形象的方法来给大家介绍下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是利用测绘生成纸制地图或者航拍以及卫星等生成影像后,将这些数据存储在计算机中,以地图或图片的形式表现出来,然后根据实际生产生活以及科研中的各种需求,进而提供具体的经过处理后的数据。
3.WebGIS简介
3.1什么是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功能的一个应用方向。
3.2对国内WebGIS行业的理解
目前使用WebGIS技术的公司可以大致分为两个方向:一个是互联网方向,一个是行业应用方向。
国内的互联网方向里基本可以说已经被百度地图,搜搜地图,高德地图,三个巨头垄断。所以对于想从事互联网方向的WebGIS开发人员,其实可以选择的大公司并不多。但是,如果你是一个技术足够好,且技术不局限于一般的关系数据库,对大数据和分布式系统感兴趣的WebGIS开发人员,强烈建议你去这些互联网公司,在那里你能接触到最新的IT技术以及感受到强大的头脑风暴。也便是,对新技术,对前沿方向有更多追求的人,去互联网公司是很好的选择。
但是我们不得不承认另外一个现实,这些互联网公司基本集中在北上广深,并且对GIS研发人员在技术上的需求是,计算机技术的比重要远大于对GIS学科本身的理论所占的比重。于是,更多的GIS学科出身的人,最后选择的是行业应用公司。而投身于这样的公司,就没有前途吗?答案是否定的。
Esri公司作为全球最成功的GIS软件公司,很好的给出了这个答案。目前Esri的AO库号称世界上第二大的库,除了微软的Framework,就是它了。它同时也是一个年盈利在8亿美元的公司。Esri公司与美国和加拿大政府的合作堪称行业公司的典范,它为这两个国家的数字化城市的建设立下了汗马功劳,做出了很多优秀的作品。说这个例子,只是为了表明,在我们的数字化城市的需求越来越深入,政府的需求越来越实际,整个国家的市场建设越来越合理以及公平公正透明,WebGIS在行业上的应用也将越来越广泛,并且越来越能够服务政府、企业和人民,并且更能做出有真实价值的产品。并且,从事行业应用的研发人员,随着对所从事行业理解的深入,这些理解给未来所带来的收获可能比技术单纯的提高所带来的收获要大得多。要知道,项目需求分析靠的基本是行业理解,当然,对技术的了解也给项目可行性分析提供了保障。两者相辅相成。
每个人追求不一样,根据自己的需求,根据自己的现状,做出选择,坚持下去,不说梦想是否能实现,起码你不会是一个自己都认为自己活该如此平庸的人。
4.WebGIS的框架
前面说了太多的非技术类的话,这里我们开始提一个技术类话题——WebGIS的框架。其实WebGIS的框架跟其他Web项目的框架没有很多本质上的区别。可能唯一的不同是WebGIS需要提供一些地图方面的功能服务。这里我先把这个框架给出,同时每个层面需要的技术我也在其中大致画出。
4.1前端
如所有的Web项目一样,前端由HTML、CSS、JS、Flex等语言组成。根据需求和语言的特性,选择合适的语言进行开发是至关重要的。没有最好的语言,只有最合适的语言。
4.2 后台程序
4.2.1 中间件
开发时,我们要选择适合自己的中间件。不同的中间件有其特性,如果是一般项目,tomcat等是很合适的,其使用方便,相关技术支持和资料也很好查找。但是如果是大型的集群项目,Weblogic和WebShpere可能是更好的选择,但是这两个中间件首先配置就是有难度的,同时不同的版本,可能对某些jar包的支持存在问题。如果项目必须使用国产的中间件,TongWeb和Apusics是不错的选择。
4.2.2 地图服务器
在WebGIS中,与其他一般的Web工程有明显区别的就体现在地图服务器上面。一般的地图服务器都由已有的软件商提供了解决方案,比较流行的有AGS、Geoserver、MapServer、SuperServer等。利用这些地图服务器我们能很好的实现地图的发布以及对一些空间查询和空间操作的支持。
4.2.3 业务服务器
业务服务器是Web项目里不可获取的一环。不管是利用哪些已有框架编写,比如Spring、Struts、Hibernate等,我们一般还是会将业务服务器的实现分为三个层次,即有名的MVC模式。而不同的框架里这三个层次的实现各有差别。
4.3 数据
WebGIS的数据大致可以分为三种,一种是地图、影像数据,一种是空间属性数据、一种是业务数据。地图、影像数据一般是一些png或者其他格式的数据组成。
在GIS中有个很重要的概念,即影像金字塔。这个概念主要是为了加速地图在前端的显示。而我们准备地图、影像数据时,也一般会首先对这些数据进行切图。
空间属性数据,是通过一些工具将已经整理好的数据进行入库。对于AGS,只有连接的是入库数据的mxd,才能发布成FeatureServer服务,以供数据的编辑。当然,空间数据入库后还可以支持业务逻辑的使用。
第三种数据,业务逻辑数据,是每个Web项目必须有的,它根据不同的业务需求将业务所需的数据进行采集和入库。
5.从WebGIS的原理谈起
目前很多公司都提供了自己的二次开发包,在前端的有OpenLayers、AGS API for JS/Flex等。在后台的也有geoTools、AO等。用这些开发包,我们可以很快的实现出图以及很多GIS功能,基本上不用写太多的编码。
但是,同样,由于封装的太好,很多WebGIS的原理我们也便忽略而不做了解了。
这里,我希望利用我薄弱的知识,能和大家一起,探讨一些WebGIS中常用的原理知识。希望大家支持。
6.感想
由于我薄弱的理论和技术基础,也谈不上对WebGIS的明天有很大的预言。我只希望我们每个人都争取做一个完美主义者,同时也是一个有圣徒情怀的人,从而作践自己实现目标。与大家一起进步。希望我也能保持自己的写作动力,积累经验和知识。
从底层谈WebGIS 原理设计与实现(一):开篇的更多相关文章
- 从底层谈WebGIS 原理设计与实现(三):WebGIS前端地图显示之根据地理范围换算出瓦片行列号的原理(转载)
从底层谈WebGIS 原理设计与实现(三):WebGIS前端地图显示之根据地理范围换算出瓦片行列号的原理 1.前言 在上一节中我们知道了屏幕上一像素等于实际中多少单位长度(米或经纬度)的换算方法, ...
- 从底层谈WebGIS 原理设计与实现(六):WebGIS中地图瓦片在Canvas上的拼接显示原理
从底层谈WebGIS 原理设计与实现(六):WebGIS中地图瓦片在Canvas上的拼接显示原理 作者:naaoveGI… 文章来源:naaoveGIS 点击数:1145 更新时间: ...
- 从底层谈WebGIS 原理设计与实现(五):WebGIS中通过行列号来换算出多种瓦片的URL 之在线地图
从底层谈WebGIS 原理设计与实现(五):WebGIS中通过行列号来换算出多种瓦片的URL 之在线地图 作者:naaoveGI… 文章来源:naaoveGIS 点击数:2063 更 ...
- 从底层谈WebGIS 原理设计与实现(四):WebGIS中通过行列号来换算出多种瓦片的URL 之离线地图
从底层谈WebGIS 原理设计与实现(四):WebGIS中通过行列号来换算出多种瓦片的URL 之离线地图 作者:naaoveGI… 文章来源:naaoveGIS 点击数:1759 更 ...
- 从底层谈WebGIS 原理设计与实现(二):探究本质,WebGIS前端地图显示之地图比例尺换算原理
从底层谈WebGIS 原理设计与实现(二):探究本质,WebGIS前端地图显示之地图比例尺换算原理 作者:naaoveGI… 文章来源:http://www.cnblogs.com/naaove ...
- 浅谈PHP代码设计结构
浅谈PHP代码设计结构 您的评价: 还行 收藏该经验 coding多年,各种代码日夜相伴,如何跟代码友好的相处,不光成为职业生涯的一种回应,也是编写者功力的直接显露. 如何看 ...
- DRAM的原理设计
在一个电子系统中,CPU.内存.物理存储.IO这些单元必不可少,只不过有的集成在CPU内部,有的分离出来. 这里就针对系统中的内存,此处选用DRAM来进行说明,讲述下基本的原理设计,主要分为以下几个部 ...
- Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...
- Atitit.字节数组转字符串 base64 base16 Quoted-printable 编码原理设计 attilax 总结
Atitit.字节数组转字符串 base64 base16 Quoted-printable 编码原理设计 attilax 总结 1. Base64编码, 1 2. Base64实现转换原理1 3. ...
随机推荐
- 测试开发系列之Python开发mock接口(一)
什么是mock接口呢,举个栗子,你在一家电商公司,有查看商品.购物.支付.发 货.收获等等等一大堆功能,你是一个测试人员,测测测,测到支付功能的时候,你就要调用第三方支付接口了,真实支付,直接扣你支付 ...
- nyoj 光棍的yy
655-光棍的yy 内存限制:64MB 时间限制:1000ms Special Judge: Noaccepted:2 submit:3 题目描述: yy经常遇见一个奇怪的事情,每当他看时间的时候总会 ...
- [转]Maven中profile和filtering实现多个环境下的属性过滤
背景 项目构建的时候,需要根据不同的场景来改变项目中的属性资源,最为常见的莫过于数据库连接配置了,试想有生产环境.测试缓存.发布环境等,需要为不同的场景下来动态的改变数据库的连接配置.而使用maven ...
- 解决webpack不是内部命令
在指定路径下安装webpack npm install webpack --save-dev 但是报”不是内部命令错误" 解决方法:安装全局webpack npm install web ...
- golang中如何判断文件是否有可执行权限
本文介绍在Go语言如何检查文件的权限.以检查文件可执行权限为例. 在文件系统中,文件的属性使用uint32表示. 例如 -rwxrwxrwx 判断可执行权限,也就是检查文件mode是否有: --x-- ...
- GNU C与ANSI C的不同
引用:http://tsroad.lofter.com/post/376316_57ac519 1.GNU C可定义0长度数组,目的是为了定义可变长结构体. struct var_struct{ ...
- 更新上篇文章 调用三级目录文章内容 dede频道页实现三级栏目嵌套调用文章
原文:http://www.wuaie.com/?p=66 源码改写 $typeid = $row['id']; if((class_exists('PartView'))) { $pv = new ...
- 关于java泛型的使用方式。。。。
转自:http://onewebsql.com/blog/generics-extends-super 以下基本够用了 Today we continue our mini-series on Jav ...
- AIX6.1 线程模型说明
引文:线程模型(Threading Model)默认从进程域 (M:N 模型 ) 改为系统全局域 (1:1 模型 ) 在 AIX 5L 中,pthread 线程的默认模型是 m:n 方式,而从 AIX ...
- 浏览器缩放导致的样式bug
缩放75% 这种问题修改的话 要兼顾多种浏览器,并且有些地方样式是要求写死的,修改成本会比较大,所以一般是不会去处理的