• 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。

  • 相关阅读:
    Spring Boot 使用常见问题
    JPA 使用
    JPA 复杂查询
    Gitlab利用Webhook实现Push代码后的jenkins自动构建
    消息中间件的使用场景
    消息中间件资料整理
    js原生跨域--用script标签实现
    遍历类成员并赋值
    Spring boot 读取 application.properties 文件方法
    fastjson 进行json转实体类对象及一些常用操作
  • 原文地址:https://www.cnblogs.com/hans_gis/p/2154970.html
Copyright © 2020-2023  润新知