MySQL空间扩展支持几何数据的存储,生成,分析,优化。
1、空间数据类型(存储)
MySQL支持以下数据类型:
Geometry:可以存储所有的几何类型
Point:简单点
LINESTRING:简单线
POLYGON:简单面
MULTIPOINT:多点
MULITILINESTRING:多线
MUILITIPOLYGON:很多方面
GEOMETRYCOLLECTION:任何几何集合
在创建表的时候可以根据需求选择合适的几何类型存储你的空间数据。
2、空间数据类型的生成
MySQ L支持WKB,WKT数据生成空间数据类型,提供如下函数:
GeomFromText(wtk [,srid)PointFromText LINESTRINGFROMTEXT ……
GeomFromWKB(wtk [,srid)GeomFromWKB GeomFromWKB ……
3、空间运算分析
MYSQL以函数的形式提供对空间运算的支持:
ST_Buffer ST_Contains ST_Distance ST_Intersects MBRIntersects ……..
4、优化
为了优化查询,MySQL提供空间索引支持,目前仅在MyISAM数据引擎下提供空间索引支持。
创建空间索引格式如下:
CREATE SPATIAL INDEX t_geo_test_sidx ON t_geo_test(SHAPE);
可以看到比普通索引多了一个关键字 Spatial,删除空间索引的语句与删除普通索引的语句是一样的。
5、测试
建表:
CREATE TABLE t_geo_test(
`ID` int(11)NOT NULL,
`SHAPE`几何不是NULL,
主键(`ID`)
)
ENGINE = MyISAM数据
DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci
CHECKSUM = 0
ROW_FORMAT = DYNAMIC
DELAY_KEY_WRITE = 0
;
插入数据:
插入到t_geo_test中选择fid,geomfromtext(shape)来自zjgis.g_bd_substation_p;
查询:
技术分享
通过SQL解释可以看到TYPE:ALL KEY:NULL 代表全表扫描
建索引:
CREATE SPATIAL INDEX t_geo_test_sidx ON t_geo_test(SHAPE);
技术分享
可以看到TYPE:range KEY:t_geo_tesx_sidx 表示使用了空间索引t_geo_tesx_sidx
在数据量比较大的时候,空间索引至关重要。
建索引前查询时间:
技术分享
建索引后查询时间:
技术分享
虽然数据不多(3500左右),查询耗时还是有所差距的。
6、附:MySQL空间相关函数一览表
下表列出了每个空间函数,并提供了每个空间函数的简短描述。
名称描述
1,Area()返回Polygon或MultiPolygon区域
2,AsBinary(),AsWKB()从内部几何格式转换为WKB
3,AsText(),AsWKT()从内部几何格式转换为WKT
4,Buffer()返回距离几何体给定距离内的点的几何
5,Centroid()以质心为点
6,Contains()一个几何的MBR是否包含另一个的MBR
7,Crosses()一个几何是否与另一个几何相交
8,Dimension()几何尺寸
9,Disjoint()两个几何的MBR是否不相交
10,EndPoint()LineString的结束点
11,Envelope()返回几何体的MBR
12,Equals()两个几何的MBR是否相等
13,ExteriorRing()返回Polygon的外环
14,GeomCollFromText(),
15,GeometryCollectionFromText()
16,从WKT返回几何图形集 Return geometry collection from WKT
17,GeomCollFromWKB(),
18,GeometryCollectionFromWKB()
19,从WKB返回几何集合 Return geometry collection from WKB
20,GeometryCollection()从几何构造几何集合
21,GeometryN()从几何集合中返回第N个几何
22,GeometryType()返回几何类型的名称
23,GeomFromText(),
24,GeometryFromText()
25,从WKT返回几何 Return geometry from WKT
26,GeomFromWKB(),
27,GeometryFromWKB()
28,从WKB返回几何 Return geometry from WKB
29,GLength()返回LineString的长度
30,InteriorRingN()返回Polygon的第N个内环
31,Intersects()两个几何的MBR是否相交
32,IsClosed()几何是否闭合且简单
33,IsEmpty()占位符功能
34,IsSimple()几何是否简单
35,LineFromText(),
36,LineStringFromText()
37,从WKT构造LineString Construct LineString from WKT
38,LineFromWKB(),
39 LineStringFromWKB()
40,从WKB构造LineString Construct LineString from WKB
41,LineString()从Point值构造LineString
42,MBRContains()一个几何的MBR是否包含另一个的MBR
43,MBRDisjoint()两个几何的MBR是否不相交
44,MBREqual()两个几何的MBR是否相等
45,MBRIntersects()两个几何的MBR是否相交
46,MBROverlaps()两个几何的MBR是否重叠
47,MBRTouches()两个几何的MBR是否接触
48,MBRWithin()一个几何的MBR是否在另一个几何的MBR内
49,MLineFromText(),
50,MultiLineStringFromText()
51,从WKT构造MultiLineString Construct MultiLineString from WKT
52,MLineFromWKB(),
53,MultiLineStringFromWKB()
54,从WKB构造MultiLineString
55,MPointFromText(),
56,MultiPointFromText()
57,从WKT构建MultiPoint
58,MPointFromWKB(),
59,MultiPointFromWKB()
60,从WKB构造MultiPoint
61,MPolyFromText(),
62,MultiPolygonFromText()
63,从WKT构造MultiPolygon
64,MPolyFromWKB(),
65,MultiPolygonFromWKB()
66,从WKB构造MultiPolygon
67,MultiLineString()根据LineString值构造MultiLineString
68,MultiPoint()从Point值构造MultiPoint
69,MultiPolygon()根据Polygon值构造MultiPolygon
70,NumGeometries()返回几何集合中的几何数
71,NumInteriorRings()返回Polygon内圈的数量
72,NumPoints()返回LineString中的点数
73,Overlaps()两个几何的MBR是否重叠
74,Point()从坐标构造点
75,PointFromText()从WKT构造Point
76,PointFromWKB()从WKB构造Point
77,PointN()从LineString返回第N个点
78,PolyFromText(),
79,PolygonFromText()
80,从WKT构建多边形
81,PolyFromWKB(),PolygonFromWKB()从WKB构造多边形
82,Polygon()从LineString参数构造多边形
83,SRID()返回几何的空间参考系统ID
84,ST_Area()返回Polygon或MultiPolygon区域
85,ST_AsBinary(),ST_AsWKB()从内部几何格式转换为WKB
86,ST_AsText(),ST_AsWKT()从内部几何格式转换为WKT
87,ST_Buffer()返回距离几何体给定距离内的点的几何
88,ST_Centroid()以质心为单位返回质心
89,ST_Contains()一个几何是否包含另一个几何
90,ST_Crosses()一个几何是否与另一个几何相交
91,ST_Difference()返回两个几何的点集差
92,ST_Dimension()几何尺寸
93,ST_Disjoint()一个几何是否与另一个几何不相交
94,ST_Distance()一个几何与另一个几何的距离
95,ST_EndPoint()LineString的结束点
96,ST_Envelope()返回几何的MBR
97,ST_Equals()一个几何是否等于另一个
98,ST_ExteriorRing()返回Polygon的外环
99,ST_GeomCollFromText(),
100,ST_GeometryCollectionFromText(),
101,ST_GeomCollFromTxt()
102,从WKT返回几何图形集
103,ST_GeomCollFromWKB(),
104,ST_GeometryCollectionFromWKB()
105,从WKB返回几何集合
106,ST_GeometryN()从几何集合中返回第N个几何
107,ST_GeometryType()返回几何类型的名称
108,ST_GeomFromText(),
109,ST_GeometryFromText()
110,从WKT返回几何
111,ST_GeomFromWKB(),
112,ST_GeometryFromWKB()
113,从WKB返回几何
114,ST_InteriorRingN()返回Polygon的第N个内环
115,ST_Intersection()两个几何的返回点集交集
116,ST_Intersects()一个几何是否与另一个几何相交
117,ST_IsClosed()几何是否闭合且简单
118,ST_IsEmpty()占位符函数
119,ST_IsSimple()几何是否简单
120,ST_LineFromText(),
121,ST_LineStringFromText()
122,从WKT构造LineString
123,ST_LineFromWKB(),
124,ST_LineStringFromWKB()
125,从WKB构造LineString
126,ST_NumGeometries()返回几何集合中的几何数
127,ST_NumInteriorRing(),
128,ST_NumInteriorRings()
129,返回多边形内圈的数量
130,ST_NumPoints()返回LineString中的点数
131,ST_Overlaps()一个几何是否与另一个几何重叠
132,ST_PointFromText()从WKT构造Point
133,ST_PointFromWKB()从WKB构造Point
134,ST_PointN()从LineString返回第N个点
135,ST_PolyFromText(),
136,ST_PolygonFromText()
137,从WKT构造多边形
138,ST_PolyFromWKB(),
139,ST_PolygonFromWKB()
140,从WKB构造多边形
141,ST_SRID()返回几何的空间参照系ID
142,ST_StartPoint()LineString的起始点
143,ST_SymDifference()返回点设置两个几何的对称差异
144,ST_Touches()一个几何是否接触另一个几何
145,ST_Union()两个几何的返回点集合并
146,ST_Within()一个几何是否在另一个几何中
147,ST_X()返回Point的X坐标
148,ST_Y()返回Point的Y坐标
149,StartPoint()LineString的起始点
150,Touches()一个几何体是否接触另一个几何体
151,Within()一个几何的MBR是否在另一个几何的MBR内
152,X()返回Point的X坐标
153,Y()返回Point的Y坐标