空间数据库设计报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

空间数据库设计报告

一、设计思想

本次空间数据库设计是基于SQL sever2008开放的外挂式空间数据库管理系统。基于传统的关系型数据库外挂式的空间数据库系统的关键在于SDE的设计与实现,SDE在用户和异构空间数据库之间提供了一个开放的接口。用户可以通过SDE服务来实现对空间数据的读取、插入、更新和删除的基本操作,还可以基于SDE实现对空间数据的分析功能,如拓扑关系的查询、缓冲区分析、叠加分析、、合并和切分等。SDE同时提供了链接DBMS数据库的接口,与数据库的操作都是在这个上面进行交互的。

1.1 数据的存储

1.1.1 几何数据的存储

把GIS数据放在RDBMS中,但是一般的RDBMS都没有提供GIS的数据类型(如点、线、多边形、以及这些feature之间的拓扑关系和投影坐标等相关信息),RDBMS只提供了少量的数据类型支持:int,float,double,Blob,Long ,char等,一般都是数字,字符串和二进制数据几种。并且RDBMS不仅没有提供对GIS数据类型的存储,也没有提供对这些基础类型的操作(如:判断包含关系,相邻、相交、求差、距离、最短路径等)。在本次数据库设计中,成功的完成了对点线面的数据的存储和相关的读取、插入、更新和删除以及可视化的显示的功能。此处的存储是基于SQLsever2008进行的,具体的存储结构如下表所示:

其中Point表中包含Point的空间信息,即空间的点的x,y坐标。由于当个点的只有相当于独立地物才会有相关的属性信息,本次在操作的时候并没有在存储的表中添加相应的属性信息。

一条线是由很多个小线段的组成的,因此在存储的时候,每个边都有一个独立的ID,每条边是由起点和终点链接起来的,因此在在这个表中只需要存储相应的点的ID即可,一般的线都是具有相关的属性信息的,故在本次设计中添加了线的属性信息,咋通过SDE对空间数据查询的时候便可以很方便的看到边的属性。

的存储一样,按照每条边两个点来存储,而是将所有的边的序列来形成一个字符串来链接,然后再通过边表来操纵点表,最后完成查询信息。每一个多边形都有相关的属性说明。

1.1.2 属性数据的存储

属性数据和结合数据的关联是通过几何数据的ID来识别的,属性数据也是存储在一个表中的,相应的没有几何类型都有自己的几何属性说明。

1.1.3 几何数据和属性数据的说明

在上述的设计中,在几何数据的表中设置了相应的一些数据说明,其实其按照严格意义上来将就是属性数据,这是方便说明数据的信息,对于一些几何类型承载的信息比较的复杂的数据相应的也是设计了专门的属性数据表,同几何数据的ID来进行级联操作,如对数据的读取、更新、插入或者是删除等。

1.2 数据的维护和管理。

1.2.1 空间数据的维护

空间数据的维护包括几何数据和空间几何数据的增加、更新、删除、维护等操作。本次实习所完成的系统已经成功实现了对空间数据点、线和面类型的操作。本次实现中,将对点、线和面的数据维护分别封装在不同的类中,用户可以通过SDE来完成从SQL中取出数据,并且对数据进行相应的维护。下面就对点线面的实现分别做以介绍。

1.2.1.1 点的维护

在空间数据库中,点的几何信息的存储就是完成X、Y坐标的存储即可,同样对数据的操作就是只需要完成相应的点的坐标的操作即可。数据库中点的存储已经做过相应的介绍,现在就封装为数据引擎的设计做以说明。

首先将点数据类型封装为一个类,类中分别定义与点的查询、插入和删除对应的函数,在每次调用这些函数的时候,都是调用一个唯一的接口来对数据库进行来接的。

////////////////定义数据源连接字符串变量并赋值///////////////

CString g_strConnect=_T("DSN=S_DataBasechenxiong;UIN=sa;PWD=sa");//数据源链接字符串

CDatabase p_DB;

BOOL bReturn =p_DB.OpenEx(g_strConnect,0);

if(bReturn==FALSE||!p_DB.BeginTrans())//数据库请求传送数据

{

MessageBox((LPCTSTR)"访问数据库失败!",(LPCTSTR)"错误信息!",MB_OK|MB_ICONERROR);

p_DB.Close();

return;

}

上述通过CDatabase提供了链接数据库的接口,在每个要素封装的类中,都提供了与该类的接口,以此链接数据库。

相应函数的声明:

void dlgPoint::OnBnClickedButtonquerypoint()//查询点

void dlgPoint::OnBnClickedButtoninsert()//插入一个点

void dlgPoint::OnBnClickedButtondelete()//删除点的操作

1.2.1.2 线的维护

线的操作和点的操作有点类似,由于线中存储的是点的ID,因此在具体的实现的时候有所不同。无论在执行对线的删除或者是对线的增加,其实质上都是对点的操作。链接数据的方式与点的一样,不做过多的介绍。

CDatabase p_DB;

BOOL bReturn =p_DB.OpenEx(g_strConnect,0);

if(bReturn==FALSE||!p_DB.BeginTrans())//数据库请求传送数据

{

MessageBox((LPCTSTR)"访问数据库失败!",(LPCTSTR)"错误信息!",MB_OK|MB_ICONERROR);

p_DB.Close();

return;

}

相关文档
最新文档