1. 概述

现如今,各种应用基本都采用了数据库来存储数据,今天咱们就来讲一下如何将数据库中的带地理坐标的数据表数据在地图上直接显示出来,不用进行数据转换哟,操作简单,一般人都能学会哈。

2. 实操方法

数据库一般分为普通关系型数据库、地理空间数据库。

普通关系型数据库,如MySQL、PostgreSQL、SQL Server等。

地理空间数据库,该数据库支持地理要素的存储,支持将地理空间要素(如点要素、线要素、面要素)直接作为一种类型存于数据库中,并支持空间运算操作。地理空间数据库一般是在普通关系型数据库的基础上加入空间扩展模块,如带空间扩展的MySQL数据库(Mysql Spatial extension)、带空间扩展的Oracle数据库(Oracle Spatial)、带空间扩展的PostgreSQL数据库(PostGIS)、带空间扩展的sqlite(Spatialite)等,这种扩展后的空间数据库,就是在原有的关系型数据库基础上,加载扩展模块,然后就能支持地理要素的直接存储,并支持空间操作,如查询最近的要素、缓冲区分析、最短路径分析等。

一般常用的地理信息软件都支持读取地理空间数据库,可以将存储的地理数据,直接显示出来,这些软件如ArcGIS、QGIS、超图等,这个就不介绍了。

但是,如何将普通关系型数据库中的地理坐标数据表数据在地图上展现出来,这个一般人还真不会,因此,本文着重介绍普通关系型数据库中存储的地理坐标数据,如何在地图上直接显示出来。

r5oU6U.jpg

r5oH9P.jpg

r5ozAs.png

假设有一个带地理坐标数据的树木信息表,表名为tree,字段有:id, x, y, tree_type,下面以常用的ArcGIS/QGIS软件为例来说明如何直接显示坐标数据。

2.1 ArcGIS直接显示地理坐标数据表

ArcGIS是一款功能强大的商用地理信息软件,软件正常安装后,需要购买授权才能使用,本文示例采用ArcGIS 10.2版本。
r5TFjU.jpg

点击菜单“File”,“Add Data”,“Add XY Data”,Look in选择“Database Connections”,点击“Add Database Connection”。进入数据库连接对话框,可选择不同的数据库DB2/SQL Server/PostgreSQL等,有点遗憾,不支持MySQL。选择要连接的数据库类型,填写相应的参数,即可。不过,这种数据库连接方式要求先安装相应数据库的客户端软件才可以。我这边本机没有安装这些数据库客户端软件,所以就不进行详细说明了。以下采用Excel中的坐标文件显示为例(可先将数据库中带坐标的表导出为CSV文件)。

点击菜单“File”,“Add Data”,“Add XY Data”,Look in选择“Folder Connections”,右边按钮“Connect to Folder”,选择CSV所在的目录,选择要显示的CSV文件“tree.csv”,XY字段会自动检测并填入,若不正确可以手工选择XY所在的字段。确定后,该数据表则作为矢量图层加入,可以像其它正常矢量图层一样显示、操作。

r5TDKS.png

2.2 QGIS直接显示地理坐标数据表

QGIS是一款开源的地理信息软件,功能与ArcGIS接近,在Windows、Mac、Linux、BSD和手机上均能安装使用,软件安装容易、使用方便。
r5Tf2V.jpg

在QGIS中显示地理数据的方法为:将数据库带地理坐标的表作为虚拟图层展示,并在SQL中用MakePoint函数将坐标动态生成地理要素geomettry。具体操作方法如下:
第一步:将带地理坐标的图层作为数据表加入到图层中。

点击菜单“layer”, “Data Source Manager”,左边选择“Vector”,右边“Source Type”选择“Database”,编码Encoding选择“UTF-8”,数据库类型“Type”选择“MySQL”,然后点击“New”按钮,新建一个MySQL连接,输入名称Name、主机Host、数据库Database、端口Port、认证信息如用户名、密码等,点击数据库测试按钮“Test Connection”,若参数配置正确,则会连接成功,否则请检查数据库连接参数。连接成功后,点击“Add”按钮,选择要加入图层的表,在我这个例子中选择“tree”,点击“Close”关闭数据源对话框。
此时,图层Layers中已经有刚才加入的数据表,该表还只是列表形式,无法在地图上显示出坐标。
r57FPI.png

第二步:将数据表生成虚拟矢量图层显示
点击菜单“layer”, “Add Layer”,“Add/Edit Virtual Layer”, 点击“Import”,选择刚才的这个数据库图层确认加入,此时该数据表会加入Embeded Layers的列表中,双击这一行中的Local name,进入修改模式,将该名称修改为简单的名称如“tree_table”,便于下一步使用。
然后在Query面板中,输入相应的SQL语句,如select id,make_point(x,y) as geometry, tree_type from tree_table,表示从上面的数据库中生成带地理要素geometry的虚拟图层,该地理要素由数据库中的x,y列形成点地理要素。最后点击“Add”将该虚拟图层加入Layers列表,此时该图层即可像正常的矢量图层显示出数据表中的坐标数据了,也可调整其符号显示等,与正常的矢量图层一样操作了。

r571Gq.png

rI9N3F.png

对于不是直接区分出的X、Y字段,可以采用SQL函数进行分离即可。

到这里,这个MySQL中的带地理坐标的数据图层,就正常在地图上显示出来了。按照这个处理流程,其它MSSQL, PostgreSQL, Oracle等图层的地理坐标也可以显示出来。

另外,这个过程熟悉后,也可以略去第一步,直接从第二步加入图层,在Embeded Layers中手工编辑定义好数据源行,再在Query面板中定义好虚拟图层,加入虚拟图层。

矢量地图有了,但背景地图如何展示呢?如显示在线中国地图、离线中国地图,请听下回分解 :)


3SWorld
9 声望1 粉丝

产品经理