SQL2008空间数据类型--欧氏几何2类与方法

简介:

2  类与方法

在上一篇博客中说道了几何数据类型(点、线、面和集合)的定义,既然几何数据类型是通过CLR来扩展出来的,学习过C#的都知道,一个对象下面会有属性和方法,那么几何数据类型对应的也有其属性和方法。下图就能够反映出这些几何对象的类关系。

image

由于我自己本身对C#比较熟悉(其实其他语言也就不怎么会了),这里我就按照C#的方式来讲一下。

首先要将的是函数。函数分为几种:构造函数、静态函数和实例下的函数。

2.1先说构造函数:

构造geometry对象及其下面的子对象有多种构造函数:通过熟知文本WKT构造、通过熟知二进制WKB构造和通过GML构造。如下语句就是通过WKT构造一个geometry对象。

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('POINT (1 2)', 0);

除了构造geometry对象外,每个子类也有自己的构造函数,下表给出了每个类的通过WKT构造的函数,通过WKB构造的函数类似,这里就不给出了。

image

该表取自OGC官方文档,在SQL2008中使用时函数名前面有ST前缀。比如同样构造一个点1,2 对应是SQL为:

SET @g = geometry::STPointFromText('PoINT (1 2)',0);

构造函数必须与给出的WKT类型对应,这里完全可以认为是C#中做的一个类型转换,如果类型不对应强制转换必然失败,比如:

SET @g = geometry::STLineFromText('PoINT (1 2)',0);--错误的代码

2.2通过构造函数实例化了一个对象后,接下来我们就要调用这个对象的方法了。

由于Geometry类是其他类的父类,所以先说该类的实例方法,这些方法将在其继承的类中同样适用。

  • STAsText 返回实例的WKT表示形式
  • ToString 返回实例的WKT表示形式
  • STAsTextZM 返回实例的WKT表示形式 ,包括Z和M值
  • STAsBinary 返回实例的WKB表示形式
  • STAsGml 返回实例的GML表示形式
  • STGeometryType 返回几何图形的实例类型,字符串,如LineString、Polygon等 ,相当于C#中的GetType().ToString()方法
  • InstanceOf 确定几何图形是否为给定的实例类型,其实就相当于C#中的is关键字。比如SELECT @g.InstanceOf('GEOMETRYCOLLECTION');
  • STIsValid 确定几何图形实例对其实例类型而言格式是否正确,有些申明虽然符合语法但是不符合OGC规定,所以需要用这个来校验。比如SET @g = geometry::STGeomFromText('LINESTRING(0 2, 1 1, 1 0, 1 1, 2 2)', 0);就是校验会失败的定义。
  • MakeValid 将几何图形实例转换成具有实例类型的格式正确的几何图形实例,比如上面提到的校验失败的实例就可以使用SET @g=@g.MakeValid();这样系统会将实例转换为MULTILINESTRING ((0 2, 1 1, 2 2), (1 1, 1 0))
  • STDimension 返回实例的最大维度,点是0维,线是1维,面是2维,如果是集合就要看几何中最大的纬度了。比如SELECT @g.STDimension();
  • STSrid是属性,返回实例的SRID值。如:SELECT @g.STSrid
  • STIsEmpty确定实例是否为空,如果为空则返回1,否则返回0。注意这里的空并不是NULL的意思哈。比如SET @g = geometry::STGeomFromText('POLYGON EMPTY', 0); SELECT @g.STIsEmpty();
  • STIsSimple确定实例是否是简单的。所谓简单就是指满足:1.实例的每个图形不能与自身相交,但其终点除外。2.实例的任何两个图形不可在某个点上相交,但两个边界上的点除外。如图左边LineString(1 0,1 2,2 1,0 1)自身相交不是简单的,右边MultiLineString((0 0,0 2,2 2,2 0),(3 0,1 1))两个图形相交也不是简单的。

image

  • STBoundary 返回实例的边界。这里的边界是:1.点和点集合没有边界,返回空几何图形;2.线和线集合边界由起始点和终点形成,并删除那些出现次数为偶数的点,返回MultiPoint类型;3.面和面集合的边界是其环的集合,返回MultiLineString类型。
  • STEnvelope 返回实例的包络线。包络线是一个由实例的最小和最大坐标 (X,Y) 形成的轴对齐矩形,返回一个Polygon类型。对于线和面都好确定最大最小坐标,那么点怎么确定啊?点的包络线实际上就是一个无限小的矩形,比如Point(1 1)的包络线就是POLYGON ((0.999999 0.999999, 1.000001 0.999999, 1.000001 1.000001, 0.999999 1.000001, 0.999999 0.999999))

以上说的就是geometry的方法,接下来说一下子类的方法。

Point类的方法:

  • STX是Point类的属性,返回点实例的 X 坐标。使用如:SELECT @g.STX;
  • STY是Point类的属性,返回点实例的 Y 坐标。使用如:SELECT @g.STY;

