Shapefile导入MySQL
1. 概述
Shapefile是常用的空间数据文件格式,MySQL是常用的关系型数据库
MySQL遵从OpenGIS联盟(OGC)的规范,MySQL实施了空间扩展,更详细的信息可以参考:
-
MySQL :: MySQL 8.0 Reference Manual :: 11.4 Spatial Data Types
-
中文版,内容部分过时:19.1. 前言_MySQL 中文文档 (mysqlzh.com)
ogr2ogr是GDAL下的一个子模块,可用于在文件格式之间转换简单要素数据,具体可参考:
ogr2ogr支持将ESRI Shapefile转换为数据库文件(如MySQL)
本文使用ogr2ogr将ESRI Shapefile导入MySQL
2. 环境准备
GDAL的下载参考:
参考这篇文章:
QGIS安装目录的bin文件夹下自带了ogr2ogr,笔者这里使用的是QGIS下的ogr2ogr
关于Shapefile文件,笔者使用的是GeoServer提供的美国各州的行政区划数据,下载地址:
数据的大致信息如下:
MySQL数据库版本为为5.7.34
这里笔者使用Docker安装(任何安装方式都行):
docker pull mysql:5.7.34
运行MySQL镜像:
docker run --name mysql-5.7.34 -p 3306:3306 -e MYSQL_ROOT_PASSWORD="root" -d mysql:5.7.34
3. 导入数据
3.1 创建数据库
连接到MySQL并创建一个数据库
笔者这里是进入Docker容器内部登录MySQ:
mysql -u root -p
回车输入密码进行登录
创建数据库:
CREATE DATABASE IF NOT EXISTS test_db;
查询现有数据库确保创建成功:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test_db |
+--------------------+
5 rows in set (0.00 sec)
3.2 导入shp
参考官方的导入示例和其他博客:
一个简单的导入语句为:
ogr2ogr –f MySQL MySQL:database_name,host=localhost,user=database_username, password=database_password path/to/shapefile -nln datatable_name -update -overwrite -lco engine=MYISAM
具体的参数信息查询:
笔者使用以下语句导入:
ogr2ogr -f MySQL MySQL:test_db,user=root,password="root" E:\tmp\shapefiles\states.shp -update -overwrite
如果顺利的话已经导入成功,可以查询数据库验证一下:
mysql> use test_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| geometry_columns |
| spatial_ref_sys |
| states |
+-------------------+
3 rows in set (0.00 sec)
查询一下数据:
mysql> select OGR_FID, state_name from states limit 10;
+---------+----------------------+
| OGR_FID | state_name |
+---------+----------------------+
| 1 | Illinois |
| 2 | District of Columbia |
| 3 | Delaware |
| 4 | West Virginia |
| 5 | Maryland |
| 6 | Colorado |
| 7 | Kentucky |
| 8 | Kansas |
| 9 | Virginia |
| 10 | Missouri |
+---------+----------------------+
10 rows in set (0.00 sec)
可以在图形化的数据库管理软件中查看空间数据,笔者这里使用的是DBeaver:
可以看到shapefile 导入完成
注意:
- 数据集中含有中文的注意数据库编码格式
- 数据库IP和端口与默认不同的请配置相应的参数
4. 参考资料
[1]Insert Shapefile in MySql as Spatial Data - (igismap.com)
[2]19.1. 前言_MySQL 中文文档 (mysqlzh.com)
[3]MySQL :: MySQL 8.0 Reference Manual :: 11.4 Spatial Data Types