一、数据层(包括数据访问层)
现在的方案有两种,“关系型数据库+空间数据引擎”或者扩展对象关系数据库管理系统。
1.关系型数据库(如SQL Server,Oracle等) + 空间数据库引擎(如ESRI的ArcSDE,SurperMap的SDX+,MapInfo的SpatialWare,MapGIS的SDE等)
空间数据引擎组织空间数据在关系数据库中的存储,也是空间数据的访问通道,关系数据库仅仅是存放空间数据的容器。
这种方案的优点是:
访问速度快;
支持通用的关系数据库管理系统;
空间数据按BLOB存取,可跨数据库平台;
与特定GIS平台结合紧密,应用灵活。
缺点是:
空间操作和处理无法在数据库内核中实现;
数据模型较为复杂,扩展SQL比较困难,不易实现数据共享与互操作。
2.对象关系型数据库管理系统(如SQL Server 2008,Oracle Spatial,PostgrSQL的PostGIS等)
对象关系型数据库管理系统支持抽象的数据类型(ADT)及其相关操作的定义,这样可以增加空间数据类型及相关函数,从而将空间数据类型与函数就从中间件(空间数据引擎)转移到了数据库管理系统中。另外客户也不必采用空间数据引擎的专用接口进行编程,而是使用增加了的空间数据类型和函数的标准扩展型SQL语言来操作空间数据。
这种方案的优点是:
空间数据的管理与通用数据库系统融为一体,空间数据按对象存取,可在数据库内核中实现空间操作和处理;
扩展SQL比较方便,较易实现数据共享与互操作。
缺点是:
实现难度大,压缩数据比较困难;
目前的功能和性能与第一类系统尚存在差距。
技术趋势
目前,由于“关系型数据库+空间数据引擎”的技术方案访问迅速、与GIS联系紧密的优点,在应用中占有一定的优势,但空间数据引擎独立于数据库内核,难以充分利用关系型数据库中各种成熟的数据管理、访问技术,成为进一步发展的致命弱点。另外,难以支持扩展SQL,不易实现数据共享与互操作等问题也逐渐暴露出来。面向对象空间数据库管理系统由于缺乏良好的数据基础,在访问速度尚未有重大突破,难以发展成熟,据估计在较长一段时间内面向对象数据库管理系统都不会替代对象关系型数据库管理系统。
扩展对象关系型数据库管理系统无疑将成为以后的发展方向。尽管目前PostGIS和Spatial Oracle的性能与ArcSDE仍有一定的差距,但是随着数据库厂商对空间数据管理市场的不断重视、结构化数据管理方式与空间数据管理方式的进一步融合、数据压缩传输技术的不断提高,基于数据库管理系统的空间扩展方式将会不断的完善,成为今后管理空间数据的主流技术。
个人感觉应该好好学习ArcSDE(大型,成熟,用的多),SQL Server 2008(中型,新,趋势),比较看好它,现在新版本的ArcGIS和Mapinfo也都支持SQL Server 2008。想更深入的看PostGIS吧。
二、应用服务层
需要借助基础平台(基础中间件)Java EE或.NET,这里要学习Java EE平台和.NET开发web服务的相关技术(Java EE要学的比较多如
JAX-RPC,JAX-RS,JAX-WS,JAXB,SAAJ,JAXR而.NET要学习WCF)
应用服务层包括空间服务器(GIS中间件)和WEB服务器(如Apache/Tomcat,IIS)
应用服务层将使用空间服务层的功能,应用服务层接收到的一些请求将转交给空间服务层处理。
空间服务层
空间服务层主要由GIS中间件支持如ArcGIS Server,SuperMap iService 6R,MapGIS K9 IMS,它们都有相应的SDK扩展其服务功能。应该好好学习ArcGIS Server(对.NET平台支持较好),毕竟用的最多最成熟。如果学习开源的GeoServer或SharpMap,需要基于它们自己开发Web服务。
三、表现层(客户端)
如果是浏览器,可以用三种表现层技术。
1.Ajax+ASP.NET Control/JSP tag(ArcGIS Server ASP.NET Control/JSP tag,SharpMap ASP.NET Control)
2.Javascript API(如ArcGIS Server Javascript API 基于Dojo库,OpenLayers,Google Map API)
3.Flex API或SilverLight API(ArcGIS Server Flex API/SilverLight API SuperMap iClient 6R for Flex/ Silverlight,OpenScales)
未来是RIA的时代,第三种应该好好学习。
如果是桌面,一般是对Windows,当然用.NET平台WinForm或WPF技术+GIS组件(如AO/AE,MapXtreme 2008,SurperMap Object.NET,SharpMap,MapWindow)
MFC? 哦 Charles Petzold写了Win32 API的书(最火那本),winform的(上下册),WPF的(好厚啊),唯独没有MFC
如果是移动设备,哦,我只了解Windows Mobile平台。
学习ArcGIS Server Mobile SDK和Google地图手机版(这个软件就做得非常棒)
层 | Java EE 平台 | .NET 平台 | 开源 | 重点学习 |
数据层(数据访问层) | Oracle Spatial ArcSDE/SDX+/SpatialWare+DBMS | SQL Server 2008 ArcSDE/SDX+/SpatialWare +DBMS | PostgrSQL PostGIS MySQL MySpatial | ArcSDE;SQL Server 2008 |
空间服务层 | ArcGIS Server Java SuperMap iService Java | ArcGIS Server.NET SuperMap iService .NET | GeoServer或SharpMap | ArcGIS Server.NET SharpMap |
应用服务层 | JAX-RPC,JAX-RS, JAX-WS,JAXB,SAAJ,JAXR | WCF | -- | WCF |
表现层(浏览器) | JSP tag-->Javascript API-->Flex API或SilverLight API | ASP.NETControl--> Javascript API--> Flex API/SilverLight API | OpenLayers OpenScales | JS/OpenLayers;Flex/OpenScales; SilverLight |
表现层(桌面) | -- | WinForm/WPF+AO/AE MapXtreme2008 SurperMap Object.NET | SharpMap MapWindow | WPF SharpMap |
表现层(移动) | -- | ArcGIS Server Mobile | -- | |