空间数据库报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
空间数据库实验报告
中国地质大学(武汉)
实验名称:空间数据查询与访问
实验环境:win7 64位系统,内存为2G,Oracle11g数据库实验者:
实验时间:2013.12.09
实验目的:
(1)了解掌握Oracle Spatial中空间数据查询与访问的原理与方法;
(2)掌握用PL/SQL访问Oracle Spatial数据库中几何数据,以及调
用相关的空间分析函数对几何数据进行分析。
实验内容:
将数据文件mvdemo.dmp导入到创建的用户中去,然后根据要求利用SQL语言进行编程实现相应的功能。需要实现的功能如下:(1)输出数据库中所有州的多边形,采用WKT格式输出;
(2)输出数据库中所有的城市的几何对象信息,采用GML格式输出;
(3)给定点的经纬度坐标(40°43′N,74°00′W),查询该点是位于美国的哪个州?
(4)给定一个矩形区域(35-45°N,90-100°W ),查询有哪些城市位于该区域内?哪些州与该区域相交?
实验步骤及结果展示:
(1)将mvdemo.dmp数据集导入到创建好的用户mvdemo中
由于表空间和用户的创建过程我们已经展示过很多次,并且也尝试过很多次了,这里我们就直接跳过表空间和用户的创建过程,直接将数据集导入到创建好的用户中去,导入数据的具体过程如下:
在C:\app\oracle\product\11.2.0\dbhome_1\BIN文件夹中打开imp.exe 文件,这个文件是用来将数据导入到数据库中的,因此我们利用这个文件将mvdemo.dmp文件导入到数据库中,进入后输入用户名和密码,在此之前我们已经创建建好了一个名为mvdemo的表空间和用户,密码也设置为mvdemo,输入后显示连接成功,然后按照提示进行数据的导入工作,如下图所示:
按照要求填入适当的回答后,数据便开始导入,导入过程如下图所示:
导入成功后对话框将会自动退出,此时我们进入到SQL Developer,进入后界面如下:
此时我们连接刚刚创建好名为“mvdemo”的用户和表空间
测试结果显示状态为成功,此时我们直接点击连接即可连接到数据库。连接后我们查看表中的对象,发现mvdemo.dmp文件中的数据已经全部导入到mvdemo
这个用户中去了,导入的表如下图所示:
此时我们可以查看一下表“CITIES”中的数据,结果如下图所示:
mvdemo用户中去了,因此接下来我们可以进行相应的编程来实现相应的功能。
(2)输出数据库中所有州的多边形,采用WKT格式输出
我们首先定义一个clob类型的参数wkt_clob,clob是数据库中的一种保存文件所使用的类型,我们采用WKT格式输出的时候将会用到,然后定义一个mdsys.sdo_geometry类型的参数g,这是一个用来保存对象几何形状的参数,用来存储state的多边形信息,最终将其转化为wkt格式赋给wkt_clob,最后定义一个游标geomcursor指向states表中的geom这一列。
定义了以上的参数后,我们便开始编写具体的代码,首先 open geomcursor 打开游标,如果可以找到states中的几何数据,则将其赋给g,然后将g中的信息转化成为WKT格式并赋给wkt_clob,最终打印输出该信息,知道游标将states表中的几何信息提取完毕即退出,具体的代码如下:
declare
wkt_clob clob;
g mdsys.sdo_geometry;
cursor geomcursor is select t.GEOM from STATES t;
begin
open geomcursor ;
loop
fetch geomcursor into g;
if geomcursor%FOUND then
wkt_clob := g.get_wkt();
dbms_output.put_line(sys.dbms_lob.substr(wkt_clob,256,1));
else
exit;
end if;
end loop;
close geomcursor;
end;
运行后输出的结果如下图所示:
(3)输出数据库中所有的城市的几何对象信息,采用GML格式输出
与(2)的方法基本类似,只是在定义的时候将游标指向cities表中的location这一列,然后打开游标,提取数据,将数据进行赋值和转化,基本思路相同,转化成GML格式与转化成WKT格式有小小的差异,这一点需要注意,具体的代码如下:
declare
gml_clob clob;
g mdsys.sdo_geometry;
cursor geomcursor is select t.LOCATION from CITIES t;
begin
open geomcursor ;
loop
fetch geomcursor into g;
if geomcursor%FOUND then
gml_clob := mdsys.sdo_util.to_gmlgeometry(g);
dbms_output.put_line(sys.dbms_lob.substr(gml_clob,256,1));
else
exit;
end if;
end loop;
close geomcursor;
end;
运行后输出的结果如下图所示: