SQL Server 2008 geometry 数据类型

折月煮酒 提交于 2020-01-23 02:33:40
原文:SQL Server 2008 geometry 数据类型

摘自SQL Server 2008帮助

平面空间数据类型 geometry 是作为 SQL Server 中的公共语言进行时 (CLR) 数据类型实现的。此类型表示欧几里得(平面)坐标系中的数据。

注册 geometry 类型

geometry 类型已进行预定义,并可在每个数据库中使用。您可以创建 geometry 类型的表列并对 geometry 数据进行操作,就像使用其他 CLR 类型一样。

示例

以下两个示例显示了如何添加和查询几何图形数据。第一个示例创建了带有标识列和 geometryGeomCol1 的表。第三列将 geometry 列呈现为其开放地理空间联盟 (OGC) 熟知文本 (WKT) 表示形式,并使用 STAsText() 方法。接下来将插入两行:一行包含 geometry 类型的 LineString 实例,一行包含 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();

维度

非空 geometry 实例可以为零维、一维或二维。零维 geometries(例如 PointMultiPoint)没有长度或面积。一维对象(例如 LineStringMultiLineString)具有长度。二维实例(例如 PolygonMultiPolygon)具有面积和长度。空实例将报告为 -1 维,并且GeometryCollection 将根据其内容类型报告一个面积。

“空”geometry 实例不包含任何点。空的 LineStringMultiLineString 实例的长度为零。空的 PolygonMultiPolygon 实例的面积为 0。

简单

为了使实例的 geometry 变得“简单”,必须符合以下全部两个要求:

  • 实例的每个图形不能与自身相交,但其终点除外。
  • 实例的任何两个图形可在某个点上相交,但两个边界上的点除外。
  • 边界、内部和外部

    geometry 实例的“内部”是指由实例占用的空间,而“外部”是指未占用的空间。

    “边界”由 OGC 定义,如下所示:

    • PointMultiPoint 实例没有边界。
    • LineStringMultiLineString 边界由起始点和终点形成,并删除那些出现次数为偶数的点。

    包络线

    geometry 实例的“包络线”又称为“边界框”,它是一个由实例的最小和最大坐标 (X,Y) 形成的轴对齐矩形。

    闭合

    “闭合的”geometry 实例是指起始点和终点相同的图形。Polygon 实例是闭合的。Point 实例不是闭合的。

    环是一个简单、闭合的 LineString 实例。

    空间引用标识符 (SRID)

    空间引用标识符 (SRID) 是指定 geometry 实例所在的坐标系的标识符。两个拥有不同 SRID 的实例是不可比的。

     

     

    geometry 数据类型提供了许多内置方法,您可以使用这些方法基于现有实例创建新的 geometry 实例。

    geometry 数据类型提供了许多内置方法,您可以使用这些方法确定两个 geometry 实例之间的关系。

    所有 geometry 实例都有很多可以通过 SQL Server 提供的方法进行检索的属性。下列主题定义了几何图形类型的属性和行为,并为查询每种图形定义了方法。

    可通过以熟知文本(Well-Known Text,WKT)或熟知二进制(Well-Known Binary,WKB)格式输入数据来构造 geometry 空间数据类型的实例。

     

    STGeomFromText(geometry 数据类型)

    从开放地理空间联盟 (OGC) 熟知文本 (WKT) 表示形式返回 geometry 实例,增加了该实例传递的任何 Z(标高)和 M(度量)值。

    语法

    STGeomFromText ( 'geometry_tagged_text' , SRID )

    参数

    geometry_tagged_text

    您希望返回的 geometry 实例的 WKT 表示形式。geometry_tagged_textnvarchar(max) 表达式。

    SRID

    一个 int 表达式,它表示您希望返回的 geometry 实例的空间引用 ID (SRID)。

    返回类型

    SQL Server 返回类型:geometry

    CLR 返回类型:SqlGeometry

    备注

    STGeomFromText() 返回的 geometry 实例的 OGC 类型设置为相应的 WKT 输入。

    如果输入格式不正确,此方法将引发 FormatException

    示例

    下面的示例使用 STGeomeFromText() 创建 geometry 实例。

    DECLARE @g geometry;
    SET @g = geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0);
    SELECT @g.ToString();
    易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
    该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!