当前位置: 首页 > 文档资料 > MySQL 中文手册 >

19.4. 创建具备空间功能的MySQL数据库

优质
小牛编辑
123浏览
2023-12-01
19.4.1. MySQL空间数据类型
19.4.2. 创建空间值
19.4.3. 创建空间列
19.4.4. 填充空间列
19.4.5. 获取空间数据
本节介绍了可用于表示MySQL中空间数据的数据类型,以及用于创建和检索空间值的函数。

19.4.1. MySQL空间数据类型

MySQL具有与OpenGIS类对应的数据类型。某些类型只能保存单个几何值:

·GEOMETRY

·POINT

·LINESTRING

·POLYGON

GEOMETRY能够保存任何类型的几何值。其他的单值类型POINT、LINESTRING以及POLYGON只能保存特定几何类型的值。

其他数据类型能保存多个值:

·MULTIPOINT

·MULTILINESTRING

·MULTIPOLYGON

·GEOMETRYCOLLECTION

GEOMETRYCOLLECTION能保存任意类型的对象集合。对于其他集合类型,MULTIPOINT、MULTILINESTRING、MULTIPOLYGON和GEOMETRYCOLLECTION,仅限于具有特定几何类型的集合成员。

19.4.2. 创建空间值

19.4.2.1. 使用WKT函数创建Geometry(几何)值
19.4.2.2. 使用WKB函数创建Geometry(几何)值
19.4.2.3. 使用MySQL函数创建几何值
在本节中,介绍了使用OpenGIS标准中定义的WKT和WKB函数创建空间值的方法,以及使用相应MySQL函数的方法。

19.4.2.1. 使用WKT函数创建Geometry(几何)值

MySQL提供了众多以WKT表达式、以及可选的空间参考系ID(SRID)为输入参数的函数。它们将返回对应的几何对象。

GeomFromText()接受任何几何类型的WKT作为其第1个参量。在实施方案中也提供了与类型相关的构造函数,用于构造每一种几何类型的几何值。

  • GeomCollFromText(wkt[,srid]) , GeometryCollectionFromText(wkt[,srid])

    使用其WKT表示和SRID构造GEOMETRYCOLLECTION值。

  • GeomFromText(wkt[,srid]) , GeometryFromText(wkt[,srid])

    使用其WKT表示和SRID构造任何类型的几何值。

  • LineFromText(wkt[,srid]) , LineStringFromText(wkt[,srid])

    使用其WKT表示和SRID构造LINESTRING值。

  • MLineFromText(wkt[,srid]) , MultiLineStringFromText(wkt[,srid])

    使用其WKT表示和SRID构造MULTILINESTRING值。

  • MPointFromText(wkt[,srid]) , MultiPointFromText(wkt[,srid])

    使用其WKT表示和SRID构造MULTIPOINT值。

  • MPolyFromText(wkt[,srid]) , MultiPolygonFromText(wkt[,srid])

    使用其WKT表示和SRID构造MULTIPOLYGON值。

  • PointFromText(wkt[,srid])

    使用其WKT表示和SRID构造POINT值。

  • PolyFromText(wkt[,srid]) , PolygonFromText(wkt[,srid])

    使用其WKT表示和SRID构造POLYGON值。

OpenGIS规范还介绍了用于构造Polygon或MultiPolygon值的可选函数,这些值基于环和封闭LineString值集合的WKT表达式。这些值可以相交。MySQL未实施下述函数:

  • BdMPolyFromText(wkt,srid)

    以包含已关闭LineString值任意集合的WKT格式,从MultiLineString值构造MultiPolygon值。

  • BdPolyFromText(wkt,srid)

    以包含已关闭LineString值任意集合的WKT格式,从MultiLineString值构造Polygon值。

19.4.2.2. 使用WKB函数创建Geometry(几何)值

MySQL提供了众多函数,它们将包含WKT表达式、或可选的空间参考系统ID(SRID)的BLOB作为输入参数。它们返回对应的几何对象。

