SQLServer空间大数据库应用案例报告材料.docx
《SQLServer空间大数据库应用案例报告材料.docx》由会员分享,可在线阅读,更多相关《SQLServer空间大数据库应用案例报告材料.docx(19页珍藏版)》请在冰豆网上搜索。
![SQLServer空间大数据库应用案例报告材料.docx](https://file1.bdocx.com/fileroot1/2023-6/7/68d14c05-ee39-4fda-8ecc-fff146995932/68d14c05-ee39-4fda-8ecc-fff1469959321.gif)
SQLServer空间大数据库应用案例报告材料
实验四SQLServer空间数据库应用案例
一、实验学时
4学时
二、实验目的
1.了解SQLServer2008r2的空间参考系统表;
2.掌握SQLServer2008r2的空间数据类型的使用;
3.掌握空间数据库与数据表的设计与实现
4.掌握用SQL实现空间查询与分析功能的方法
三、预习容
1.SQLServer有关空间操作的教程
2.教材中有关SQL语言的关于空间查询与分析的语法章节
四、实验设备及数据
1.安装了SQLServer2008r2的电脑
2.教材第五章的空间数据库实例数据
五、实验容
1.SQLServer2008的空间参考系统表的介绍
2 空间数据类型的介绍与使用
3.空间数据库与数据表的创建与修改
4.使用SQL语句添加、删除、修改空间数据记录
5.用SQL实现空间查询和分析
六、实验步骤
建蓝湖数据库
createtablelakes(
fidintegernotnullprimarykey,
namevarchar(64),
shoregeometry);
createtableroad_segments(
fidintegernotnullprimarykey,
namevarchar(64),
alisesvarchar(64),
num_lanesinteger,
centerlinegeometry);
createtabledivided_routes(
fidintegernotnullprimarykey,
namevarchar(64),
roadseg1idintegerreferencesroad_segments,
roadseg2idintegerreferencesroad_segments,
positiongeometry);
createtablebridges(
fidintegernotnullprimarykey,
namevarchar(64),
roadseg1idintegerreferencesroad_segments,
roadseg2idintegerreferencesroad_segments,
positiongeometry);
createtablestreams(
fidintegernotnullprimarykey,
namevarchar(64),
fromlakeidintegerreferenceslakes,
tolakeidintegerreferenceslakes,
centerlinegeometry);
createtablebuildings(
fidintegernotnullprimarykey,
addressvarchar(64),
positiongeometry,
footprintgeometry);
createtablepoods(
fidintegernotnullprimarykey,
namevarchar(64),
typevarchar(64),
shoresgeometry);
createtableisland(
fidintegernotnullprimarykey,
namevarchar(64),
lakeidintegerreferenceslakes,
boundarygeometry);
createtablezone(
fidintegernotnullprimarykey,
namevarchar(64),
boundarygeometry);
录入数据
insertintolakesvalues(101,'蓝湖',
geometry:
:
STGeomFromText('multipolygon(((5218,6623,739,486,5218),
(5918,6718,6713,5913,5918)))',101));
insertintolakesvalues(0,'图片外其他湖泊',
geometry:
:
STGeomFromText('multipolygon(((6228,7633,8319,5816,6228),
(6928,7728,7723,6923,6928)))',101));
--路段
insertintoroad_segmentsvalues(102,'路',null,2,
geometry:
:
STGeomFromText('linestring(018,1021,1623,2826,4431)',101));
insertintoroad_segmentsvalues(103,'路','主街',4,
geometry:
:
STGeomFromText('linestring(4431,5634,7038)',101));
insertintoroad_segmentsvalues(104,'路',null,2,
geometry:
:
STGeomFromText('linestring(7038,7248)',101));
insertintoroad_segmentsvalues(105,'主街',null,4,
geometry:
:
STGeomFromText('linestring(7038,8442)',101));
insertintoroad_segmentsvalues(106,'绿森林边路',null,1,
geometry:
:
STGeomFromText('linestring(2826,280)',101));
--组合路
insertintodivided_routesvalues(119,'路',null,4,
geometry:
:
STGeomFromText('multilinestring((1048,1021,100),(160,1623,16
48))',101));
--桥
insertintobridgesvalues(110,'卡姆桥',102,103,geometry:
:
STGeomFromText('point(44
31)',101));
insertintostreamsvalues(111,'卡姆河',0,101,
geometry:
:
STGeomFromText('linestring(3848,4441,4136,4431,5218)',101));
insertintostreamsvalues(112,null,101,0,
geometry:
:
STGeomFromText('linestring(760,784,739)',101));
insertintobuildingsvalues(113,'主街号',
geometry:
:
STGeomFromText('point(5230)',101),
geometry:
:
STGeomFromText('polygon((5031,5431,5429,5029,5031))',101));
insertintobuildingsvalues(114,'主街号',
geometry:
:
STGeomFromText('point(6433)',101),
geometry:
:
STGeomFromText('polygon((6634,6234,6232,6632,6634))',101));
insertintopoodsvalues(120,null,'思道哥池塘',
geometry:
:
STGeomFromText('multipolygon(((2444,2242,2440,2444)),
((2644,2640,2842,2644)))',101));
insertintoislandvalues(109,'鹅岛',101,
geometry:
:
STGeomFromText('multipolygon(((6713,6718,5918,5913,6713)))',101));
--区域
insertintozonevalues(117,'阿诗顿',
geometry:
:
STGeomFromText('multipolygon(((6248,8448,8430,5630,5634,62
48)))',101));
insertintozonevalues(118,'绿森林',
geometry:
:
STGeomFromText('multipolygon(((2826,280,840,8442,2826),
(5218,6623,739,486,5218)),((5918,6718,6713,5913,5918)))',101));
查询
获得鹅岛的wkt表示
selectboundary.STAsText()
fromisland
wherename='鹅岛'
查找本数据库中所有的空间表
SelectTABLE_NAME
FROMspatial.INFORMATION_SCHEMA.TABLES
WhereTABLE_TYPE='BASETABLE'
判断名为路5别名为“主街”的路段的几何属性是否为空
selectcenterline.STIsEmpty()
fromroad_segments
wherename='路'
andaliases='主街';
4蓝湖的几何结构是否是简单的
selectshore.STIsSimple()
fromlakes
wherename='蓝湖';
5.获得鹅岛的边界
selectboundary.STAsText(),boundary.STBoundary()
fromisland
wherename='鹅岛';
6获得鹅岛的MBR边界
selectboundary.STAsText(),boundary.STEnvelope()
fromisland
wherename='鹅岛';
7.获取73号路的几何类型
selectcneterlines.STGeometryType()
fromdivided_routes
wherename='路';
8获得102路段中点的第一个点
selectcenterline.STAsText(),centerline.STPointN
(1)
fromroad_segments
wherefid='102'
9获得卡姆桥的x,y坐标
SELECTposition.STX,position.STY
FROMbridgesWHEREname='卡姆桥';
10获得路段的长度
SELECTcenterline.STLength()
FROMroad_segmentsWHEREfid=106;
11判断鹅岛的MBR边界是否闭合
SELECTboundary.STIsClosed(),boundary.STBoundary()
FROMislandWHEREname='鹅岛';
12获得路段的起点和终点
selectcenterline.STAsText(),centerline.STStartPoint(),centerline.STEndPoint()
fromroad_segments
wherefid=102
13获得鹅岛的质心
selectboundary.STCentroid(),boundary.STAsText()
fromisland
wherename='鹅岛'
14判断PointOnSurface函数返回鹅岛上的点是否在其边界上
selectboundary.STContains(boundary.STPointOnSurface())
fromisland
wherename='鹅岛';
15获得路段的点数目
selectcenterline.STNumPoints()
fromroad_segments
wherefid='102'
16获得鹅岛的面积
selectboundary.STArea()
fromisland
wherename='鹅岛';
17--获得蓝湖环的数目
selectshore.STNumInteriorRing()
fromlakes
wherename='蓝湖';
18判断号路的几何元素的数目
selectcneterlines.STNumGeometries()
fromdivided_routes
wherename='路';
19获得号路的第二个几何元素
selectcneterlines.STAsText()
fromdivided_routes
wherename='路';
20获得号路的长度
selectcneterlines.STLength()
fromdivided_routes
wherename='路';