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
[4]ogr2ogr — GDAL documentation
[5]将SHP导入MySQL中 - ParamousGIS - 博客园 (cnblogs.com)
Shapefile导入MySQL的更多相关文章
- 在Linux环境下,将Solr部署到tomcat7中,导入Mysql数据库数据, 定时更新索引
什么是solr solr是基于Lucene的全文搜索服务器,对Lucene进行了扩展优化. 准备工作 首先,去下载以下软件包: JDK8:jdk-8u60-linux-x64.tar.gz TOMCA ...
- mysql安装和mysql图形界面安装以及文本文件导入mysql
本人大一大二一直使用windows系统,被微软爸爸给惯坏了,一看到cmd命令行就吓尿.现在用ubuntu,每一个操作都是语句,也是得到锻炼(个jb). ubuntu安装mysql和python代码 s ...
- (转) PowerDesigner逆向工程导入MYSQL数据库总结
PowerDesigner逆向工程导入MySQL数据库总结 由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 1. 安装MYS ...
- 使用Python 将shapefile导入mongodb
使用Python 将shapefile导入mongodb 随着big data时代的到来,各个行业都在考虑能不能把big data的思路.方法引入进来,GIS行业也不能免俗. 下面就介绍一下如何将sh ...
- 数据库是.frm,.myd,myi备份如何导入mysql (转)
今天找了个案例,琢磨了半天,才分析大概出来,数据库是.frm,.myd,myi备份,不会导入mysql,到网上找了些资料,导入成功. 首先说一下这几种文件是干什么的,*.frm是描述了表的结构,*.M ...
- 将Excel数据导入mysql数据库的几种方法
将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面 ...
- python2.7 爬虫_爬取小说盗墓笔记章节及URL并导入MySQL数据库_20161201
1.爬取页面 http://www.quanshu.net/book/9/9055/ 2.用到模块urllib(网页下载),re正则匹配取得title及titleurl,urlparse(拼接完整ur ...
- piap.excel 微软 时间戳转换mssql sql server文件时间戳转换unix 导入mysql
piap.excel 微软 时间戳转换mssql sql server文件时间戳转换unix 导入mysql 需要不个mssql的sql文件导入mysql.他们的时间戳格式不同..ms用的是自定义的时 ...
- 使用MySQL Migration Toolkit快速将Oracle数据导入MySQL[转]
使用MySQL Migration Toolkit快速将Oracle数据导入MySQL上来先说点废话本人最近在学习一些数据库方面的知识,之前接触过Oracle和MySQL,最近又很流行MongoDB非 ...
- 用命令行导出和导入MySQL数据库
php 用命令行导出和导入MySQL数据库 命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录如我输入的命令行:cd C:\Program Files ...
随机推荐
- 《HTTP权威指南》– 6.代理
代理的概念: Web代理服务器是网络的中间实体.位于客户端和服务器之间,扮演"中间人"的角色,在各端点之间来回传送HTTP报文. 私有和共享代理: 代理服务器可以是某个客户端专用的 ...
- 使用NPOI core插入图片
闲的无聊,封装一个NPOI core插入图片,下面贴上代码,有注释,我就不讲解了 public class ExcelHelper { /// <summary> /// excel插入图 ...
- Jmeter之逻辑控制器---while控制器
while控制器与编程语言中的while语句一样,当条件为真时继续执行,不为真时则跳出while循环体,不再执行. while控制器相对于循环控制器来说多了个条件判断,下面为while控制器使用案例. ...
- 重学c#系列—— 反射深入一点点[三十三]
前言 在上一章中介绍了什么是反射: https://www.cnblogs.com/aoximin/p/16440966.html 正文 上一节讲述反射的基本原理和为什么要用反射,还用反射的优缺点这些 ...
- Python实验报告(第9章)
实验9:异常处理及程序调试 一.实验目的和要求 1.了解代码异常知识: 2.掌握异常处理的try-except语句.try-except-else语句.try-except-finally语句.rai ...
- css、js 缓存清除
此种方式完美达到了清除缓存的效果 css引入标签可在一个引号内完成,js引入标签由于解析原因需要将两个标签拆开再组 使用:按照此格式,放在原 <link /> 或 <script&g ...
- s2-005
漏洞名称 (CVE-2010-1870) - XWork ParameterInterceptors旁路允许远程命令执行 利用条件 Struts 2.0.0 - Struts 2.1.8.1 漏洞原理 ...
- [Leetcode] 寻找数组的中心索引
题目 代码 class Solution { public: int pivotIndex(vector<int>& nums) { int right=0; for(auto i ...
- Lspatch使用
前言 xp模块可以使用户获得应用原本所没有的功能. 使用模块需要修改应用.对于Root用户来说,使用Lsposed是个不错的选择,也方便. 但是大多数用户没有将手机Root. 所以Lsposed的开发 ...
- margin-left:auto的妙用
问题描述 如上图所示,我们需要将上述三个标签右对齐,就像上图是要达到的效果,一般采用的方法是对每个标签设置margin-left这样就需要设置三个值. 当文字变长或者变成英文的时候又需要重新设置,否则 ...