VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > MySQL >
  • Mysql空间数据&空间索引(spatial)(3)

 

12.5.2.12 MultiSurface Class

A MultiSurface is a geometry collection composed of surface elements. 不可实例化.唯一可实例化的子类是 MultiPolygon.

MultiSurface Assertions

  • 其中的Surfaces没有内部相交

  • 其中的Surface相交点数有限.

12.5.2.13 MultiPolygon Class

A MultiPolygon is a MultiSurface object composed of Polygon elements.

MultiPolygon Examples

  • 可以用来表示地区湖系统

MultiPolygon Assertions

  • 没有两个Polygon内部相交。

  • 两个Polygon不可以相交(相交也是在前面一个条件中禁止的)或者接触无限个点

  • 一个MultiPolygon可能没有切线,spikes,或者穿孔.  MultiPolygon 是 一个规则的,closed的点集合

  • A MultiPolygon有不止一个Polygon有不连接的内部. The number of connected components of the interior of a MultiPolygon is equal to the number of Polygon values in theMultiPolygon.

MultiPolygon Properties

  • 二维

  • A MultiPolygon的边界是一系列的closed curves (LineString values) corresponding to the boundaries of its Polygon elements.

  • Each Curve in the boundary of the MultiPolygon is in the boundary of exactly one Polygon element.

  • Every Curve in the boundary of an Polygon element is in the boundary of the MultiPolygon

 
 

12.5.3 Using Spatial Data

这个章节描述如何创建包含空间数据类型列的表,以及如何操作空间信息.
 

12.5.3.1 Supported Spatial Data Formats

有两个标准的空间数据格式被用来表示集合对象Two standard spatial data formats are used to represent geometry objects in queries:

  • Well-Known Text (WKT) format

  • Well-Known Binary (WKB) format

在内部,MySQL存储几何值到一个既不是WKT也不是WKB的格式。

 

12.5.3.1.1 Well-Known Text (WKT) Format
    The Well-Known Text (WKT) 用来表示将ASCII表格中的几何数据换成几何值。OpenGIS规格提供了一个巴科斯范式语法来定义写入WKT值得规则。

Examples of WKT representations of geometry objects:

  • A Point:

    POINT(15 20)
    

    点坐标之间没有用逗号分隔。这个和  SQL Point() 方法不同,后者需要用逗号隔开坐标.注意使用适当的语法到给定空间操作的上下文。例如下面的语句都是从Point对象中取出X坐标。第一个直接使用Point() 函数,第二个使用WKT的GeomFormText()转换Point
    The first produces the object directly using the Point() function. The second uses a WKT representation converted to a Point with GeomFromText().

    mysql> SELECT ST_X(Point(15, 20));
    +---------------------+
    | ST_X(POINT(15, 20)) |
    +---------------------+
    |                  15 |
    +---------------------+
    

mysql> SELECT ST_X(ST_GeomFromText(‘POINT(15 20)’));
±--------------------------------------+
| ST_X(ST_GeomFromText(‘POINT(15 20)’)) |
±--------------------------------------+
| 15 |
±--------------------------------------+

  • A LineString有四个点:

    LINESTRING(0 0, 10 10, 20 25, 50 60)
    

    点和点直接由逗号分开

  • A 带有一个外部圈和一个内部圈的Polygon

    POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))
    
  • 多点:

    MULTIPOINT(0 0, 20 20, 60 60)
    

    在5.7.9中,空间函数例如 ST_MPointFromText() and ST_GeomFromText() 接受WKT格式化的MutilPoint数值中使用圆括号把点包裹起来.例如下面两个函数调用都是有效的。但是,在5.7.9之前的版本,第二种方式会产生错误:

    ST_MPointFromText('MULTIPOINT (1 1, 2 2, 3 3)')
    ST_MPointFromText('MULTIPOINT ((1 1), (2 2), (3 3))')
    

    在5.7.9中,输出的MultiPoint值会使用圆括号把每个点包裹起来

    mysql> SET @mp = 'MULTIPOINT(1 1, 2 2, 3 3)';
    mysql> SELECT ST_AsText(ST_GeomFromText(@mp));
    +---------------------------------+
    | ST_AsText(ST_GeomFromText(@mp)) |
    +---------------------------------+
    | MULTIPOINT((1 1),(2 2),(3 3))   |
    +---------------------------------+
    

    5.7.9之前的输出不会带有括号

    mysql> SET @mp = 'MULTIPOINT(1 1, 2 2, 3 3)';
    mysql> SELECT ST_AsText(ST_GeomFromText(@mp));
    +---------------------------------+
    | ST_AsText(ST_GeomFromText(@mp)) |
    +---------------------------------+
    | MULTIPOINT(1 1,2 2,3 3)         |
    +---------------------------------+
    
  • A MultiLineString with two LineString values:

    MULTILINESTRING((10 10, 20 20), (15 15, 30 15))
    
  • A MultiPolygon with two Polygon values:

    MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7, 5 5)))
    
  • A GeometryCollection consisting of two Point values and one LineString:

    GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))
    