Curve类的方法:

  • STStartPoint 返回实例的起始点,也就是定义的第一个点,返回Point类型。
  • STEndpoint 返回实例的终点,也就是定义的最后一个点,返回Point类型。
  • STIsClosed 确定实例是否闭合,也就是起点和终点相同。返回bit类型。
  • STIsRing 确定实例是否为环,所谓环就是要求既是简单的又是闭合的Curve。返回bit类型
  • STLength 返回实例的长度,返回float类型。

LineString类的方法:

  • STNumPoints 返回构成实例的点数。也就是申明LineString时的点的个数,重复的点要重复计数。
  • STPointN 返回实例中的特定点。显然,@g.STStartPoint() 就是@g.STPointN (1),而@g.STEndpoint() 就是@g.STPointN (@g.STNumPoints ())

Surface类的方法:

  • STCentroid 返回多边形实例的几何中心点。也就是返回其重心的坐标,Point类型。
  • STPointOnSurface 返回位于实例上的某个任意点,返回Point类型。这里说的是任意点,但是对于一个图形好像返回的总是同一个点,并不是随机的,只能说返回的点是在图形内,但是具体怎么算的我就不知道了。
  • STArea 返回实例的面积,这个就不用多说了吧,如果中间带孔是要扣除孔的面积的。返回float类型。

PolyGon类的方法:

  • STExteriorRing 返回多边形实例的外环。也就是STBoundary 方法再去掉中间的孔的边界。返回LineString。
  • STNumInteriorRing 返回多边形的内环数。也就是孔的数量。返回int。
  • STInteriorRingN 返回多边形的指定内环。也就是找到其中的一个孔的环,返回的是LineString类型。

GemoColllection类的方法:

  • STNumGeometries 返回几何图形集合实例中的几何图形数目,如果是Point等非集合的实例,则返回1,空实例返回0.使用如:SELECT @g.STNumGeometries();相当于C#中一个数组的Length属性或集合的Count属性。
  • STGeometryN 返回几何图形集合实例中的特定几何图形实例,传入参数n表示要取第几个图形,从1开始计数。对于Point等非集合对象传入1则返回本身。使用如:SELECT @g.STGeometryN(1)。相当于C#中的[n]

MultiCurve类的方法:

  • STIsClosed 确定实例是否闭合,也就是起点和终点相同。返回bit类型,必须集合中的所有Curve都Close了才返回1,否则返回0。
  • STLength 返回实例中所有Curve的长度的总和,返回float类型。

MultiSurface类的方法:

  • STCentroid 返回多边形集合的重心的坐标,Point类型。
  • STPointOnSurface 返回位于集合某实例上的某个任意点,返回Point类型。
  • STArea 返回集合中所有多边形的面积的总和,返回float类型。

这里就把每个类和类下面的方法介绍完了,下一次就讲讲两个对象之间的关系和操作了。


 


 

本文转自深蓝居博客园博客,原文链接:http://www.cnblogs.com/studyzy/archive/2008/03/20/1114021.html,如需转载请自行联系原作者

相关文章
|
5月前
|
SQL 开发框架 安全
SQL 日期处理和视图创建:常见数据类型、示例查询和防范 SQL 注入方法
在数据库操作中,处理日期是一个关键的方面。确保插入的日期格式与数据库中日期列的格式匹配至关重要。以下是一些常见的SQL日期数据类型和处理方法。
94 8
|
6月前
|
SQL 存储 数据库
SQL概述及数据定义
SQL概述及数据定义
66 0
|
SQL Oracle 关系型数据库
SQL标准对schema如何定义?
ISO/IEC 9075-1 SQL标准中将schema定义为描述符的持久命名集合(a persistent, named collection of descriptors),如果你之前对schema的定义疑惑不解,希望看了我的这篇文章会好一些,起码不会更差。 广义上 造成疑惑的另一个原因可能是由于schema这一术语具有如此广泛的含义,因为它在不同的环境下有不同的含义,schema一词源于希腊语skhēma,意思是形态(form),轮廓(figure),形状(shape)或方案(plan)。Schema在心理学中被用来描述组织信息类别及其之间关系的有组织的思维或行为模式。我们在设计一个数
252 0
|
存储 SQL 关系型数据库
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 8 章 数据类型_8.8. 几何类型
8.8. 几何类型 8.8.1. 点 8.8.2. 线 8.8.3. 线段 8.8.4. 方框 8.8.5. 路径 8.8.6. 多边形 8.8.7. 圆 几何数据类型表示二维的空间物体。表 8.20展示了PostgreSQL中可以用的几何类型。
1237 0
|
SQL Go
sql获取每一个类别中值最大的一条数据
sql获取每一个类别中值最大的一条数据 /* 数据如下: name val memo ...
1424 0