GeomFromWKB()接受任何几何类型的WKB作为其第1个参量。在实施方案中也提供了与类型相关的构造函数,用于构造每一种几何类型的几何值。
  • GeomCollFromWKB(wkb[,srid]) , GeometryCollectionFromWKB(wkb[,srid])

    使用其WKB表示和SRID构造GEOMETRYCOLLECTION值。

  • GeomFromWKB(wkb[,srid]) , GeometryFromWKB(wkb[,srid])

    使用其WKB表示和SRID构造任意类型的几何值。

  • LineFromWKB(wkb[,srid]) , LineStringFromWKB(wkb[,srid])

    使用其WKB表示和SRID构造LINESTRING值。

  • MLineFromWKB(wkb[,srid]) , MultiLineStringFromWKB(wkb[,srid])

    使用其WKB表示和SRID构造MULTILINESTRING值。

  • MPointFromWKB(wkb[,srid]) , MultiPointFromWKB(wkb[,srid])

    使用其WKB表示和SRID构造MULTIPOINT值。

  • MPolyFromWKB(wkb[,srid]) , MultiPolygonFromWKB(wkb[,srid])

    使用其WKB表示和SRID构造MULTIPOLYGON值。

  • PointFromWKB(wkb[,srid])

    使用其WKB表示和SRID构造POINT值。

  • PolyFromWKB(wkb[,srid]) , PolygonFromWKB(wkb[,srid])

    使用其WKB表示和SRID构造POLYGON值。

OpenGIS规范还介绍了用于构造Polygon或MultiPolygon值的可选函数,这些值基于环和封闭LineString值集合的WKB表达式。这些值可以相交。MySQL未实施下述函数:

  • BdMPolyFromWKB(wkb,srid)

    以包含已关闭LineString值任意集合的WKB格式,从MultiLineString值构造MultiPolygon值。

  • BdPolyFromWKB(wkb,srid)

    以包含已关闭LineString值任意集合的WKB格式,从MultiLineString值构造Polygon值。

19.4.2.3. 使用MySQL函数创建几何值

注释:MySQL未实施本节所列的函数。

MySQL为创建几何WKB表达式提供了有用的函数集合。本节介绍的函数是对OpenGIS规范的MySQL扩展。这些函数的结果是包含几何值(无SRID)的BLOB值。这些函数的结果可被GeomFromWKB()函数系列中任意函数的第1个参量取代。
  • GeometryCollection(g1,g2,...)

    构造WKBGeometryCollection。如果任何参量不是构造良好的几何对象WKB表达式,返回值为NULL。

  • LineString(pt1,pt2,...)

    从多个WKB Point参量构造WKBLineString值。如果任何参量不是WKBPoint,返回值为NULL。如果Point参量的数目小于2,返回值为NULL。

  • MultiLineString(ls1,ls2,...)

    使用WKBLineString参量构造WKBMultiLineString值。如果任何参量不是WKBLineString,返回值为NULL。

  • MultiPoint(pt1,pt2,...)

    使用WKBPoint参量构造WKBMultiPoint值。如果任何参量不是WKBPoint,返回值为NULL。

  • MultiPolygon(poly1,poly2,...)

    从一组WKBPolygon参量构造WKBMultiPolygon值。如果任何参量不是WKBPolygon,返回值为NULL。

  • Point(x,y)

    使用其坐标构造WKB Point。

  • Polygon(ls1,ls2,...)

    从多个WKBLineString参量构造WKBPolygon值。如果任何参量未表示为LinearRing的WKB形式(即,非封闭和简单LineString),返回值为NULL。

19.4.3. 创建空间列

MySQL提供了为几何类型创建空间列的标准方法,例如,使用CREATE TABLE或ALTER TABLE。目前,仅对MyISAM标支持空间列。

·使用CREATE TABLE语句创建具有空间列的表:

·mysql> CREATE TABLE geom (g GEOMETRY);
·Query OK, 0 rows affected (0.02 sec)

·使用ALTER TABLE语句在已有表中增加空间列,或将空间列从已有表中删除:

·mysql> ALTER TABLE geom ADD pt POINT;
·Query OK, 0 rows affected (0.00 sec)
·Records: 0  Duplicates: 0  Warnings: 0
·mysql> ALTER TABLE geom DROP pt;
·Query OK, 0 rows affected (0.00 sec)
·Records: 0  Duplicates: 0  Warnings: 0