-------------我的一些笔记七(空间数据的一些操作)-------------

--小F-- 2010-04-28 11:09:42
加精
--空间数据的一些操作

1.在创建表时定义geometry类型的列
例子:
create table streets
(
streetid int identity(1,1),
streetName nvarchar(20),
streetGeo geometry
);
go

2.向表中插入几何数据
insert into streets values

('street1',geometry::stgeomfromtext('LINESTRING(100 100,20

180, 180 180)',0))

3.从表中获取几何数据
--注意,直接读取无法看到真实的含义,可以在select 语句将该列

的值读取到一个几何数据类型的变量,具体语句如下:
declare @g geometry
select @g=streetgeo from streets where streetnam='street1'
select @g.stastext()
go


4.获取geometry 实例中包含的点
(1)获取geometry 实例中包含的点数
使用STNumPoints()函数可以获得geometry实例中包含的点数。例如


declare @g geometry
select @g=streetgeo from streets where streetnam='street1'
select @g.STNumPoints()
go

(2)获取geometry 实例中包含的点
declare @g geometry
select @g=streetgeo from streets where streetnam='street1'
select @g.STPointN(2).Tostring()
go

(3)获取起始点和终点
declare @g geometry
select @g=streetgeo from streets where streetnam='street1'
select @g.STStartPoint().ToString() as 起始点,@g.STEndPoint

().ToString() as 终点
go

(4)获取多边形的中心点
declare @g geometry
set @g=geometry::STGeomFromText('POLYGON(0 0,0 2, 2 2,0 2, 0

0))',0);
select @g.STCentroid().Tostring();

5.获取geometry实例的维度信息
(1)返回对象的维度
使用STDimension()函数可以获取对象的维度信息。
例如:
declare @g geometry;
set @g=geometry::STGeomFromText('POINT(3,4)',));
select @g.STAsText(),@g.STDimension()
go
结果是:
/*
POINT(3,4),0
*/

(2)计算对象的长度
使用STLength()函数可以计算一维或二维对象的长度。例如:
declare @g geometry
select @g=streetgeo from streets where streetnam='street1'
select @g.STLength()
go

(3)计算对象的面积
使用STArea()函数可以计算二维对象的面积。例如:
declare @g geometry
set @g=geometr::STGeomFromText('POLYGON((0 0,2 0, 2 2,0 2,0 0))',0);
select @g.STArea()

6.检查是否为空
在使用geometry实例之前,需要判断是否为空,可以使用STlsEmpty()函数实现此功能,当geometry实例为空时,则返回1,否则返回0
declare @g geometry;
set @g=geometry::STGeomFromText('POLYGON EMPTY',0);
select @g STlsEmpty();
set @g=geometry::STGeomFromText('POLYGON((0 0,2 0, 2 2,0 2,0 0))',0);
select @g STlsEmpty();
返回结果为1和0

7.判断geometry实例是否为简单
满足下面条件的geometry实例子=被称为简单的geometry实例
(1)实例中任何一个图形都不与自身相交,但其终点除外。
(2)实例上任意两个图形可以在某个点相交,但两个边界上的点除外。
当geometry 实例为简单实例时,返回1,否则返回0
例如:
declare @g geometry;
set @g=geometry::STGeomFromText('LINESTRING(0 0,2 2,0 2,2 0)',0);
select @g.STlsSimple();
结果为1
declare @g geometry;
set @g=geometry::STGeomFromText('LINESTRING(0 0,0 2,2 2,2 0)',0);
select @g.STlsSimple();
结果为0

8.返回geometry实例的边界
除Point和MultiPoint实例外,其他geometry实例都存在边界.使用STBoundary()函数可以返回geometry实例的边界
下面是在LineString实例上应用STBoundary()函数的实例。
declare @g geometry;
set @g=geometry::STGeomFromText('LINESTRING(1 1,2 2,0 2,2 1)',0);
select @g.STBoundary().Tostring();
返回结果为Multipoint((2,1),(1,1)),即LineString实例的起点和终点.
Polygon和MultiPolygon实例的边界值为Multipoint 实例。下面是Polygon应用STBoundary()函数的实例。
declare @g geometry;
set @g=geometry::STGeomFromText('POLYGON((0 0,0 3,3 3,3 0,0 0)(1 1,1 2, 2 1,1 1))',10);
select @g.STBoundary().Tostring();
返回结果为Multilinestring((1 1,1 2,2 1,1 1),(0 0 ,3 0 , 3 3, 0 3,0 0)),即Polygon的环。

---这次先写这么多,太多了,下次再写
...全文
1540 147 打赏 收藏 转发到动态 举报
写回复
用AI写文章
147 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZWM507 2010-05-04
  • 打赏
  • 举报
回复
学习了
yangliu0033 2010-05-04
  • 打赏
  • 举报
回复
不懂....不知道是做什么的
CMinder 2010-05-04
  • 打赏
  • 举报
回复
学习学习
水目 2010-05-04
  • 打赏
  • 举报
回复
dengchunhao 2010-05-04
  • 打赏
  • 举报
回复
高深啊
walter8088 2010-05-04
  • 打赏
  • 举报
回复
好东西,支持下!!!
h133521006 2010-05-03
  • 打赏
  • 举报
回复
学习学习
life dream 2010-05-03
  • 打赏
  • 举报
回复
呵呵。好用!
shxy342 2010-05-03
  • 打赏
  • 举报
回复
厉害.
lmc158 2010-05-03
  • 打赏
  • 举报
回复
返回geometry实例的边界
除Point和MultiPoint实例外,其他geometry实例都存在边界.使用STBoundary()函数可以返回geometry实例的边界
下面是在LineString实例上应用STBoundary()函数的实例。
declare @g geometry;
set @g=geometry::STGeomFromText('LINESTRING(1 1,2 2,0 2,2 1)',0);
select @g.STBoundary().Tostring();
返回结果为Multipoint((2,1),(1,1)),即LineString实例的起点和终点.
Polygon和MultiPolygon实例的边界值为Multipoint 实例。下面是Polygon应用STBoundary()函数的实例。
declare @g geometry;
set @g=geometry::STGeomFromText('POLYGON((0 0,0 3,3 3,3 0,0 0)(1 1,1 2, 2 1,1 1))',10);
select @g.STBoundary().Tostring();
返回结果为Multilinestring((1 1,1 2,2 1,1 1),(0 0 ,3 0 , 3 3, 0 3,0 0)),即Polygon的环。
hrphjn 2010-05-03
  • 打赏
  • 举报
回复
好东西
buleideli 2010-05-03
  • 打赏
  • 举报
回复
学习了
nettman 2010-05-03
  • 打赏
  • 举报
回复
学习!
susan111111111 2010-05-02
  • 打赏
  • 举报
回复
要收藏
kxd831 2010-05-02
  • 打赏
  • 举报
回复
wo yao fen a wo yao fen a
binghe1979 2010-05-02
  • 打赏
  • 举报
回复
发言踊跃。支持一下
a112870757 2010-05-02
  • 打赏
  • 举报
回复
顶上去
a112870757 2010-05-02
  • 打赏
  • 举报
回复
高手。。。。。。
a112870757 2010-05-02
  • 打赏
  • 举报
回复
学习下
ckfan 2010-05-02
  • 打赏
  • 举报
回复
收藏,学习.
加载更多回复(125)

6,129

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 新技术前沿
社区管理员
  • 新技术前沿社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