平面空间数据类型表示 geometry
Euclidean (平面) 坐标系中的数据。 此类型在 SQL Server 中作为公共语言运行时 (CLR) 数据类型实现。
该 geometry
类型是预定义的,可在每个数据库中使用。 可以创建类型为 geometry
的表列,并以与使用其他 CLR 类型相同的方式对 geometry
数据进行操作。
SQL Server 支持的 geometry
数据类型(平面)符合开放地理空间联盟 (OGC) 的 SQL 简单功能规范版本 1.1.0。
有关 OGC 规范的详细信息,请参阅以下内容:
SQL Server 支持以下架构中定义的现有 GML 3.1 标准的子集: https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd
创建或构造新的几何图形实例
从现有实例创建新的几何图形实例
该 geometry
数据类型提供了许多内置方法,可用于基于现有实例创建新 geometry
实例。
围绕几何图形创建缓冲区
STBuffer (几何数据类型)
创建几何图形的简化版本
化简(几何数据类型)
创建几何图形的凸壳的方法
STConvexHull (几何数据类型)
从两个几何图形的交集创建几何图形
STIntersection (几何数据类型)
通过合并两个几何图形生成新的几何图形
STUnion (几何数据类型)
从两个几何图形不重叠之处的点创建几何图形
STDifference (几何数据类型)
从两个几何图形不重叠的点创建几何图形
STSymDifference (几何数据类型)
创建位于现有几何图形上的任意点实例
STPointOnSurface (几何数据类型)
从 Well-Known 文本输入构造几何图形实例
该 geometry
数据类型提供了多个内置方法,这些方法从开放地理空间联盟 (OGC) WKT 表示形式生成几何图形。 WKT 标准是一个文本字符串,允许以文本形式交换几何图形数据。
从 WKT 输入构造任何类型的几何图形实例
STGeomFromText (几何数据类型)
从 WKT 输入构造几何点实例
STPointFromText (几何数据类型)
从 WKT 输入中构造一个几何 MultiPoint 实例
STMPointFromText (几何数据类型)
从 WKT 输入构造几何图形 LineString 实例
STLineFromText (几何数据类型)
从 WKT 输入构造几何图形 MultiLineString 实例
STMLineFromText (几何数据类型)
从 WKT 输入构造几何多边形实例
STPolyFromText (几何数据类型)
从 WKT 输入构建几何 MultiPolygon 实例
STMPolyFromText (几何数据类型)
从 WKT 输入创建几何集合 GeometryCollection 实例
STGeomCollFromText (几何数据类型)
从 Well-Known 二进制输入构建几何实例
WKB 是由开放地理空间联盟 (OGC) 指定的二进制格式,允许 geometry
在客户端应用程序和 SQL 数据库之间交换数据。 以下函数接受 WKB 输入来构造几何图形:
从 WKB 输入构造任何类型的几何图形实例
STGeomFromWKB (几何数据类型)
从 WKB 输入构造几何点实例
STPointFromWKB (几何数据类型)
从 WKB 输入构造几何图形 MultiPoint 实例
STMPointFromWKB (几何数据类型)
根据 WKB 输入生成几何 LineString 实例
STLineFromWKB (几何数据类型)
从 WKB 输入构造一个 MultiLineString 几何实例
STMLineFromWKB (几何数据类型)
从 WKB 输入构造几何多边形实例
STPolyFromWKB (几何数据类型)
从 WKB 输入构造几何图形 MultiPolygon 实例
STMPolyFromWKB (几何数据类型)
从 WKB 输入构造几何图形 GeometryCollection 实例
STGeomCollFromWKB (几何数据类型)
从 GML 文本输入构造几何图形实例
数据类型 geometry
提供一种方法,该方法从 GML 生成 geometry
实例,这是几何对象的 XML 表示形式。 SQL Server 支持 GML 的子集。
从 GML 输入构造任何类型的几何图形实例
GeomFromGml (几何数据类型)
从几何实例返回 Well-Known 文本和 Well-Known 二进制数据
可以使用以下方法返回实例的 geometry
WKT 或 WKB 格式:
返回几何图形实例的 WKT 表示形式
STAsText (几何数据类型)
返回几何图形实例的 WKT 表示形式,包括任何 Z 和 M 值
AsTextZM (几何数据类型)
返回几何图形实例的 WKB 表示形式
STAsBinary (几何数据类型)
返回几何图形实例的 GML 表示形式
AsGml (几何数据类型)
查询几何图形实例的属性和行为
所有 geometry
实例都具有许多可以通过 SQL Server 提供的方法检索的属性。 以下主题定义几何类型的属性和行为,以及用于查询每个对象的方法。
有效性、实例类型和几何集合(GeometryCollection)信息
geometry
构造实例后,可以使用以下方法来确定实例格式是否良好、返回实例类型,或者(如果它是集合实例)返回特定geometry
实例。
返回几何图形的实例类型
STGeometryType (几何数据类型)
确定几何图形是否为给定实例类型
InstanceOf (几何数据类型)
确定几何图形实例的格式是否适合其实例类型
STIsValid (几何数据类型)
将几何图形实例转换为具有实例类型的格式良好的几何图形实例
MakeValid (几何数据类型)
返回几何集合实例中的几何图形数
STNumGeometries (几何数据类型)
在几何图形集合实例中返回特定几何图形
STGeometryN (几何数据类型)STGeometryN (几何数据类型)
点数
所有无空 geometry
实例都由 点组成。 这些点表示绘制几何图形的平面的 X 坐标和 Y 坐标。
geometry
提供了许多用于查询实例点的内置方法。
返回构成实例的点数
STNumPoints (几何数据类型)
返回实例中的特定点
STPointN
返回位于实例上的任意点
STPointOnSurface
返回实例的起点
STStartPoint
返回实例的终点
STEndpoint
返回点实例的 X 坐标
STX(geometry 数据类型)
返回点实例的 Y 坐标
STY
返回多边形、CurvePolygon 或 MultiPolygon 实例的几何中心点
STCentroid
尺寸
非空 geometry
实例可以是 0 维、1 维或二维实例。 零维 geometries
(例如 Point
,和 MultiPoint
)没有长度或区域。 一维对象(例如 LineString, CircularString, CompoundCurve
,和 MultiLineString
)具有长度。 二维实例(例如 Polygon
, CurvePolygon
和 MultiPolygon
)具有面积和长度。 空实例将报告一个维度为 -1,而 GeometryCollection
将根据其内容的类型报告一个区域。
返回实例的维度
STDimension
返回实例的长度
STLength
返回实例的区域
STArea
空
空geometry
实例没有任何点。 空的LineString, CircularString
、CompoundCurve
和MultiLineString
实例的长度为零。 空实例 Polygon
、CurvePolygon
和 MultiPolygon
的区域为 0。
确定实例是否为空
STIsEmpty。
简单
geometry
要使实例简单起见,它必须满足以下两项要求:
实例的每个图不得与自身相交,其端点除外。
实例中的两个图形不能在两者的边界之外相交。
注释
空几何图形始终简单。
确定实例是否简单
STIsSimple。
边界、内部和外部
实例的内部geometry
是实例占用的空间,外部是未占用它的空间。
边界 由 OGC 定义,如下所示:
Point
和MultiPoint
实例没有边界。LineString
和MultiLineString
边界由起点和终点构成,删除那些出现偶数次的。
DECLARE @g geometry;
SET @g = geometry::Parse('MULTILINESTRING((0 1, 0 0, 1 0, 0 1), (1 1, 1 0))');
SELECT @g.STBoundary().ToString();
实例的Polygon
MultiPolygon
边界是其环集。
DECLARE @g geometry;
SET @g = geometry::Parse('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1))');
SELECT @g.STBoundary().ToString();
返回实例的边界
STBoundary
信封
实例的geometry
信封(也称为边界框)是由实例的最小坐标和最大值(X,Y)坐标构成的轴对齐矩形。
返回实例的信封
STEnvelope
结束语
封闭geometry
实例是一个数字,其起点和终点相同。
Polygon
实例被视为已关闭。
Point
实例尚未关闭。
环是一个简单的封闭 LineString
实例。
确定实例是否已关闭
STIsClosed
确定实例是否为环形
STIsRing
返回多边形实例的外部环
STExteriorRing
返回多边形中的内环数
STNumInteriorRing
返回多边形的指定内环
STInteriorRingN
空间引用 ID (SRID)
空间引用 ID (SRID) 是一个标识符,用于指定实例所表示的坐标系 geometry
。 具有不同 SRID 的两个实例是无法比拟的。
设置或返回实例的 SRID
STSrid
可以修改此属性。
确定几何图形实例之间的关系
该 geometry
数据类型提供了许多内置方法,可用于确定两个 geometry
实例之间的关系。
确定两个实例是否构成相同的点集
STEquals
判断两个实例是否不相交
STDisjoint
确定两个实例是否相交
STIntersects
确定两个实例是否触摸
STTouches
确定两个实例是否重叠
STOverlaps
确定两个实例是否交叉
STCrosses
确定一个实例是否位于另一个实例中
STWithin
确定一个实例是否包含另一个实例
STContains
确定一个实例是否与另一个实例重叠
STOverlaps
确定两个实例是否在空间上相关
STRelate
确定两个几何图形中点之间的最短距离
STDistance
geometry 实例的默认值是零 SRID
SQL Server 中实例的默认 SRID geometry
为 0。 使用 geometry
空间数据时,执行计算不需要空间实例的特定 SRID;因此,实例可以驻留在未定义的平面空间中。 若要在数据类型方法的 geometry
计算中指示未定义的平面空间,SQL Server 数据库引擎使用 SRID 0。
例子
以下两个示例演示如何添加和查询几何图形数据。
第一个示例创建一个具有标识列和
geometry
列GeomCol1
的表。 第三列将geometry
列转换为开放地理空间联盟(OGC)的Well-Known文本(WKT)表示形式,并使用STAsText()
方法。 然后插入两行:一行包含一个LineString
实例geometry
,一行包含一个Polygon
实例。IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL DROP TABLE dbo.SpatialTable; GO CREATE TABLE SpatialTable ( id int IDENTITY (1,1), GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() ); GO INSERT INTO SpatialTable (GeomCol1) VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0)); INSERT INTO SpatialTable (GeomCol1) VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0)); GO
第二个示例使用
STIntersection()
方法返回两个先前插入的geometry
实例相交的点。DECLARE @geom1 geometry; DECLARE @geom2 geometry; DECLARE @result geometry; SELECT @geom1 = GeomCol1 FROM SpatialTable WHERE id = 1; SELECT @geom2 = GeomCol1 FROM SpatialTable WHERE id = 2; SELECT @result = @geom1.STIntersection(@geom2); SELECT @result.STAsText();