OGC的SQL几何类型环境提出的几何类型集合是基于OpenGIS几何模型的。在此模型中,每个几何对象具有以下常规特性:
●它与空间参照系相关联,空间参照系描述了所定义对象的坐标空间。
●它属于某种几何类。
几何类层次结构
几何类定义层次,如下所示:
●Geometry (不可实例化)
■ Point (可实例化)
■ Curve (不可实例化)
○ LineString (可实例化)
●Line
●LinearRing
■ Surface (不可实例化)
○ Polygon (可实例化)
■ GeometryCollection (可实例化)
○ MultiPoint (可实例化)
○ MultiCurve (不可实例化)
●MultiLineString (可实例化)
○ MultiSurface (不可实例化)
●MultiPolygon (可实例化)
不能用不可实例化的类创建对象。能够用可实例化类创建对象。所有类都有属性,可实例化类也可能有断言(定义有效类实例的规则)。
Geometry是基类,是一个抽象类。Geometry的可实例化子类仅限存在于二维坐标空间中的零维、一维和二维几何对象。定义了所有可实例化几何类,以便几何类的有效实例在拓扑上闭合(即,所有定义的几何体都包括其边界)。
基类Geometry有Point、Curve、Surface和GeometryCollection子类:
●Point表示零维对象。
●Curve表示一维对象,有LineString子类,LineString又有Line和LinearRing子类。
●Surface是为二维对象设计的,并且有子类Polygon。
●GeometryCollection有专门的零维、一维和二维集合类MultiPoint、MultiLineString和MultiPolygon,分别用于对Point、LineString和Polygon集合建模。MultiCurve和MultiSurface作为抽象超类被引入,它们归纳了集合接口来处理Curve和Surface。
Geometry、Curve、Surface、MultiCurve和MultiSurface定义为不可实例化的类。它们为子类定义了一组公共方法,子类包含了这些方法以实现可扩展性。
Point、LineString、Polygon、GeometryCollection、MultiPoint、MultiLineString和MultiPolygon是可实例化的类。
1.Geometry 类
Geometry是层次结构的根类。它是一个不可实例化的类,但具有许多属性,如下所述,这些属性对于从任何Geometry子类创建的所有几何值都是通用的。特定的子类有它们自己的特定属性,稍后将进行描述。
Geometry 属性
几何值具有以下属性:
● 类型,每个几何体都属于层次结构中的一个可实例化类。
● SRID,也就是空间参考标识符。此值标识几何图形的关联空间参照系,该参照系描述定义几何对象的坐标空间。
在MySQL中,SRID值是与几何值相关联的整数。最大可用SRID值为2^32−1。如果给定更大的值,则只使用较低的32位。
SRID 0表示无限平坦的笛卡尔平面,其轴没有指定单位。若要确保SRID 0的行为,请使用SRID 0创建几何值。如果未指定SRID,则SRID 0是新几何值的默认值。
对于多个几何值的计算,所有值必须具有相同的SRID,否则将发生错误。
● 坐标、平面、大地测量
它在空间参照系中的坐标,用双精度(8字节)数字表示。所有非空几何体至少包含一对(X,Y)坐标。空几何体不包含坐标。
坐标与SRID相关。例如,在不同的坐标系中,即使对象具有相同的坐标,两个对象之间的距离也可能不同,因为平面坐标系上的距离和大地坐标系(地球表面的坐标)上的距离是不同的。
● 内部、边界 和外部
每个几何体在空间中都占有一定的位置。几何体的外部是几何体不占用的所有空间。内部是几何体所占据的空间。边界是几何体内部和外部之间的接口。
● MBR
它的MBR(最小边界矩形)或封套。这是边界几何体,由最小和最大(X,Y)坐标组成:
● 简单、不简单
值是简单的还是不简单的。类型(LineString、MultiPoint、MultiLineString)的几何值要么是简单的,要么是不简单的。每种类型都决定自己的断言,是简单的还是不简单的。
● 闭合、不闭合!
值是闭合的还是不闭合的。类型(LineString、MultiString)的几何值要么闭合,要么不闭合。每种类型都决定自己的断言是否闭合。
● 空、非空
值是空的还是非空的,如果几何体没有任何点,则该几何体为空。空几何体的外部、内部和边界都未定义(即,它们由NULL值表示)。空几何体被定义为始终简单且面积为0。
● 维度
它的维度。几何体的维度可以是−1、0、1或2:
■ -1表示空几何体。
■ 0表示没有长度和面积的几何体。
■ 1表示长度非零且面积为零的几何体。
■ 2表示非零面积的几何体。
Point对象的维度为零。LineString对象的维度为1。Polygon对象的维度为2。MultiPoint、MultiLineString和MultiPolygon对象的维度与它们成员元素的维度相同。
Point 类
Point是表示坐标空间中单个位置的几何图形。
Point示例
● 想象一下,有许多城市的大比例尺世界地图。Point对象可以表示每个城市。
● 在城市地图上,Point对象可以表示公共汽车站。
Point属性
● X-坐标值。
● Y-坐标值。
● Point被定义为零维几何体。
● Point的边界是空集。
Curve 类
Curve是一维几何体,通常由一系列点表示。Curve的特定子类定义点之间的插值类型。Curve是不可实例化的类。
Curve的属性
● Curve有它的点的坐标。
● Curve被定义为一维几何体。
● 如果Curve不经过同一个点两次,那么它就是简单的,但如果起点和终点相同,Curve仍然是简单的。
● 如果Curve的起点等于其终点,则Curve是闭合的。
● 闭合Curve的边界为空。
● 非闭合Curve的边界由两个端点组成。
● 简单而封闭的Curve是LinearRing。