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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略