空间数据库设计报告

合集下载

(最新版)空间数据库毕业课程设计报告

(最新版)空间数据库毕业课程设计报告

空间数据库课程设计兼ARCSDE入门手册一.ArcSDE的配置数据库的创建数据库的配置数据库的网络配置数据库的控制和管理ArcSDE的配置二.数据库的设计建立数据库连接表的创建与设计版本的注册与创建成员角色与任务分配三.问题与解决方案软件本身的问题多版本编辑的问题四.总结个人心得各成员工作情况一.ArcSDE的配置1.数据库的创建:打开Database Configuration Assistant工具如图(1.1)所示为初始界面图(1.1)按照向导对话框依次选择执行的操作创建数据库→选择一般用途的模→输入数据库名称和SID号(*注意SID号默认和数据库名相同)→管理选项(默认设置)→输入口令号(*可以根据不同的用户设置不同的口令)→存储选项(默认设置)→数据库文件所在位置(默认设置)→恢复配置(默认设置)→数据库内容(默认设置)→初始化参数(默认设置)→数据库存储(默认设置)→创建选项(如图1.2)→确定对话框→开始创建图1.22.数据库的配置创建数据库成功之后需要进行数据库的配置,同上打开Database Configuration Assistant工具,点击下一步,选择配置数据库选项→选择需要配置的数据库→数据库内容(默认设置)→连接模式(*客户机较少时默认设置),点击完成开始配置数据库(如上图) 3.数据库的网络配置配置数据库之后,打开Oracle Net Configuration Assistant工具,如图(1.4)为初始界面图1.4按下一步进入监听程序配置→监听程序(*若需要添加新的监听程序,选择添加,这里选择已有的监听程序,选择重新配置如右图)→选择监听程序→选择协议(默认有TCP)→选择端口(*端口号默认为1521,若配置了多个监听程序,不应重复使用1521端口,否则后期的本地NET服务名配置会出错,如右图)→完成配置好监听程序后配置本地NET服务名配置→重新配置→选择Net服务名(根据新创建的数据库选择服务名)→服务名配置(输入新创建的数据库名)→选择协议(默认配置)→输入主机号和选择端口(主机号为计算机名)→选择测试→测试登录方式用户名填system,口令重新输入,如右图(若测试失败,可以试着重新配置数据库,注意配置端口号)4.数据库的控制和管理工具: OEM和SQL*PLUS登录OEM方式:网页登陆。

空间数据库设计

空间数据库设计

空间数据库设计随着现代科技的不断进步,空间数据库设计已成为地理信息系统(GIS)和相关领域中一个至关重要的环节。

空间数据库主要负责存储和管理地理空间数据,包括但不限于地形、地貌、建筑物、道路等地理信息。

本文将探讨空间数据库设计的重要性及其在实现数据高效存储和管理方面的关键作用。

一、空间数据库设计概述空间数据库设计是针对空间数据的存储和管理进行规划和构建的过程。

它需要对空间数据的特性和关系进行深入理解,并运用相关的数据库技术来实现数据的有效组织和存储。

空间数据库设计需要考虑数据模型的建立、数据结构的优化、数据存储的方式以及数据访问的控制等问题。

二、空间数据库设计的重要性1、提高数据存储效率空间数据库设计通过对数据模型的优化和数据结构的调整,可以提高数据的存储效率。

这不仅可以减少存储空间的需求,还可以降低数据的维护成本。

2、增强数据管理能力通过合理的空间数据库设计,可以实现对空间数据的有效管理,包括数据的查询、更新、删除等操作。

这有助于提高数据处理效率,并保证数据的一致性和完整性。

3、促进数据共享与应用良好的空间数据库设计可以促进数据的共享与应用。

通过数据模型和数据结构的规范化,可以实现不同系统之间的数据共享和交互,从而扩大数据的应用范围。

三、空间数据库设计的关键环节1、数据模型的选择与优化在空间数据库设计中,选择适合的数据模型是至关重要的。

常见的空间数据模型有层次模型、网络模型、关系模型等,选择哪种模型取决于具体的应用需求和数据特点。

还需要根据实际需求对数据模型进行优化,以提高数据处理效率。

2、数据结构的规划与调整数据结构是空间数据库设计的核心部分,它决定了数据的组织方式和访问方式。

