当年oracle和ESRI共同开发了一个扩展,也就是今天的oracle spatial,空间数据的存储问题本质上是空间数据的组织和解释,ora spatial就是对关系型的一个扩展,也就是说将地理对象作为一个字段,类型是geometry(可以看一下对象关系型数据库)。
一、SQL/Oracle数据库是怎样与GIS的应用相联系起来的
当年oracle和ESRI共同开发了一个扩展,也就是今天的oracle spatial,空间数据的存储问题本质上是空间数据的组织和解释,ora spatial就是对关系型的一个扩展,也就是说将地理对象作为一个字段,类型是geometry(可以看一下对象关系型数据库),与一般sql的char的表达的型的思想概念都是一样的(数据库中术语叫做啥来着?值域?)反正就是一个型的概念。那么剩下的问题就是一个型到底提供什么功能?空间中的矢量分为点,线,面,多线多面等等基本的一些类型。将这些类型对应的数据转换为字符串,写入数据库的一个字段中,比方说一个点数据,就是一个字符串1,30000,40000。这个1就表示这是一个点,30000,40000就是实际的坐标。同时,空间数据库提供一个底层支持,负责对其作出解释,并给用户提供一个api,例如存储过程和函数。当需要取数据的时候,就用SQL语录从表中将数据取出来,前面讲的数据库提供的api负责作出解释和计算。ArcSDE扮演的角色就是不断的对数据库进行存取和取出。你可以找数据试试,在arcgis中存到oracle中,然后用sql developer打开看一下,也可以看一下这个geometry类型提供的各种存储过程和函数,用起来太爽了。总之,数据库扮演的角色就是存取数据和对存取的数据作出司法解释的过程。
网络的本质就是传输数据; 网络的本质就是传输数据; 网络的本质就是传输数据;重要的事情说三遍。至于通过网络传输的数据是什么内容,怎么解释那就由客户端和服务端说了算了。简单地来讲就是借助于网络底层支持,各个软件产品来制定自己的游戏规则。
记得好像看过早期的空间数据在数据库中采用直接存文件或者用关系表来存储坐标啥的,我没有用过,就不班门弄斧了。在oracle 官网的帮助文档中有专门对spatial模块,强烈推荐感兴趣的翻一翻,绝对是详细到哭啊。
再说说应用的问题,假如有这么一个场景,某某市政是你的甲方爸爸,你要做一个城市管网信息管理系统,有各种各种的管线图,包括道路啊,路灯啊,杂七杂八的东西,这些数据就可以存储在数据库中,存储的部分解决了,剩下的就是一般的Web开发了,包括一般的GIS系统,WebGIS开发。其实做开发还是一件很有意思的事情,从事计算机的人大部分不会GIS开发,会GIS开发的一般也不会接触空间数据库,如果这三个都能用熟练运用,在GIS开发这个行业怎么的也属于上流社会的人吧,
延伸阅读:
二、空间数据引擎
关系型数据库无法存储、管理复杂的地理空间框架数据以支持空间关系运算和空间分析等GIS功能。因此,GIS软件厂商在纯关系数据库管理系统基础上,开发空间数据管理的引擎。空间数据引擎(Spatial Database Engine,简称SDE)是用来解决如何在关系数据库中存储空间数据,使空间数据实现真正的数据库方式管理,建立空间数据服务器的方法。空间数据引擎是用户和异种空间数据库之间一个开放的接口,它是一种处于应用程序和数据库管理系统之间的中间件技术。用户可通过空间数据引擎将不同形式的空间数据提交给数据库管理系统,由数据库管理系统统一管理,同样,用户也可以通过空间数据引擎从数据库管理系统中获取空间类型的数据满足客户端操作需求。目前GIS软件与大型商用关系型数据库管理系统(RDBMS)的集成大多采用空间数据引擎来实现。使用不同GIS厂商数据的客户可以通过空间数据引擎将自身的数据提交给大型关系型DBMS,由DBMS统一管理。同样,客户也可以通过空间数据引擎提供的用户和异构数据库之间的数据接口,从关系型DBMS中获取其它类型的GIS数据,并转化成客户可以使用的方式。空间数据引擎就成为各种格式的空间数据出入大型关系型DBMS的转换通道。