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

目录

一、认识空间数据

二、认识空间数据库

三、MySQL8.0空间数据库

点数据建表

线数据建表

面数据建表

 添加数据

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

五、总结


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

一、认识空间数据

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

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

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

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

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

空间数据可以使用OGC标准的WKT字符串来表示。可以参考如下网址:https://www.osgeo.cn/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软件应用技术、地图学概念、地理空间数据概念等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我一时想不起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值