在规划数据结构时,需要考虑数据的完整性、一致性、并发控制等因素,以确保数据的安全性和可靠性。

同时,还需要根据实际应用需求对数据结构进行调整和优化,以满足不同场景下的数据处理需求。

3、数据存储策略的制定与实施制定合理的数据存储策略可以有效提高空间数据库的性能。

东北大学空间数据库实验报告

东北大学空间数据库实验报告

空间数据库原理课程设计学院:资源与土木工程学院班级:测绘1402班姓名:古再丽努尔·喀日学号: ******** 指导老师:***2016 年 12 月实习成绩评定表目录一Access数据库实验报告实验一创建Access数据库 (4)实验二创建和使用表 (6)实验三查询设计 (10)实验四SQL语言 (12)实验五窗体设计 (14)实验六报表设计 (16)实验七宏 (17)实验八数据访问页设计 (17)实验九小型数据库管理系统的设计 (18)二空间数据库概念设计实验报告1.1实验要求 (20)1.2实验目的 (22)1.3 实验步骤 (25)1.4 实验内容 (28)1.5实验分析 (32)三基于ArcSDE与Postgresql的空间数据库实验报告1.1实验要求 (43)2.数据库的配置 (45)3.数据库的网络配置 (46)4.数据库的控制和管理 (48)5.ArcSDE的配置 (50)6.postgreSQL (53)空间数据库实验报告一,Access数据库实验报告实验要求Microsoft Access应用实验是Microsoft Access应用课程的重要组成部分,属于学科基础实验范畴,是与相关教学内容配合的实践性教学环节。

学生通过实验,验证课堂学习的知识,掌握数据库、数据表建立、查询、窗体、报表、宏以及数据访问页的方法,从而具有小型数据库管理系统的设计能力。

实验一创建Access数据库【实验目的】1.了解Access数据库窗口的基本组成2.熟悉Access的工作环境,达到熟练使用的目的3.学会查找7个数据库对象的相关帮助信息,为以后实验打下基础4.学会如何创建数据库文件【实验内容】1.启动Access数据库,在“d:\Access练习”文件夹中创建一个名为“图书管理.mdb”的空数据库文件。

2.启动Access数据库,使用“库存控制”向导创建一个名为“库存管理.mdb”的数据库文件,并保存在“d:\ Access练习”文件夹中。

空间数据库实验报告

空间数据库实验报告

一、实验目的1. 了解空间数据库的基本概念和原理;2. 掌握空间数据库的建立、管理和使用方法;3. 熟悉空间数据库的查询和操作;4. 提高空间数据处理和分析能力。

二、实验环境1. 操作系统:Windows 102. 数据库管理系统:MySQL 5.73. 开发工具:Visual Studio Code4. 空间数据库驱动:MySQL Spatial Extension三、实验内容1. 空间数据库的建立与配置(1)创建数据库打开Visual Studio Code,连接到MySQL数据库服务器,执行以下SQL语句创建空间数据库:CREATE DATABASE IF NOT EXISTS spatial_db;(2)创建空间表在空间数据库中创建空间表,使用以下SQL语句:CREATE TABLE IF NOT EXISTS cities (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),geom GEOMETRY NOT NULL,INDEX geom_idx (geom));2. 空间数据的插入与查询(1)插入空间数据使用以下SQL语句插入空间数据:INSERT INTO cities (name, geom) VALUES ('Beijing',ST_GeomFromText('POINT(116.4074 39.9042)'));INSERT INTO cities (name, geom) VALUES ('Shanghai',ST_GeomFromText('POINT(121.4737 31.2381)'));(2)查询空间数据查询与给定坐标点距离小于10公里的城市:SELECT name FROM cities WHERE ST_Distance(geom,ST_GeomFromText('POINT(116.4074 39.9042)')) < 10000;3. 空间数据的更新与删除(1)更新空间数据使用以下SQL语句更新城市名称:UPDATE cities SET name = 'Beijing New City' WHERE name = 'Beijing';(2)删除空间数据使用以下SQL语句删除城市:DELETE FROM cities WHERE name = 'Beijing New City';4. 空间数据的聚合与分析(1)计算所有城市的面积SELECT name, ST_Area(geom) AS area FROM cities;(2)计算相邻城市的距离SELECT name, name AS neighbor, ST_Distance(geom,ST_GeomFromText('POINT(116.4074 39.9042)')) AS distanceFROM cities, cities AS neighborWHERE <> AND ST_Distance(geom, neighbor.geom) < 10000;四、实验结果与分析1. 成功创建空间数据库和空间表,并插入、查询、更新和删除空间数据;2. 空间查询和分析功能正常,可以计算城市面积和相邻城市距离;3. 实验过程中未出现异常,空间数据库运行稳定。