12.5.3.1.2 Well-Known Binary (WKB) Format

The Well-Known Binary (WKB) 使用转换几何数据成二进制流representation of geometric values is used for exchanging geometry data as binary streams represented by BLOB values containing geometric WKB information. WKB 使用1-byte 无符号整数,4-byte无符号整数,和8-byte 双精度数字。一个byte是8bit。例如,一个WKB值表示POINT(1,1)用21byte组成这个序列,每一个由两个十六进制表示。

0101000000000000000000F03F000000000000F03F

这个序列由以下组件组成:

Byte order:   01
WKB type:     01000000
X coordinate: 000000000000F03F
Y coordinate: 000000000000F03F

Component representation is as follows:

  • byte是由0/1表示低位高位存储。 这种方法也被称为Network Data Representation (NDR) and External Data Representation (XDR), respectively.

  • The WKB type是用来表明几何体类型. 值从1到7分别表示 Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, and GeometryCollection.

  • 一个Point值有X,Y坐标。每个坐标由一个双精度数值表示

 

12.5.3.2 Creating Spatial Columns

MySQL 提供了一个标准的方法去为几何类型创建空间列。例如, 在 CREATE TABLE or ALTER TABLE中. 空间列在 MyISAM, InnoDB, NDB, and ARCHIVE tables 中支持. 

  • 使用 CREATE TABLE 语法创建一个带有空间列的表

    CREATE TABLE geom (g GEOMETRY);
    
  • 使用 ALTER TABLE 语法添加或者删除一个表中的空间列

    ALTER TABLE geom ADD pt POINT;
    ALTER TABLE geom DROP pt;
    
 

12.5.3.3 填充Populating Spatial Columns

创建空间列之后,你可以填充进去空间数据。数值必须存储为内部几何格式的值。但是你可以转换成 Well-Known Text (WKT) or Well-Known Binary (WKB) 格式。下面例子展示如何插入几何值到一个表中。使用WKT转换成内部几何格式:

  • 直接在 INSERT 语句中执行转换

    INSERT INTO geom VALUES (ST_GeomFromText('POINT(1 1)'));
    

SET @g = ‘POINT(1 1)’;
INSERT INTO geom VALUES (ST_GeomFromText(@g));

  • INSERT 之前执行转换

    SET @g = ST_GeomFromText('POINT(1 1)');
    INSERT INTO geom VALUES (@g);
    

下面的例子插入了更加复杂的几何数据到表中

    SET @g = 'LINESTRING(0 0,1 1,2 2)';
   INSERT INTO geom VALUES (ST_GeomFromText(@g));

SET @g = ‘POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))’;
INSERT INTO geom VALUES (ST_GeomFromText(@g));

SET @g =‘GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(0 0,1 1,2 2,3 3,4 4))’;
INSERT INTO geom VALUES (ST_GeomFromText(@g));

前面的语句使用了


相关教程
关于我们--广告服务--免责声明--本站帮助-友情链接--版权声明--联系我们       黑ICP备07002182号