MySQL5.6空间扩展(原创)

MySQL空间扩展

MySQL空间扩展支持几何数据的存储,生成,分析,优化。

1、空间数据类型(存储)

   MySQL支持以下数据类型:

   Geometry:可以存储所有的几何类型

   Point:简单点

   LINESTRING:简单线

   POLYGON:简单面

   MULITIPOINT:多点

   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`  geometry NOT NULL ,

PRIMARY KEY (`ID`)

)

ENGINE=MyISAM

DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci

CHECKSUM=0

ROW_FORMAT=DYNAMIC

DELAY_KEY_WRITE=0

;

插入数据:

insert into t_geo_test select fid,geomfromtext(shape) from 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空间相关函数一览表

The following table lists each spatial function and provides a short description of each one.

Name    Description

1、Area() Return Polygon or MultiPolygon area

2、AsBinary(), AsWKB() Convert from internal geometry format to WKB

3、AsText(), AsWKT() Convert from internal geometry format to WKT

4、Buffer() Return geometry of points within given distance from geometry

5、Centroid() Return centroid as a point

6、Contains() Whether MBR of one geometry contains MBR of another

7、Crosses() Whether one geometry crosses another

8、Dimension() Dimension of geometry

9、Disjoint() Whether MBRs of two geometries are disjoint

10、EndPoint() End Point of LineString

11、Envelope() Return MBR of geometry

12、Equals() Whether MBRs of two geometries are equal

13、ExteriorRing() Return exterior ring of Polygon

14、GeomCollFromText(),

15、GeometryCollectionFromText()

16、Return geometry collection from WKT

17、GeomCollFromWKB(),

18、GeometryCollectionFromWKB()

19、Return geometry collection from WKB

20、GeometryCollection() Construct geometry collection from geometries

21、GeometryN() Return N-th geometry from geometry collection

22、GeometryType() Return name of geometry type

23、GeomFromText(),

24、GeometryFromText()

25、Return geometry from WKT

26、GeomFromWKB(),

27、GeometryFromWKB()

28、Return geometry from WKB

29、GLength() Return length of LineString

30、InteriorRingN() Return N-th interior ring of Polygon

31、Intersects() Whether MBRs of two geometries intersect

32、IsClosed() Whether a geometry is closed and simple

33、IsEmpty() Placeholder function

34、IsSimple() Whether a geometry is simple

35、LineFromText(),

36、LineStringFromText()

37、Construct LineString from WKT

38、LineFromWKB(),

39、LineStringFromWKB()

40、Construct LineString from WKB

41、LineString() Construct LineString from Point values

42、MBRContains() Whether MBR of one geometry contains MBR of another

43、MBRDisjoint() Whether MBRs of two geometries are disjoint

44、MBREqual() Whether MBRs of two geometries are equal

45、MBRIntersects() Whether MBRs of two geometries intersect

46、MBROverlaps() Whether MBRs of two geometries overlap

47、MBRTouches() Whether MBRs of two geometries touch

48、MBRWithin() Whether MBR of one geometry is within MBR of another

49、MLineFromText(),

50、MultiLineStringFromText()

51、Construct MultiLineString from WKT

52、MLineFromWKB(),

53、MultiLineStringFromWKB()

54、Construct MultiLineString from WKB

55、MPointFromText(),

56、MultiPointFromText()

57、Construct MultiPoint from WKT

58、MPointFromWKB(),

59、MultiPointFromWKB()

60、Construct MultiPoint from WKB

61、MPolyFromText(),

62、MultiPolygonFromText()

63、Construct MultiPolygon from WKT

64、MPolyFromWKB(),

65、MultiPolygonFromWKB()

66、Construct MultiPolygon from WKB

67、MultiLineString() Contruct MultiLineString from LineString values

68、MultiPoint() Construct MultiPoint from Point values

69、MultiPolygon() Construct MultiPolygon from Polygon values

70、NumGeometries() Return number of geometries in geometry collection

71、NumInteriorRings() Return number of interior rings in Polygon

72、NumPoints() Return number of points in LineString

73、Overlaps() Whether MBRs of two geometries overlap

74、Point() Construct Point from coordinates

75、PointFromText() Construct Point from WKT

76、PointFromWKB() Construct Point from WKB

77、PointN() Return N-th point from LineString

78、PolyFromText(),

79、PolygonFromText()

80、Construct Polygon from WKT

81、PolyFromWKB(), PolygonFromWKB() Construct Polygon from WKB

82、Polygon() Construct Polygon from LineString arguments

83、SRID() Return spatial reference system ID for geometry

84、ST_Area() Return Polygon or MultiPolygon area

85、ST_AsBinary(), ST_AsWKB() Convert from internal geometry format to WKB

86、ST_AsText(), ST_AsWKT() Convert from internal geometry format to WKT

87、ST_Buffer() Return geometry of points within given distance from geometry

88、ST_Centroid() Return centroid as a point

89、ST_Contains() Whether one geometry contains another

90、ST_Crosses() Whether one geometry crosses another

91、ST_Difference() Return point set difference of two geometries

92、ST_Dimension() Dimension of geometry

93、ST_Disjoint() Whether one geometry is disjoint from another

94、ST_Distance() The distance of one geometry from another

95、ST_EndPoint() End Point of LineString

96、ST_Envelope() Return MBR of geometry

97、ST_Equals() Whether one geometry is equal to another

98、ST_ExteriorRing() Return exterior ring of Polygon

99、ST_GeomCollFromText(),

100、ST_GeometryCollectionFromText(),

101、ST_GeomCollFromTxt()

102、Return geometry collection from WKT

103、ST_GeomCollFromWKB(),

104、ST_GeometryCollectionFromWKB()

105、Return geometry collection from WKB

106、ST_GeometryN() Return N-th geometry from geometry collection

107、ST_GeometryType() Return name of geometry type

108、ST_GeomFromText(),

109、ST_GeometryFromText()

110、Return geometry from WKT

111、ST_GeomFromWKB(),

112、ST_GeometryFromWKB()

113、Return geometry from WKB

114、ST_InteriorRingN() Return N-th interior ring of Polygon

115、ST_Intersection() Return point set intersection of two geometries

116、ST_Intersects() Whether one geometry intersects another

117、ST_IsClosed() Whether a geometry is closed and simple

118、ST_IsEmpty() Placeholder function

119、ST_IsSimple() Whether a geometry is simple

120、ST_LineFromText(),

121、ST_LineStringFromText()

122、Construct LineString from WKT

123、ST_LineFromWKB(),

124、ST_LineStringFromWKB()

125、Construct LineString from WKB

126、ST_NumGeometries() Return number of geometries in geometry collection

127、ST_NumInteriorRing(),

128、ST_NumInteriorRings()

129、Return number of interior rings in Polygon

130、ST_NumPoints() Return number of points in LineString

131、ST_Overlaps() Whether one geometry overlaps another

132、ST_PointFromText() Construct Point from WKT

133、ST_PointFromWKB() Construct Point from WKB

134、ST_PointN() Return N-th point from LineString

135、ST_PolyFromText(),

136、ST_PolygonFromText()

137、Construct Polygon from WKT

138、ST_PolyFromWKB(),

139、ST_PolygonFromWKB()

140、Construct Polygon from WKB

141、ST_SRID() Return spatial reference system ID for geometry

142、ST_StartPoint() Start Point of LineString

143、ST_SymDifference() Return point set symmetric difference of two geometries

144、ST_Touches() Whether one geometry touches another

145、ST_Union() Return point set union of two geometries

146、ST_Within() Whether one geometry is within another

147、ST_X() Return X coordinate of Point

148、ST_Y() Return Y coordinate of Point

149、StartPoint() Start Point of LineString

150、Touches() Whether one geometry touches another

151、Within() Whether MBR of one geometry is within MBR of another

152、X() Return X coordinate of Point

153、Y() Return Y coordinate of Point

 

 

 

  

 

posted @ 2016-08-24 16:50  刘文涛  阅读(8142)  评论(0编辑  收藏  举报