OpenGIS几何模型
OGC的SQL with Geometry Types 环境提出的几何类型集基于OpenGIS Geometry Model。在此模型中,每个几何对象都具有以下常规属性:
- 它与空间参考系统相关联,该系统描述了在其中定义对象的坐标空间。
- 它属于某些几何类。
几何类层次结构
几何类定义层次结构如下:
Geometry
(不可实例)Point
(实例化)Curve
(不可实例)LineString
(实例化)Line
LinearRing
Surface
(不可实例)Polygon
(实例化)
GeometryCollection
(实例化)MultiPoint
(实例化)MultiCurve
(不可实例)MultiLineString
(实例化)
MultiSurface
(不可实例)MultiPolygon
(实例化)
无法在非实例化类中创建对象。可以在可实例化的类中创建对象。所有类都具有属性,可实例化类也可能具有断言(定义有效类实例的规则)。
Geometry
是基类。这是一个抽象类。的可实例化子类Geometry
仅限于存在于二维坐标空间中的零,一和二维几何对象。定义所有可实例化的几何类别,以便在拓扑上封闭该几何类别的有效实例(也就是说,所有定义的几何均包括其边界)。
基Geometry
类有子类Point
,Curve
,Surface
,和GeometryCollection
:
Point
表示零维对象。Curve
代表一维对象,并具有子类LineString
,子子类Line
和LinearRing
。Surface
是为二维对象设计的,具有子类Polygon
。GeometryCollection
有专门的零,一维和二维集合类命名MultiPoint
,MultiLineString
和MultiPolygon
对造型对应的集合的几何形状Points
,LineStrings
和Polygons
分别。MultiCurve
和MultiSurface
作为抽象超类引入的,这些抽象类泛化了处理Curves
和处理的集合接口Surfaces
。
Geometry
,Curve
,Surface
,MultiCurve
,和MultiSurface
被定义为noninstantiable类。它们为其子类定义了一组通用的方法,并且为了扩展性而将它们包括在内。
Point
,LineString
,Polygon
,GeometryCollection
,MultiPoint
,MultiLineString
,和MultiPolygon
是实例化类。
几何类
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(最小边界矩形)或信封。这是由最小和最大(X,Y)坐标形成的边界几何:
((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
- 该值是 simple还是 nonsimple。类型(
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
物产
- X坐标值。
- Y坐标值。
Point
被定义为零维几何。- a的边界
Point
是空集。
曲线类别
Curve
是一维几何,通常由一系列点表示。特定的子类Curve
定义点之间插值的类型。Curve
是一个不可实例化的类。
Curve
物产
Curve
具有其点的坐标。Curve
被定义为一维几何。Curve
如果 A 不会两次通过同一点,则它很简单,但如果起点和终点相同,则曲线仍然可以是简单的。Curve
如果 A的起点等于其端点,则将A 闭合。- 关闭的边界
Curve
为空。 - 非封闭的边界
Curve
由其两个端点组成。 Curve
简单且封闭的 A 是LinearRing
。
LineString类
LineString
是Curve
点与点之间的线性插值。
LineString
例子
- 在世界地图上,
LineString
物体可以代表河流。 - 在城市地图中,
LineString
对象可以代表街道。
LineString
物产
LineString
具有线段的坐标,由每个连续的点对定义。- 一个
LineString
是一个Line
,如果它包含正好有两个点。 - 一个
LineString
是一个LinearRing
,如果它是既封闭又简单。
表面等级
Surface
是二维几何。这是一个不可实例化的类。其唯一的可实例化子类是Polygon
。
Surface
物产
Surface
被定义为二维几何。- OpenGIS规范定义了一种简单
Surface
的几何形状,它由与单个外部边界和零个或多个内部边界相关联的单个“补丁”组成。 - 简单对象的边界是一
Surface
组与其外部和内部边界相对应的闭合曲线。
多边形类
Polygon
是Surface
代表多边几何形状的平面。它由单个外部边界和零个或多个内部边界定义,其中每个内部边界在中定义一个孔Polygon
。
Polygon
例子
- 在区域地图上,
Polygon
对象可以代表森林,地区等。
Polygon
断言
- a的边界
Polygon
由构成其外部和内部边界的一组LinearRing
对象(即LineString
简单且封闭的对象)组成。 Polygon
没有交叉的戒指。a边界中的环Polygon
可在a处相交Point
,但仅作为切线。Polygon
没有线条,尖峰或刺孔。Polygon
的内部是连接的点集。Polygon
可能有孔。Polygon
未连接带孔的外部。每个孔都定义了外部的连接组件。
前面的断言构成了Polygon
一个简单的几何。
GeometryCollection类
GeomCollection
是一个几何,它是零个或多个任何类别的几何的集合。
GeomCollection
和GeometryCollection
是同义的,与GeomCollection
优选的类型名称。
几何图形集合中的所有元素必须位于同一空间参考系统(即,位于同一坐标系中)。尽管GeomCollection
以下各节中描述的子类可能会限制成员资格,但是几何集合的元素没有其他限制。限制可能基于:
- 元素类型(例如,
MultiPoint
可能仅包含Point
元素) - 尺寸
- 限制元素之间的空间重叠程度
MultiPoint类
MultiPoint
是由Point
元素组成的几何集合。这些点没有以任何方式连接或排序。
MultiPoint
例子
- 在世界地图上,
MultiPoint
可以代表一连串的小岛。 - 在城市地图上,
MultiPoint
可以代表售票处的网点。
MultiPoint
物产
MultiPoint
是零维几何。MultiPoint
如果 A的两个Point
值都不相等(坐标值相同),则它很简单。- a的边界
MultiPoint
是空集。
MultiCurve类
MultiCurve
是由Curve
元素组成的几何集合。MultiCurve
是一个不可实例化的类。
MultiCurve
物产
MultiCurve
是一维几何。MultiCurve
当且仅当其所有元素都简单时, A 才简单;任何两个元素之间的唯一交点出现在两个元素边界上的点处。MultiCurve
边界是通过将所获得的“模2联合规则”(也被称为“奇偶规则”):一个点是在一个边界MultiCurve
,如果它是在奇数个的边界Curve
的元件。MultiCurve
如果 A的所有元素都已关闭,则A 会关闭。- 关闭的边界
MultiCurve
始终为空。
MultiLineString类
MultiLineString
是MultiCurve
由LineString
元素组成的几何集合。
MultiLineString
例子
- 在区域地图上,
MultiLineString
可以代表河流系统或高速公路系统。
MultiSurface类
MultiSurface
是由表面元素组成的几何集合。MultiSurface
是一个不可实例化的类。其唯一的可实例化子类是MultiPolygon
。
MultiSurface
断言
- 内部的表面
MultiSurface
没有相交的内部。 - a内的曲面的
MultiSurface
边界最多相交于有限数量的点。
MultiPolygon类
MultiPolygon
是MultiSurface
由Polygon
元素组成的对象。
MultiPolygon
例子
- 在区域地图上,
MultiPolygon
可以代表湖泊系统。
MultiPolygon
断言
MultiPolygon
没有两个Polygon
内部相交的元素。MultiPolygon
没有两个Polygon
元素相交(上一个断言也禁止相交)或在无数个点处接触。MultiPolygon
可能没有切割线,尖峰或刺孔。MultiPolygon
是一个常规的封闭点集。MultiPolygon
具有多个的Polygon
的内部未连接。a内部的连接组件MultiPolygon
的数量等于中的Polygon
值的数量MultiPolygon
。
MultiPolygon
物产
MultiPolygon
是二维几何。MultiPolygon
边界是一组闭合曲线(的LineString
对应于其的边界值)Polygon
的元素。- 每个
Curve
边界MultiPolygon
都在一个Polygon
元素的边界内。 - 每个
Curve
在边界Polygon
要素是在边界的MultiPolygon
。