空间数据库课程设计

空间数据库课程设计

空间数据库原理课程设计学院:资源与土木工程学院班级:测绘1402班姓名:古再丽努尔·喀日学号: 20141668 指导老师:郭甲腾2016 年 12 月实习成绩评定表目录1.地图编辑 (4)1.1裁剪及符号规范化 (6)2.添加控制 (7)2.1 添加引用和代码 (8)3. 总结 (10)空间数据库原理课程设计报告本次课程设计中我安装了相应的软件运行操作之外还辅助完成了图形裁剪,图层添加,图形边框设计,通过组员们的耐心讲解,以及查阅相应资料和笔记看懂了菜单栏的数据导入的代码,而且从我们组的成员学到了不少。

1.地图编辑地图编辑功能涉及到比较复杂的地图与鼠标的交互以及事件的响应,ArcGIS提供了强大的地图编辑的相关功能。

本节我们将尝试实现一些简单的地图编辑功能,包括点、线、面要素形状的创建和移动。

通过本节希望你能掌握Arc Engine实现地图编辑的机制以及常用的地图编辑的接口。

1.1裁剪及符号规范化首先把nsdi文件解压选出相应文件重命名放到另一个文件夹。

②打开ArcMap 软件,把重命名的新文件夹加载出来,导入文件把选出的文件按点线面进行重命名分类保留,为了研究出辽宁省洪水问题,用draw框出辽宁省进行裁剪。

③裁剪:layer-data frame-clip to shape-outline of selected graphic 步骤裁剪出辽宁省即可把框删除。

④裁剪完后进行文件的保存成.mxd文件,进行下一步操作。

⑤其次对省级,县级行政界线,河流的面,国家的线面等进行删除,保留边框线,使之规范化,即符号规范化。

对市,县,区等进行符号规范化。

保存该.mxd文件。

2.添加控制新建一个C#.Net项目,项目名称为Overlay,将Form1的名字设置为Main Form,Text属性设为“地图编辑”,并添加Toolbar Control 、Map Control、TOC Control、License Control、四个Button、两个Combo Box、两个Label和一个Group Box等控件。

空间数据库的建立实验报告

空间数据库的建立实验报告

空间数据库的建立实验报告空间数据库是一种用于存储和管理空间数据的数据库系统。

它具有将空间数据与地理位置进行关联的能力,能够有效地存储和查询地理信息。

本文将介绍空间数据库的建立实验报告。

一、引言空间数据库是地理信息系统(Geographic Information System,GIS)中的重要组成部分,它可以存储和管理地理空间数据,如地图、遥感图像等。

在实际应用中,空间数据库可以广泛应用于城市规划、环境监测、交通管理等领域。

本实验旨在通过建立一个空间数据库,探索其在地理信息管理中的应用。

二、实验目的1.了解空间数据库的基本概念和原理;2.掌握空间数据库的建立方法;3.熟悉空间数据库的查询与分析功能;4.实践运用空间数据库解决实际问题。

三、实验步骤1.选择合适的空间数据库管理系统(Spatial Database Management System,SDMS),如PostgreSQL+PostGIS;2.安装和配置SDMS,确保系统正常运行;3.创建数据库,并设计空间数据表结构;4.导入地理空间数据,如地图数据、遥感图像等;5.进行数据查询和分析,验证空间数据库的功能。

四、实验结果与分析在实验中,我们选择了PostgreSQL作为SDMS,并通过PostGIS 扩展实现空间数据的存储和管理。

首先,我们创建了一个名为"gis"的数据库,并设计了三个表:地图表、地点表、线路表。

地图表存储了各个地图的名称、边界等信息;地点表存储了各个地点的名称、经纬度等信息;线路表存储了各个线路的起点、终点、长度等信息。

