-
Mysql空间数据&空间索引(spatial)(3)
12.5.2.12 MultiSurface Class
A MultiSurface
MultiPolygon
.
MultiSurface
-
其中的Surfaces没有内部相交
-
其中的Surface相交点数有限.
12.5.2.13 MultiPolygon Class
A MultiPolygon
MultiSurface
Polygon
MultiPolygon
-
可以用来表示地区湖系统
MultiPolygon
-
没有两个Polygon内部相交。
-
两个Polygon不可以相交(相交也是在前面一个条件中禁止的)或者接触无限个点
-
一个
MultiPolygon可能没有切线,spikes,或者穿孔
.MultiPolygon
是 一个规则的,closed的点集合 -
A
MultiPolygon有不止一个Polygon有不连接的内部
. The number of connected components of the interior of aMultiPolygon
is equal to the number of Polygon
values in the MultiPolygon
.
MultiPolygon
-
二维
-
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
Examples of WKT representations of geometry objects:
-
A
Point
:点坐标之间没有用逗号分隔。这个和
SQL Point()
方法不同,后者需要用逗号隔开坐标.注意使用适当的语法到给定空间操作的上下文。例如下面的语句都是从Point对象中取出X坐标。第一个直接使用Point() 函数,第二个使用WKT的GeomFormText()转换Point
The first produces the object directly using thePoint()
function. The second uses a WKT representation converted to a Point
with GeomFromText()
.
mysql> SELECT ST_X(ST_GeomFromText(‘POINT(15 20)’));
±--------------------------------------+
| ST_X(ST_GeomFromText(‘POINT(15 20)’)) |
±--------------------------------------+
| 15 |
±--------------------------------------+
-
A
LineString
有四个点:点和点直接由逗号分开
-
A
带有一个外部圈和一个内部圈的Polygon
-
多点:
在5.7.9中,空间函数例如
ST_MPointFromText()
and ST_GeomFromText()
接受WKT格式化的MutilPoint数值中使用圆括号把点包裹起来.例如下面两个函数调用都是有效的。但是,在5.7.9之前的版本,第二种方式会产生错误: 在5.7.9中,输出的MultiPoint值会使用圆括号把每个点包裹起来
5.7.9之前的输出不会带有括号
-
A
MultiLineString
with two LineString
values: -
A
MultiPolygon
with two Polygon
values: -
A
GeometryCollection
consisting of two Point
values and one LineString
:
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
这个序列由以下组件组成:
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 TABLE
ALTER TABLE中
. 空间列在 MyISAM
, InnoDB
, NDB
, and ARCHIVE
-
使用
CREATE TABLE
语法创建一个带有空间列的表 -
使用
ALTER TABLE
语法添加或者删除一个表中的空间列
12.5.3.3 填充Populating Spatial Columns
创建空间列之后,你可以填充进去空间数据。数值必须存储为内部几何格式的值。但是你可以转换成
-
直接在
INSERT
语句中执行转换
SET @g = ‘POINT(1 1)’;
INSERT INTO geom VALUES (ST_GeomFromText(@g));
-
在
INSERT
之前执行转换
下面的例子插入了更加复杂的几何数据到表中
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));
前面的语句使用了