MySQL中地理位置数据扩展geometry的使用心得

  Geometry是所有此扩展中类型得基类,其他类型如Point,LineString,Polygon都是Geometry的子类。Geometry有一些属性,这些属性是所有其他几何类的共有属性:

  type: 类型(Point, LineString,...)

  SRID: 该值确定了用于描述定义几何对象的坐标空间的空间坐标系统,参考链接:https://www.cnblogs.com/Joetao/articles/2086846.html

  coordinates: 坐标值

  interior, boundary, exterior: interior是几何对象所展空间的部分,boundary是几何对象的边界,exterior是几何对象未占有的空间。

  MBR: 能够覆盖几何对象的最小矩形,可以想象成信封,它由几何对象中最大最小的坐标值组合而成:

    ((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))

  simple/nonsimple: 几何对象是否简单

  closed/not closed: 几何对象是否封闭

  dimension: 维度数(Point: 0, LineString: 1, Polygon: 2)

2.2 Point

  顾名思义就是点,有一个坐标值,没有长度、面积、边界。

2.3 LineString

  顾名思义就是线,由一系列点连接而成。

  如果线从头至尾没有交叉,那就是简单的(simple)

  如果起点和终点重叠,那就是封闭的(closed)

2.4 Polygon

  多边形。可以是一个实心平面形,即没有内部边界,也可以有空洞,类似纽扣。

2.5 MultiPoint, MultiLineString, MultiPolygon, GeometryCollection

  这4种类型都是集合类,是多个Point、LineString或Polygon组合在一起而成。

3. 几何对象在MySQL中的数据格式

  在MySQL中有3种表达几何对象的格式:

  -->WKT(文本格式)

  -->WKB(二进制格式)

  -->MySQL内部存储格式

  其中WKT格式简单易读,在这里着重介绍:

3.1 WKT

3.1.1 Point

  POINT(121.213342 31.234532)

  经度(longitude)在前,维度(latitude)在后,用空格分隔

3.1.2 LineString

  LINESTRING(121.342423 31.542423,121.345664 31.246790,121.453178 31.456862)

  点与点之间用逗号分隔;一个点中的经纬度用空格分隔,与POINT格式一致

3.1.3 Polygon

  POLYGON((121.342423 31.542423,121.345664 31.246790,121.453178 31.456862),(121.563633 31.566652,121.233565 31.234565,121.568756 31.454367))

  由一个表示外部边界的LineString和0个或多个表示内部边界的LineString组成,最简单的就是只有一个外边界的情况:POLYGON((0 0,10,0 10 10, 0 10))

3.1.4 集合类格式

  MULTIPOINT(0 0, 20 20, 60 60)

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

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

  GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))

4. 几何对象创建函数

  MySQL表中的几何对象有它自己的内部格式,我们需要将几何对象从方便输入的WKT格式转换为其内部格式,才能进行进一步的存储,计算等。

  这里主要讲解使用WKT格式的函数,对于集合类对象的创建函数由于较少使用也不再列举

  GeomFromText(wkt): 创建一个任何类型的几何对象Geometry

  PointFromText(wkt): 创建一个Point对象

  LineStringFromText(wkt): 创建一个LineString对象

  PolygonFromText(wkt): 创建一个Polygon对象

5. 创建支持空间几何对象的表

5.1 创建表

  以下是我创建的一个样例:

  CREATE TABLE `t_geo_test` (
    `ID` int(11) NOT NULL AUTO_INCREMENT,
    `NAME` varchar(64) NOT NULL,
    `SHAPE` geometry NOT NULL,
    PRIMARY KEY (`ID`)
  ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC

  这里的字段SHAPE就是存储几何对象的,类型为geometry,可以支持point,linestring,polygon等任意几何对象。

  引擎需要使用MyISAM。

  表结构:

  

5.2 插入数据

5.2.1 插入点数据

  INSERT INTO `t_geo_test` (ID,NAME,SHAPE) VALUES (1, 'P1', geomFromText('POINT(121.474103 31.232862)'));

5.2.2 插入线数据

  INSERT INTO `t_geo_test` (ID,NAME,SHAPE) VALUES (2, 'L1', geomFromText('LINESTRING(121.474103 31.232862,121.472462 31.231339,121.471984 31.232821)'));

5.2.3 插入多边形数据

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/918ad8dc1cc27b681a70d5c21bc500f9.html