然后,我们导入了一份城市地图数据,并进行了一些简单的查询和分析。

通过查询地点表,我们可以找到某个地点的经纬度;通过查询线路表,我们可以计算某条线路的长度。

此外,我们还可以通过空间查询,查找某个地点周围一定范围内的其他地点。

实验结果表明,空间数据库能够有效地存储和管理地理空间数据,并提供了丰富的查询和分析功能。

空间数据库课程设计报告第五章

空间数据库课程设计报告第五章

空间数据库课程设计报告第五章第5章空间数据的加载、传输和验证⼀、向SDO_GEOMETRY列中插⼊数据新建⼀个sales_regions表,向表中插⼊⼀个多边形⼏何体,运⽤前⾯学过的SDO_GEOMETRY数据类型。

SQL语句如下:程序5—1CREATE TABLE sales_regions(id NUMBER,geom SDO_GEOMETRY);把表⽰销售区域的多边形插⼊到这表中的geom列中,SQL语句如下:程序5-2INSERT INTO sales_regions VALUES(10000, -- SALES_REGIONS IDSDO_GEOMETRY -- use the SDO_GEOMETRY constructor(2003, -- A two-dimensional Polygon8307, -- SRID is GEODETICNULL, -- SDO_POINT_TYPE is null as it is not a pointSDO_ELEM_INFO_ARRAY (1, 1003, 1), -- A polygon with just one ringSDO_ORDINATE_ARRAY -- SDO_ORDINATES field(-77.04487, 38.9043742, -- coordinates of first vertex-77.046645, 38.9040983, -- other vertices-77.04815, 38.9033127, -77.049155, 38.9021368,-77.049508, 38.9007499, -77.049155, 38.899363, -77.048149, 38.8981873, -77.046645, 38.8974017, -77.04487,38.8971258, -77.043095, 38.8974017, -77.041591, 38.8981873, -77.040585, 38.899363, -77.040232, 38.9007499, -77.040585, 38.9021368, -77.04159, 38.9033127, -77.043095, 38.9040983, -77.04487, 38.9043742 -- coordinates of last vertex same as first vertex )));⼆、加载和转换空间数据(⼀)⽤SQL*Loader从⽂本⽂件加载SQL*Loader是Oracle的⼀个⼯具,⽤于从⽂件向Oracle表加载数据,可以执⾏批量加载。

空间数据库实验报告

空间数据库实验报告

实验一拓扑规则实验题目:拓扑规则实验准备:相关概念解释1、拓扑关系:是指图形要素之间几何上的相互关系,图形在保持连续状态下即使变形,相互之间的关系依然不变。

2、Geodatabase的拓扑规则包括点拓扑规则、线拓扑规则、多边形拓扑规则。

3、拓扑结构:即反映拓扑关系的结构,利用拓扑关系的空间数据结构,不仅要记录要素的空间位置(坐标),而且记录不同要素在空间上的相互关系。

4、Geodatabase 用一系列的拓扑规则(Rule ,Topology Rule),在空间要素之间建立起相互关系,即拓扑结构。

5、悬结点(Dangle):仅和一个线要素相连,孤立的结点6、伪结点(Pseudo):两个线要素相连、共享一个结点7、普通结点:三个或者三个以上的线要素交汇、共享一个结点8、线簇容差(Cluster Tolerance):不相连的要素拐点之间的最小距离9、问题区(Dirty Area):建立拓扑关系后,又被编辑过的空间范围,该范围很可能存在不符合拓扑规则的要素。

10、差错(Error):不符合拓扑规则的地方,用红点、方块、线表示。

实验内容:1、拓扑规则用于同一图层内数据质量检验。

2、拓扑规则用于不同一图层内数据质量检验。

