- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
空间数据库实验报告
空间数据查询
摘要:SQL通常只提供简单的数据类型,如整型、日期型等。空间数据库的应用,必须能够处理像点、线、面这样的复杂的数据类型。空间数据库管理系统作为一种扩展的DBMS,应该既可以处理空间数据,也可以处理非空间数据,所以应当对SQL进行扩展,使它支持空间数据。空间数据库查询语句是空间数据库不可缺少的重要组成部分,如何将关系数据库查询语句进行适当扩展,以适应空间数据的需求,是目前亟待研究的课题。
空间关系算子和空间分析算子
空间算子一般按操作对象的数目分为一元空间算子和二元空间算子。一元空间算子主要用于计算空间对象的几何特征。二元空间算子主要表达空间关系以及空间分析。
空间关系的表达有拓扑和非拓扑之分,在基于九交模型的512种二元拓扑关系中,有8中是可以实现的,并且彼此互斥且完全覆盖。算子的返回值为逻辑true或false。
函数名称 含义 返回值 Equals() 判断两个几何体是否相等 Integer(True返回1,False返回0) Disjoint() 判断两个几何体是否相交 Integer Intersects() 判断两个几何体是否相交 Integer Touches() 判断两个几何体是否相交 Integer Crosses() 判断两个几何体是否相交 Integer Within() 判断一个几何体是否在另一个几何体里面 Integer Contains() 判断一个几何体是否包含另一个几何体 Integer Overlaps() 判断两个几何体是否交叠 Integer 非拓扑的空间几何运算主要指空间方位的判断,目前还没有比较规范的算子定义。
函数名称 含义 返回值 Distance() 返回两个几何体之间最小距离 Double Buffer() 返回几何体给定范围的缓冲区 Geometry ConvexHull() 返回几何体的最小闭包 Geometry Intersection() 返回几何体交集构成的几何体 Geometry Union() 返回几何体并集构成的几何体 Geometry Difference() 返回几何体与给定几何体不相交的部分 Geometry SymDiffference() 返回几何体与对方互不相交的部分 Geometry
MakeValid(geometry 数据类型)
将无效?geometry?实例转换为具有有效开放地理空间联盟 (OGC) 类型的?geometry?实例。
语法为:.MakeValid()
实现流程
1)导入数据
1、打开SQL Server并登陆。
2、打开文件夹SqlSpatialTools_build3759,点选Shape2Sql.exe。
3、在跳出窗口选择cities.shp文件,选择Set复选框,点击Upload to Database加载。
4、重复步骤3,依次加载countries.shp和Rivers.shp。加载好后,在SQL Server对象资源管理器中可以看到对应的表。
5、打开文件夹内SqlSpatialTools_build3759中SqlSpatialQuery.exe,打开查询界面。
6、点击Database后的空白处,选择连接的数据库。
7、在空白框内输入查询语句,点击进行查询。
以下为简单示例:
2)查询实例
我自己试验的
SELECT C1.LONG_NAME
FROM countries C1,countries C2
WHERE C1.geom.STTouches(C2.geom)=1 And C2.LONG_NAME=CHINA
出现的错误:
查询:列出countries中所有与中国相邻的国家的名字。
查询语句如下:
SELECT C1.LONG_NAME AS 国家名称,C1.geom
FROM countries C1,countries C2
WHERE C1.geom.MakeValid().STTouches(C2.geom)=1 And C2.LONG_NAME=CHINA
查询结果如下:
查询:找出rivers表中所列出地的河流流经的国家。
查询语句如下:
SELECT R1.NAME as河流名称,C1.LONG_NAME as国家名称 ,C1.geom,R1.geom
FROM Rivers R1,countries C1
where R1.geom .MakeValid().STIntersects(C1.geom.MakeValid() )=1
查询结果如下:
空间结果:
查询:对于rivers表中列出的河流,在cities表中找到距离其最近的城市。
此处注意:如果按照书上给出的语句用加载的原数据库查询耗
文档评论(0)