失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > MySQL8.0地理空间数据库的QGIS应用浅析

MySQL8.0地理空间数据库的QGIS应用浅析

时间:2020-11-02 18:48:39

相关推荐

MySQL8.0地理空间数据库的QGIS应用浅析

目录

一、认识空间数据

二、认识空间数据库

三、MySQL8.0空间数据库

点数据建表

线数据建表

面数据建表

添加数据

四、QGIS中使用MySQL作为数据源

五、总结

本文的概念性内容均为作者的个人理解,仅供参考。本文适合软件、地信技术人员项目实施时做参考,不适合学术研究参考。

一、认识空间数据

个人任务空间数据是计算机世界对地理实体的抽象、建模、表达。地理实体可分为点、线、面、体四种。

一般来说,描述地理空间的数据都包含空间坐标与空间坐标系,不同于平面直角坐标系。

空间坐标系是对地球表面的数学表达。由于地球是不规则的椭圆,所以描述地球的数学椭球体有很多,这个可以称为大地坐标系统。如:WGS-1984、XIAN-1980、CGCS-2000等。

为了在某一个区域内使用平面坐标来表示地理实体的位置,需要将地球表面上的点的坐标(即经纬度)转换为平面坐标,这个平面坐标称为投影坐标系。由于地球是不可伸展的球面,所以无法使用一种投影方式完成针对全球各地的“坐标转换”,所以出现了针对地球不同位置使用不同的投影方式,以求最大限度的使平面与球面近似。

OGC标准中,用SRID来作为坐标系统的唯一ID

空间数据可以使用OGC标准的WKT字符串来表示。可以参考如下网址:/doc_ogcstd/ogc_standard/ch02_chapter1/chapter.html#wkt

除了空间位置以外,空间数据一般也带有属性数据,这个属性数据类似于关系型数据库中的表。

二、认识空间数据库

个人认为,空间数据库简言之就是存储空间数据的数据库,理论上具备常见数据库的一切特征及功能,表现形式上略有不同,一般来说,空间数据库存储的空间数据是一种特殊格式的数据。由于空间数据结构的内容较多,这里不展开说。从项目实施上来说,理解WKT字符串就可以胜任大部分工作。

三、MySQL8.0空间数据库

根据MySQL的官方文档,我们可以知道它目前支持的空间数据类型有:

1、GEOMETRY

2、POINT

3、LINESTRING

4、POLYGON

5、MULTIPOINT

6、MULTILINESTRING

7、MULTIPOLYGON

8、GEOMETRYCOLLECTION

个人认为,在QGIS中使用较多的还是POINT、LINESTRING、POLYGON及MULTIPOINT、MULTILINESTRING、MULTIPOLYGON。所以我们可以明确,目前的MySQL空间数据库基本满足二维及以下空间的矢量空间数据的存储。

下面结合这几种数据类型叙述一下MySQL8.0中的空间数据表的建立。

点数据建表

/*点*/CREATE TABLE geom_point (id int NOT NULL AUTO_INCREMENT,p POINT SRID 4326,PRIMARY KEY (`id`))ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;/*点集*/CREATE TABLE geom_mpoint (id int NOT NULL AUTO_INCREMENT,p MULTIPOINT SRID 4326,PRIMARY KEY (`id`))ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

其中字段p就是空间数据字段,经测试,在QGIS中使用MySQL空间数据库,需要指定SRID,否则在QGIS中添加数据到MySQL的时候会报错。这里的SRID是4326,代表WGS-1984大地坐标系。

线数据建表

/*线*/CREATE TABLE geom_line (id int NOT NULL AUTO_INCREMENT,p LINESTRING SRID 4326,PRIMARY KEY (`id`))ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;/*线集*/CREATE TABLE geom_mline (id int NOT NULL AUTO_INCREMENT,p MULTILINESTRING SRID 4326,PRIMARY KEY (`id`))ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

面数据建表

/*面*/CREATE TABLE geom_polygon (id int NOT NULL AUTO_INCREMENT,p POLYGON SRID 4326,PRIMARY KEY (`id`))ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;/*面集*/CREATE TABLE geom_mpolygon (id int NOT NULL AUTO_INCREMENT,p MULTIPOLYGON SRID 4326,PRIMARY KEY (`id`))ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

添加数据

insert into 表名 (空间字段) values (ST_GeometryFromText(WKT字符串) );

这里表示的是,向空间字段插入数据的SQL语句,一般来说,还伴随着其他非空间字段的属性一并插入,这里省略了。相信对于属性SQL的数据库同仁来说,很好理解。这里用到了ST_GeometryFromText这个函数,这个函数可以将WKT字符串转换为MySQL空间字段。

例子:

insert into testpoint (geo) values (ST_GeometryFromText('POINT(31.80406 117.22137)') );

向testpoint插入一行记录,空间字段为geo,插入数据类型为单点。

查询数据:

select id,ST_AsText(p) from geom_mpoint;

ST_AsText函数可以将空间字段转换为WKT字符串。

四、QGIS中使用MySQL作为数据源

QGIS支持多种数据源的空间数据,其中矢量数据的数据源支持MySQL作为服务。打开QGIS,主面板选择图层-添加矢量图层-单选框选择数据库-类型选择MySQL。

单击新建,新建数据源。以下是一个填写示例:

单击添加后,可以选择需要添加的图层。

这里全部添加。为了便于演示,这里还加入了天地图的在线wmts底图,选择一块地方。

这里,我们可以利用编辑工具,快速的添加矢量数据到空间数据库。添加后可以使用查询语句观察WKT数据的格式,加强对WKT字符的理解。

右键编辑-添加点要素-保存。

数据库查询结果:

可以看到经纬度坐标,对应的是非洲的点。

再看点集:添加点的操作一样。使用合并选中要素,合并多个点之后就是点集。

查询结果:

其他要素操作类似,这里放几张图吧。

五、总结

MySQL8.0中包含了空间数据库的功能,该功能可以存储二维空间及以下的矢量空间数据。部署MySQL数据库服务,完成空间数据库的服务端的操作、利用市面上的软件或者自研软件充当客户端,即可基本构成一个矢量空间数据库系统。要掌握好MySQL空间数据库的运用,需要了解数据库技术、GIS软件应用技术、地图学概念、地理空间数据概念等。

如果觉得《MySQL8.0地理空间数据库的QGIS应用浅析》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。