实验过程:1、拓扑规则用于同一层内数据质量检验1.1 建立线要素拓扑规则启动ArcCatalog ,将路径定位到c:\gis_ex09\ex22.mxd,利用拓扑规则Must Not Have Dangles(不能出现悬节点)为Geo_DB22\dataset1\lotlines建立拓扑关系Dataset1_Topology,建立后,成果如图1-1,意思是有三个悬节点,不符合预定义的拓扑规则图1-11.2修改拓扑错误关闭ArcCatalog,启动ArcMap,打开ex22.mxd,激活Data frame1,除了已经存在的lotlines以外,加入Dataset1_Topology,可以看出有三处拓扑错误——线过长、线过短、线多余,调动Editor,打开Topology拓扑工具条和Advanced Editing 高级编辑工具条,Start Editing开始编辑辑,此处例举线过短时的编辑情况,选中参考边界,在Advanced Editing高级编辑工具条中选择Extention工具,点击需要延长的线,如图1-2,过短的线就延伸到参照线——图1-2当将当前窗口的拓扑关系错误一一修改后,需要验证刚才编辑过的地方是否还有错误,则需勾取Dataset1_Topology图层中Properties中Symbology Dirty Areas (问题区),则地图上刚刚编辑过的地方有三个蓝色区域,如图1-3图1-3则只需再对Dirty Areas进行拓扑关系验证,即利用Vilidate Topology In Specified Area工具进行质量验证,无拓扑错误后,如图1-4——(如若有错,仍需进一步修改)图1-41.3生成地块多边形启动ArcCatalog,右击Geo_DB22\dataset1,选用New\Polygon Feature FromLines(从线要素产生多边形),生成一个新的多边形要素类lotspolygons ,预览如图1-5 图1-52、拓扑规则用于不同图层之间数据检测2.1 建立不同要素之间的拓扑关系在ArcCatalog中Geo_DB22\dataset2下为Road、Parcel建立拓扑关系Topology22.2修改拓扑错误在ArcMap中利用Topology2对Road、Parcel进行拓扑查错并修改,此处的拓扑关系主要是多边形共同边界的错误和线多余的错误,正确修改后结果如图1-6 图1-6实验小结:1、Geodatabase可以有多种线、点、多边形规则,用于控制要素类之间的特定空间关系。

  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;}具体的函数声明如下:void dlgEdge::OnBnClickedButtonQueryEdge()//查询边表函数void dlgEdge::OnBnClickedButtonAddEdge()//添加边void dlgEdge::OnBnClickedButtonDeleteEdge()//删除边的操作1.2.1.3 面的维护对面的操作大致与上面两种要素类似,在具体实现的时候也离不开另外两种要素,例如在查询的时候,首先应该得到的是面的ID,通过面的ID得到边的一系列字符串,通过读取字符串的每一个字符来得到相应的边的ID,最后通过边的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;}具体函数的声明如下所示:void dlgArea::OnBnClickedButtonQueryArea()//查看面的属性void dlgArea::OnBnClickedButtoninsert()//插入一个面void dlgArea::OnBnClickedButtondelete()//删除一个面1.2.2 空间数据的管理能够通过图形用户界面实现对空间数据库的管理,支持图形显示及编辑交互、支持对地理数据图层的管理(图层的增、删、改、枚举)。

本次设计中,设计了对点线面操作的用户界面,通过用户界面可以实现对几何要素的显示和相应的几何要素的属性的操作,以及对几何要素的增加、删除、修改和读取等。

在查询的过程中,由于时间的原因,对各种数据的查询并没有设计好相应的索引,而是直接查询的,这是本次实习的第一个缺陷。

初次之外,图层的分层显示也是一个没有实现的,因此在此基础上形成的分析功能如buffer、叠加、网络分析都没有实现,在设计过程中尝试过使用ArcGIS Engine来实现相应的分析功能,功能模块虽然可以实现,但是在具体数据存储这一块就出现了bug,由于自身的积累的问题,并没有是实现相应的操作,下面就本次实习实现的功能做一介绍。

1.2.2.1 点的管理用户操作界面如下图所示:如上图所示,编辑框是相应的输入要插入点的信息,右边的功能按钮实现了对点的查询、插入和删除的操作。

上述实现的是插入一个点的操作,由于要对数据库进行操作,故在实现时要对数据库进行链接。

可以查看一下SQL sever表中,里面更新了点的编号为16的点,如下图所示:点的可视化操作,点的可视化是在单文档中使用绘图工具实现的如下图所示,由于点比较少,所以看的不是很清楚,下图中红色椭圆圈表示显示的点:1.2.2.1 线的管理用户管理界面如下所示:上图所显示的是有对插入边的一些信息的编辑,同时也给出了相应的对边的查询(上图已经是实现了所有边的查询),同时可以进行添加和删除操作。

