• SQL Server 2008之空间数据应用(二)


      在SQL Server 2008之空间数据应用(一)中概略的介绍了SQL Server 2008中支持的两种空间数据类型:Geometry和Geography。

      SQL Server 2008中的空间数据类型遵循Open Geospatial Consortium, Inc.(OGC)的《Simple Feature Access》规范标准,你可以在其网站上下载到该标准的详细文件。

      空间数据的具体类型

      在SQL Server 2008中,Geometry和Geography支持十一种空间数据对象或实例类型。下图所示是可实例化类型(以蓝色背景显示)和其抽象基类(以黄色背景显示)的继承关系图。可实例化类型以蓝色背景显示,共7个,它们分别是Point、MultiPoint、LineString、MultiLineString、Polygon、MultiPolygon 和 GeometryCollection。

      在SQL Server 2008之空间数据应用(一)中也看到了,在定义数据字段的类型时,只提供Geometry和Geography两种,那又是如何来表示上述7中具体的可实例化类呢?这是SQL Server内部机制实现的。表中的一列,它可以混杂多种不同的地理空间信息。某一行可能表示湖北省国土区域,某一行表示从我老家至华中师范大学的行车路线,某一行表示大别山区的一处名胜古迹......

      Point:用X、Y坐标来表示一个确切的位置,作为可选的,可以包含Z值和M值,它是一个零维对象。Point实例没有长度、面积等信息,它是构成其它复杂对象的基础。

      

      LineString:线段是两点间的最短路径。LineString表示一系列的点和连接这些点的线段。它是一个一维对象,具备长度信息,但没有面积信息。

      Polygon:Polygon是由一个环(Ring)所定义的闭合的二维图形。具备长度和面积信息。Polygon是存储为一系列点的二维表面,这些点定义一个外部边界环和零个或多个内部环。可以从至少具有三个不同点的环中构建一个Polygon实例。Polygon实例也可以为空。Polygon的外部环和任意内部环定义了其边界。环内部的空间定义了Polygon的内部。Polygon的内部环在单个切点处既可与自身接触也可彼此接触,但如果Polygon的内部环交叉,则该实例无效。

      GeomCollection:除了单实例类型(上述Point、LineString、Polygon三种)之外,还有一种可以表示实例集合的类型。表示这种集合类型的基类是GeomCollection,其实例对象可以是多种单实例类型实例的集合。

      Multipoint:继承自GeomCollection,是零个点或多个点的集合。

      MultiLineString:继承自GeomCollection,是零个或多个geometry或geography LineString实例的集合。

      MultiPolygon:继承自GeomCollection,是零个或多Polygon实例的集合。

      用T-SQL表达空间数据

      任何变量、参数、或者表中的某一列都可以声明为Geometry类型,类型名称是不区分大小写的。Geometry本身是一个抽象类型,必须实例化Geometry的一个可创建的子类来实现空间数据的功能。根据OGC标准,可使用STGeomFromText()静态方法来解析WKT所提供的数据,并根据数据识别出对应的类型。请注意在SQL语法中,CLR方法都是大小写敏感的。

      在.NET下用C#或者VB.NET进行编码时候,通常使用一个圆点符号(.)来请求一个方法,然而在T-SQL中并非如此。在T-SQL中,请求从属于某类型的静态方法是用双冒号(::)。

      示例1——使用Parse()创建Point

    DECLARE @g geometry;
    SET @g = geometry::Parse('POINT(3 4 7 2.5)');
    
    SELECT @g;
    PRINT @g.STX;
    PRINT @g.STY;
    PRINT @g.Z;
    PRINT @g.M;
    

      定义了一个点,X和Y坐标分别是3和4,Z为7,M为2.5。

      示例2——使用STGeomFromText()创建LineString

    DECLARE @g geometry;
    SET @g = Geometry::STLineFromText('LINESTRING(0 8, 6 8, 0 0,6 0)',0)
    SELECT @g
    PRINT @g.STLength() -- Result: 22
    

      执行结果如下图所示。结果选项卡中显示的是LineString对象在SQL Server中的二进制表示;空间结果选项卡是该对象的实际图形;消息窗口中是执行该语句所返回的消息,该语句中使用STLength()获取该LineString的长度,结果为22。

  • 相关阅读:
    Android笔记(六十六) android中的动画——XML文件定义属性动画
    Android笔记(六十五) android中的动画——属性动画(propertyanimation)
    python函数参数默认值及重要警告
    Python 列表
    Python数学运算入门把Python当作计算器
    Python 的非正式介绍
    python中为什么 if/while/def/class语句需要冒号?
    为什么Python在列表和元组的末尾允许使用逗号?
    现实世界中的 Python
    Python常见问题
  • 原文地址:https://www.cnblogs.com/hans_gis/p/2154970.html
Copyright © 2020-2023  润新知