mysql空间索引例子_Mysql空间数据&空间索引(spatial)(3)

Mysql空间数据&空间索引(spatial)(3)

12.5.2.12 MultiSurface Class

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

MultiSurfaceAssertions

其中的Surfaces没有内部相交

其中的Surface相交点数有限.

12.5.2.13 MultiPolygon Class

AMultiPolygonis aMultiSurfaceobject composed ofPolygonelements.

MultiPolygonExamples

可以用来表示地区湖系统

MultiPolygonAssertions

没有两个Polygon内部相交。

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

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

AMultiPolygon有不止一个Polygon有不连接的内部. The number of connected components of the interior of aMultiPolygonis equal to the number ofPolygonvalues in theMultiPolygon.

MultiPolygonProperties

二维

AMultiPolygon的边界是一系列的closed curves (LineStringvalues) corresponding to the boundaries of itsPolygonelements.

EachCurvein the boundary of theMultiPolygonis in the boundary of exactly onePolygonelement.

EveryCurvein the boundary of anPolygonelement is in the boundary of theMultiPolygon.

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:

APoint:

POINT(15 20)

点坐标之间没有用逗号分隔。这个和  SQLPoint()方法不同,后者需要用逗号隔开坐标.注意使用适当的语法到给定空间操作的上下文。例如下面的语句都是从Point对象中取出X坐标。第一个直接使用Point() 函数,第二个使用WKT的GeomFormText()转换Point

The first produces the object directly using thePoint()function. The second uses a WKT representation converted to aPointwithGeomFromText().

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 |

±--------------------------------------+

ALineString有四个点:

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()andST_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) |

+---------------------------------+

AMultiLineStringwith twoLineStringvalues:

MULTILINESTRING((10 10, 20 20), (15 15, 30 15))

AMultiPolygonwith twoPolygonvalues:

MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7, 5 5)))

AGeometryCollectionconsisting of twoPointvalues and oneLineString:

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 byBLOBvalues 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, andGeometryCollection.

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

12.5.3.2 Creating Spatial Columns

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

使用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));

前面的语句使用了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值