日期:2014-05-18 浏览次数:20392 次
--空间数据的一些操作
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的环。
---这次先写这么多,太多了,下次再写