Shapefile导入MySQL

1. 概述

Shapefile是常用的空间数据文件格式,MySQL是常用的关系型数据库

MySQL遵从OpenGIS联盟(OGC)的规范,MySQL实施了空间扩展,更详细的信息可以参考:

ogr2ogr是GDAL下的一个子模块,可用于在文件格式之间转换简单要素数据,具体可参考:

ogr2ogr支持将ESRI Shapefile转换为数据库文件(如MySQL)

本文使用ogr2ogr将ESRI Shapefile导入MySQL

2. 环境准备

GDAL的下载参考:

参考这篇文章:

QGIS安装目录的bin文件夹下自带了ogr2ogr,笔者这里使用的是QGIS下的ogr2ogr

关于Shapefile文件,笔者使用的是GeoServer提供的美国各州的行政区划数据,下载地址:

数据的大致信息如下:

image-20220731170909943

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:

image-20220731180159072

可以看到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

[4]ogr2ogr — GDAL documentation

[5]将SHP导入MySQL中 - ParamousGIS - 博客园 (cnblogs.com)

posted @ 2022-07-31 21:15  当时明月在曾照彩云归  阅读(989)  评论(1编辑  收藏  举报