PostGIS数据转换工具

来源:百度文库 编辑:神马文学网 时间:2024/04/30 14:04:38
 Shapfile文件为ESRI公司的文件存储格式,并且得到了业界广泛的支持。Shapfile格式是一种简单的,用非拓朴关系的形式存储几何位置和地理特征的属性信息的格式。虽然GeoServer采用Shapfile文件可以快速的创建网上地图服务,但它的缺点确很明显:

  1、Shapefile只支持一个图层,在实际中没有意义。

  2、直接保用SHP文件不安全,Shapfile文件很容易被病毒或其他原因误删除。

  3、GeoServer中用Shapfile文件作数据源的效率是很低的。

  4、Shapfile中的汉字GeoServer不能解析,会出现乱码。

  5、数据库可以方便的对地理信息进行查询。

     用PostGIS管理空间数据

      PostGIS支持GIST空间索引(附录1)、规范窗体,能很大的提高处理效率。

  OGC格式只提供二维的几何体,且相关联的SRID从未深入的用于输入输出请求,PostGIS支持OpenGIS组织"Simple Features for SQL"规范指定的所有GIS对象和函数,并进行了扩展,格式是EWKB、EWKT,其中增加了对3DZ,3DM和4D 坐标系的支持(当然三维、四维数据的OGC标准还未完全制定),深入引进了SRID信息。

  空间数据表结构:PostGIS中存在两个必需的元数据表格, SPATIAL_REF_SYS(空间参考表格) 和 GEOMETRY_COLUMNS(几何体属性列),两个表用于存储空间数据库使用的坐标系统数字ID和文本描述。

  PostGIS的shp2pgsql命令可以将Shapfile直接导入到数据库中也可以导出为SQL文件,推荐先导出为SQL文件再将此文件在SQL运行窗口中执行可将数据导入数据库。代码如下:

Shapfile到SQL语句:

  shp2pgsql    路径\shp数据文件名 新建的数据表名 > 路径\SQL文件名.sql

Shapfile直接入库:

  shp2pgsql -c 路径\shp数据文件名 新建的数据表名 数据库名|psql -d 数据库名

举例说明:

  如将一Shapfile文件“c:\road.shp”导入到数据表“road”中,数据库为“sjzmap”。

  1、运行“命令提示符”。

  2、切换至PostgreSQL数据库安装目录中的bin目录下。

  3、执行此目录下的shp2pgsql命令:“shp2pgsql c:\road.shp road > c:\road.sql”。

  4、如将此文件直接导入数据库(不推荐):“shp2pgsql -c c:\road.shp road sjzmap | psql -d sjzmap”。

     5、使用pgAdmin3 选择数据库,再导入表。

       其次,Quantum GIS有个插件叫SPIT(Shapefile to PostgreSQL/PostGIS Import Tool),看上去不错,看是我试了好久也没有成功,总是在入库的时候提示Problem inserting features from file:……,换了好多个shape文件测试都不行,连QGIS主页上的sample data都不能入库(测试数据库连接能连上),简直fz至极。

        我最后入库用的是FWTools(http://fwtools.maptools.org/上有),这个一个GIS数据转换软件库。其中ogr则是转换矢量数据相关的软件库,这里用到的是ogr2ogr工具(.\bin\ogr2ogr.exe),需要在命令行中调用。具体参数虽然有帮助,但是还是试了我好久。首先把org2org.exe拖到命令行中,然后编辑参数如下:

"D:\Program Files\FWTools1.0.9\bin\ogr2ogr.exe" -f "PostgreSQL" PG:"host=localhost dbname=VThuDB user=postgres password=***" E:\academy.shp

       这里,-f跟的是目标数据的类型,由于我们要入库,所以选择PostgreSQL,PG:"……"这段是PostgreSQL数据库配置,包括主机、数据库名、用户名、密码,数据库编码为默认的ASCII(也可以用EUC,不要用UTF8)。

      注意:(shape文件入库后的表名就是文件名,最好不要用大写,如果用大写的话,在PostgreSQL中用sql语句查询时要加双引号,否则查不到,比如小写的可以写成:select * from academy,大写的就要写成:select * from "Academy")