Shapefile文件批量导入数据库

一、序言

导航数据制作中元数据入库是非常重要的一个环节。本文简要介绍Shp文件批量导入数据库的思路及实现。


二、基本设计

2.1 方案

Shapefile导入数据库,常用数据库Postgresql、mysql、oracle等通用做法是先将shapefile转换成符合对应数据库的sql脚本(包含导入语句及数据记录),执行脚本将数据导入到对应数据库。

以Postgresql为例,Postgresql内置shp2pgsql.exe工具,支持将Shp数据转换成符合postgresql的sql脚本。使用psql执行生成的sql脚本(insert语句)将数据导入数据库。

        备注:本文中shp2pgsql、psql均已加入系统环境变量PATH,因此可直接使用命令而不需要指定绝对路径。

2.2 数据流


图 1 数据流示意图

三、详细设计

3.1 导入一个Shapefile 

3.1.1  Shapefile转储至SQL脚本

假设你已经拥有一个Shapefile格式文件集且文件存放在路径为SHP_PATH,目标SQL脚本路径为DEST_SQL。 如下图

SHP_PATH = F:\SHP 

DEST_SQL = F:\TEMP_SQL


 2  shapefile格式包含文件

Shp2pgsql命令将shapefile转成sql,命令如下(cmd环境):

  shp2pgsql -s 4326 -g the_geom -a -D -W utf-8 "SHP_PATH\Junction.dbf" junction > "DEST_SQL\Junction.sql"

Shp2pgsql基本用法:  shp2pgsql    shapfile.dbf   table > table.sql  //将shapfile.dbf 转储为table.sql

Shp2pgsql命令详细参数请参考帮助文档(在cmd环境下输入shp2pgsql 命令即可调出)。

--下文将详细介绍Junction.sql脚本内容--

打开sql脚本如下

图3 Junction.sql内容

SET CLIENT_ENCODEING TO UTF8;//设定客户端编码为UTF8

SET STANDARD_CONFIRMING_STRING TO ON; //打开标准字符串开关

BEGIN;

COPY "junction" ("id","name","name_eng","altname","altnam_eng","type","country","version",the_geom) FROM stdin; 

//(服务端)从标准输 入COPY数据至表单”junction“

Data Record  一条记录

\.

COMMIT;//提交

SQL脚本里实际只有一条COPY语句和数据记录集,Shp2pgsql命令本质就是将shapefile中数据转储到SQL脚本称为数据记录集,COPY命令即将数据集拷贝至数据库表单。由此可知,只需(在服务端)运行此脚本,即可将数据导入数据库。下文将详细介绍如何执行此脚本及数据流的具体过程。

3.1.2 运行SQL脚本

Psql是一个以终端为基础的 PostgreSQL 前端。它允许你交互地键入查询,把它们发出给 PostgreSQL, 然后看看查询的结果。另外,输入可以来自一个文件。注:此段描述来源于Postgresql帮助文档

>psql -h 192.168.10.19 -d test -U postgres -f "DEST_SQL\Junction.sql"  // 调用psql执行生成的sql文件,在数据库test中创建表单

psql -f filename 实际是打开文件,将命令逐行发送到服务端stdin。脚本内COPY命令指定stdin数据流,接着开始将文件中数据记录集发送到服务端stdin,服务端从stdin接收数据存储至数据库表单。注意:此过程要求数据库已创建,且已经存在表单junction。

以上过程就是一个shapefile导入数据库的完整过程。

3.2 批量导入Shapefiles      

重点,待续

四、注释

· 1.数据入库:数据导入数据库屏蔽物理存储格式,数据库可以方便的进行数据的增、删、改、查。

五、参考

http://www.cnblogs.com/naaoveGIS/p/4872189.html 《 Shp数据批量导入Postgresql工具的原理和设计



Logo

更多推荐