-------------我的一些笔记七(空间数据的一些操作)-------------
- SQL code
--空间数据的一些操作
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的环。
---这次先写这么多,太多了,下次再写
[解决办法]
厉害.
------解决方案--------------------
没抢到沙发。
[解决办法]
db.....
[解决办法]
学习了。
[解决办法]
[解决办法]
这么高深.....
[解决办法]
学习,
[解决办法]
Bs坐了sf的还切的人
[解决办法]
[解决办法]
稍微提点意见,个人觉得作为技术文章,应该写下前因后果。。。
比如空间坐标系的基本概念,为什么要用这个对象,否则没接触过gis行业的人会不理解的
[解决办法]
不仅送自己的学习心得,竟然还送分,真是好人。
[解决办法]
[解决办法]
[解决办法]
mark,up
[解决办法]
不错,继续啊
[解决办法]
这个确实不会
[解决办法]
突然炎热
[解决办法]
小F的作品,顶
[解决办法]
[解决办法]
学习一下
[解决办法]
看看~~
[解决办法]
...........
[解决办法]
jf。。。
[解决办法]
kan kan
[解决办法]
先顶了··
[解决办法]
[解决办法]
学习。。
[解决办法]
厉害.
[解决办法]
必须的 顶!
[解决办法]
学习学习
[解决办法]
不错,学习了。。。。。。。。。。。。。。。
[解决办法]
不懂,学习
------解决方案--------------------
还不错可以啊楼主
[解决办法]
学习。。。。。
[解决办法]
学习!
[解决办法]
我顶老大啊!!
[解决办法]
小F的作品,顶
[解决办法]
不懂 帮顶 学习 蹭分
[解决办法]
不错
不懂 帮顶
[解决办法]
学习一下
[解决办法]
学习了~~~
[解决办法]
good
[解决办法]
什么东西什么东西
我操
[解决办法]
挺专业的,看不懂
[解决办法]
sadsadsadsadsadad
[解决办法]
学习。
[解决办法]
[解决办法]
学习。。
[解决办法]
慢慢 学吧
[解决办法]
好好好好好好好好好
[解决办法]
稍微提点意见,个人觉得作为技术文章,应该写下前因后果。。。
比如空间坐标系的基本概念,为什么要用这个对象,否则没接触过gis行业的人会不理解的
[解决办法]
牛人!顶一下!
[解决办法]
不错不错。楼主发的都是精品啊~!
[解决办法]
xiangnixuexi
[解决办法]
[解决办法]
这个资料还真的是挺复杂的呀
[解决办法]
了解,谢谢
[解决办法]
很高深哦!
[解决办法]
懂不起 我是来的积分的
[解决办法]
写成和永生一样了 抄袭了他的思路
[解决办法]
哇哈哈
[解决办法]
谢谢楼主分享。。。顶
[解决办法]
很值得学习哦 看来得多看一些数据库的知识了 温习一下
[解决办法]
路过 看看
[解决办法]
接分。。必须的
[解决办法]
hao 好哈啊和
[解决办法]
飘过 拿分
● ●
〃 〃
闪人
[解决办法]
.....
[解决办法]
好好学习了一下
[解决办法]
学习,接分。
[解决办法]
先顶起
[解决办法]
awesome!
markup!
[解决办法]
fredrickhu
敬礼!
[解决办法]
标记。。。。。。。。。。
[解决办法]
非常好,期待下期啊~~
[解决办法]
很好。。收藏了
[解决办法]
好的 我来看看
[解决办法]
不错,谢谢楼主分享
[解决办法]
挺好~~~
[解决办法]
研究中。。。。
[解决办法]
谢谢你的分享!好东西!恩,如每个程序员都像你这样无私奉献的话,那中国软件开发又前进几年了!
[解决办法]
...
[解决办法]
看不懂啊
[解决办法]
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
[解决办法]
清风飘过,顶一下
[解决办法]
学习 了、、、、
[解决办法]
[解决办法]
[解决办法]
真的看不懂啊
[解决办法]
踩踩...路过..学过.
[解决办法]
路过,看不懂
[解决办法]
学习。。
[解决办法]
标个记!!!!!!!!!!!!!
[解决办法]
收藏,学习.