List中给出了边的ID和起始点的ID和相应的点的描述。

其他功能不做一一显示,下面就线的绘制进行演示:1.2.2.3 面的管理面操作的用户界面:如上图所示,编辑框提供了对面的插入的操作,输入面的相关的编号,面所包含的边的编号所构成的字符串以及对面所包含的描述,上图已经进行了对面的查询操作。

下面就面的删除和插入做一操作。

面的插入面的删除删除后的显示下面进行面的显示操作,与线的显示不同,对面进行了相应的填充:二、工程实现1.1工作环境SQL server 2008以及VS 20101.2 点的封装的工程代码对点要素的封装的相应的函数描述:// dlgPoint 消息处理程序//////////////////////////定义一个链接数据库的变量///////////////////////extern CString g_strConnect;/////////////////////查询点的属性//////////////////////////////void dlgPoint::OnBnClickedButtonquerypoint(){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;}myList.ModifyStyle(0,LVS_SHOWSELALWAYS);myList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES| LVS_EX_TWOCLICKACTIVATE);myList.SetBkColor(RGB(247,247,255));myList.SetTextColor(RGB(0,0,0));myList.SetTextBkColor(RGB(247,247,255));for(int i=0;i<3;i++){myList.DeleteColumn(0);}myList.DeleteAllItems();myList.InsertColumn(0,_T("PID"), LVCFMT_LEFT,100);//在list中插入三列myList.InsertColumn(1,_T("x"), LVCFMT_LEFT,100);myList.InsertColumn(2,_T("y"), LVCFMT_LEFT,100);CString strSQL;CRecordset p_DBSet(&p_DB);strSQL="select * from POINT";//查询所有的点的信息p_DBSet.Open(CRecordset::snapshot,strSQL,CRecordset::readOnly);int nIndex = 0;CString strVal;while(!p_DBSet.IsEOF()){p_DBSet.GetFieldValue(_T("PID"),strVal);//获取点的IDmyList.InsertItem(nIndex,strVal);p_DBSet.GetFieldValue(_T("x"),strVal);//获取点的x坐标strVal.TrimRight();myList.SetItemText(nIndex,1,strVal);p_DBSet.GetFieldValue(_T("y"),strVal);//获取点的y坐标strVal.TrimRight();myList.SetItemText(nIndex,2,strVal);nIndex++;p_DBSet.MoveNext();}p_DBSet.Close();//UpdateData();// TODO: 在此添加控件通知处理程序代码}//////////////////////////插入一个点///////////////void dlgPoint::OnBnClickedButtoninsert(){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;}UpdateData(true);CString strSQL;if(m_pare(_T(""))==0){MessageBox(_T("点的ID不能为空"),_T("错误信息"),MB_OK|MB_ICONERROR);}CString a;a="insert into POINT values('";//插入点的每个坐标和IDa+=m_strID;a+="','";a+=m_strPointX;a+="','";a+=m_strPointY;a+="')";strSQL=a;p_DB.ExecuteSQL(strSQL);p_mitTrans();p_DB.Close();OnBnClickedButtonquerypoint();UpdateData(false);// TODO: 在此添加控件通知处理程序代码}/////////////////////////删除点的操作////////////////////void dlgPoint::OnBnClickedButtondelete(){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;}UpdateData(TRUE);CString strSQL;//寻找当前选中的记录位置///POSITION pos=myList.GetFirstSelectedItemPosition();if(pos==NULL){MessageBox(_T("请先选中一条记录"),_T("错误信息"),MB_OK|MB_ICONERROR);return ;}//获取当前记录的位置//-int m_ncurPoint=myList.GetNextSelectedItem(pos);//获取当前选中的记录Book//CString PID=myList.GetItemText(m_ncurPoint,0);TRY{strSQL="delete from POINT where PID='";strSQL+=PID;strSQL+="'";p_DB.ExecuteSQL(strSQL);p_mitTrans();}CATCH_ALL(e){TCHAR tc_ErrorMSg[255];e->GetErrorMessage(tc_ErrorMSg,255);CString str_HitMsg;//此处为错误消息//MessageBox(str_HitMsg,_T("错误信息"),MB_OK|MB_ICONERROR);p_DB.Rollback();p_DB.Close();return ;}END_CATCH_ALLOnBnClickedButtonquerypoint();//UpdateData(false);p_DB.Close();// TODO: 在此添加控件通知处理程序代码}1.3 线的封装的工程代码// dlgEdge 消息处理程序//////////////////////////定义一个链接数据库的变量///////////////////////extern CString g_strConnect;//////////////////////////////////查询边表函数/////////////////////////void dlgEdge::OnBnClickedButtonQueryEdge(){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;}m_List.ModifyStyle(0,LVS_SHOWSELALWAYS);m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES| LVS_EX_TWOCLICKACTIVATE);m_List.SetBkColor(RGB(247,247,255));m_List.SetTextColor(RGB(0,0,0));m_List.SetTextBkColor(RGB(247,247,255));for(int i=0;i<4;i++){m_List.DeleteColumn(0);}m_List.DeleteAllItems();m_List.InsertColumn(0,_T("EID"), LVCFMT_LEFT,100);m_List.InsertColumn(1,_T("Start"), LVCFMT_LEFT,100);m_List.InsertColumn(2,_T("End"), LVCFMT_LEFT,100);m_List.InsertColumn(3,_T("EAttribute"), LVCFMT_LEFT,100);CString strSQL;CRecordset p_DBSet(&p_DB);strSQL="select * from Edge";p_DBSet.Open(CRecordset::snapshot,strSQL,CRecordset::readOnly);int nIndex = 0;CString strVal;while(!p_DBSet.IsEOF()){p_DBSet.GetFieldValue(_T("EID"),strVal);m_List.InsertItem(nIndex,strVal);p_DBSet.GetFieldValue(_T("Start"),strVal);strVal.TrimRight();m_List.SetItemText(nIndex,1,strVal);p_DBSet.GetFieldValue(_T("End"),strVal);strVal.TrimRight();m_List.SetItemText(nIndex,2,strVal);p_DBSet.GetFieldValue(_T("EAttribute"),strVal);strVal.TrimRight();m_List.SetItemText(nIndex,3,strVal);nIndex++;p_DBSet.MoveNext();}p_DBSet.Close();// TODO: 在此添加控件通知处理程序代码}//////////////////////添加边///////////////////////void dlgEdge::OnBnClickedButtonAddEdge(){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;}UpdateData(true);CString strSQL;if(m_pare(_T(""))==0){MessageBox(_T("边的ID不能为空"),_T("错误信息"),MB_OK|MB_ICONERROR);}CString a;//strSQL="insert into POINT values('"+m_strID+"','"+m_strPointX+"','"+m_strPointY+"')";a="insert into Edge values('";a+=m_strEID;a+="','";a+=m_strSID;a+="','";a+=m_streID;a+="','";a+=m_strEA;a+="')";strSQL=a;//////////////////////////////////////////////////////////////////p_DB.ExecuteSQL(strSQL);p_mitTrans();p_DB.Close();OnBnClickedButtonQueryEdge();UpdateData(false);// TODO: 在此添加控件通知处理程序代码}///////////////////////////////删除边的操作////////////////////////void dlgEdge::OnBnClickedButtonDeleteEdge(){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;}UpdateData(TRUE);CString strSQL;//寻找当前选中的记录位置///POSITION pos=m_List.GetFirstSelectedItemPosition();if(pos==NULL){MessageBox(_T("请先选中一条记录"),_T("错误信息"),MB_OK|MB_ICONERROR);return ;}//获取当前记录的位置//int m_ncurEdge=m_List.GetNextSelectedItem(pos);//获取当前选中的记录Book//CString m_strSeletetedEID=m_List.GetItemText(m_ncurEdge,0);TRY{strSQL="delete from Edge where EID='";strSQL+=m_strSeletetedEID;strSQL+="'";p_DB.ExecuteSQL(strSQL);p_mitTrans();}CATCH_ALL(e){TCHAR tc_ErrorMSg[255];e->GetErrorMessage(tc_ErrorMSg,255);CString str_HitMsg;//此处为错误消息//MessageBox(str_HitMsg,_T("错误信息"),MB_OK|MB_ICONERROR);p_DB.Rollback();p_DB.Close();return ;}END_CATCH_ALLOnBnClickedButtonQueryEdge();//UpdateData(false);p_DB.Close();// TODO: 在此添加控件通知处理程序代码}1.4 面的封装的工程代码// dlgArea 消息处理程序//////////////////////////定义一个链接数据库的变量///////////////////////extern CString g_strConnect;//////////////////////////查看面的属性//////////////////////////////////void dlgArea::OnBnClickedButtonQueryArea(){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;}m_list.ModifyStyle(0,LVS_SHOWSELALWAYS);m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES| LVS_EX_TWOCLICKACTIVATE);m_list.SetBkColor(RGB(247,247,255));m_list.SetTextColor(RGB(0,0,0));m_list.SetTextBkColor(RGB(247,247,255));for(int i=0;i<3;i++){m_list.DeleteColumn(0);}m_list.DeleteAllItems();m_list.InsertColumn(0,_T("AID"), LVCFMT_LEFT,100);m_list.InsertColumn(1,_T("EStr"), LVCFMT_LEFT,100);m_list.InsertColumn(2,_T("Attribute"), LVCFMT_LEFT,100);CString strSQL;CRecordset p_DBSet(&p_DB);strSQL="select * from Area";p_DBSet.Open(CRecordset::snapshot,strSQL,CRecordset::readOnly);int nIndex = 0;CString strVal;while(!p_DBSet.IsEOF()){p_DBSet.GetFieldValue(_T("AID"),strVal);m_list.InsertItem(nIndex,strVal);p_DBSet.GetFieldValue(_T("EStr"),strVal);strVal.TrimRight();m_list.SetItemText(nIndex,1,strVal);p_DBSet.GetFieldValue(_T("Attribute"),strVal);strVal.TrimRight();m_list.SetItemText(nIndex,2,strVal);nIndex++;p_DBSet.MoveNext();}p_DBSet.Close();// TODO: 在此添加控件通知处理程序代码}////////////////////////插入一个面//////////////////////////////////////void dlgArea::OnBnClickedButtoninsert(){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;}UpdateData(true);CString strSQL;if(m_pare(_T(""))==0){MessageBox(_T("边的ID不能为空"),_T("错误信息"),MB_OK|MB_ICONERROR);}CString a;//strSQL="insert into POINT values('"+m_strID+"','"+m_strPointX+"','"+m_strPointY+"')";a="insert into Area values('";a+=m_strAreaID;a+="','";a+=m_strAedge;a+="','";a+=m_strAttribute;a+="')";strSQL=a;//////////////////////////////////////////////////////////////////p_DB.ExecuteSQL(strSQL);p_mitTrans();p_DB.Close();OnBnClickedButtonQueryArea();UpdateData(false);// TODO: 在此添加控件通知处理程序代码// TODO: 在此添加控件通知处理程序代码}////////////////////////删除一个面/////////////////////////////////////void dlgArea::OnBnClickedButtondelete(){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;}UpdateData(TRUE);CString strSQL;//寻找当前选中的记录位置///POSITION pos=m_list.GetFirstSelectedItemPosition();if(pos==NULL){MessageBox(_T("请先选中一条记录"),_T("错误信息"),MB_OK|MB_ICONERROR);return ;}//获取当前记录的位置//int m_ncurAID=m_list.GetNextSelectedItem(pos);//获取当前选中的记录Book//CString m_strSeletetedAID=m_list.GetItemText(m_ncurAID,0);TRY{strSQL="delete from Area where AID='";strSQL+=m_strSeletetedAID;strSQL+="'";p_DB.ExecuteSQL(strSQL);p_mitTrans();}CATCH_ALL(e){TCHAR tc_ErrorMSg[255];e->GetErrorMessage(tc_ErrorMSg,255);CString str_HitMsg;//此处为错误消息//MessageBox(str_HitMsg,_T("错误信息"),MB_OK|MB_ICONERROR);p_DB.Rollback();p_DB.Close();return ;}END_CATCH_ALLOnBnClickedButtonQueryArea();//UpdateData(false);p_DB.Close();// TODO: 在此添加控件通知处理程序代码}1.5 要素可视化实现在显示的过程是使用计算机图形学中的知识来显示相应的点线面的。

相关文档
最新文档