IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL8.0地理空间数据库的QGIS应用浅析 -> 正文阅读

[大数据]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软件应用技术、地图学概念、地理空间数据概念等。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:13:37  更:2021-09-06 11:15:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:34:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码