• shp2pgsql向postgresql导入shape数据


    1. 准备好Shape文件(不仅仅是.shp文悠扬,还要有其他相关数据文件,包括.shx、.prj、.dbf文件)。

    2. 使用命令将Shape数据转换为*.sql文件

    shp2pgsql -s 3857 -c -W "GBK" CLLX.shp>CLLX.sql

     -s 代表指定数据的SRID为3857

     -c 代表数据将新建一个表,这里可能的选项是 -d 删除旧的表,重新建表并插入数据; -a 向现有表中追加数据; -p 仅创建表结构,不添加数据,这四个参数是互斥的。

     -W Shape文件中属性的字符集,通常Postgresql的字符集是UTF-8,有时候可能Shape数据中的字符集是其他,就可能报“Unable to convert data value to UTF-8 (iconv reports "无效或不完整的多字节字符或宽字符"). Current encoding is "UTF-8". Try "LATIN1" (Western European)”错误,这时候指定正确的字符集即可解决方问题。

    3.建立空间数据库,并导入数据

    3.1 登录postgres用户,建立空的数据库,指定数据的所有者是gisdb用户(或者你数据库内的任意现有用户)

    CREATE DATABASE shp2pgsqldemo WITH OWNER=gisdb;

    3.2 使用 c shp2pgsqldemo; 切换到shp2pgsqldemo数据库,并安装PostGIS相关扩展(安装PostGIS请参见这里)

    c shp2pgsqldemo;
    
    CREATE EXTENSION postgis;
    
    CREATE EXTENSION postgis_topology;

    3.3 向数据库导入使用Shape数据生成的.sql文件

    psql -d shp2pgsqldemo -U gisdb -f /tmp/shp/CLLX.sql -W

    4. 验证数据

    5.直接将Shape数据导入到数据表 

    shp2pgsql -s 3857 -c -W "GBK" /tmp/shp/CLLX.shp public.CLLX2 | psql -d shp2pgsqldemo -U gisdb -W

    这里值的一提的是,刚才我们已经建了一个cllx表了,如果再导入可以使用 -d 参数删了重建,我这里为了演示功能,使用 <SCHEMA>.<DBTABLE> 数据重新建了一个表 CLLX2 ,如下图红框中所示。另外在导入过程中需要输入数据库用户的密码,在红色箭头所示的地方,命令执行会中断,等待输入密码,只需要输入密码后回车即可向下执行。

    5.1验证导入结果,发现有新建的cllx2表

    共18条数据

  • 相关阅读:
    Linux进程和线程
    Vim编辑器
    Java多线程编程(七)线程状态、线程组与异常处理
    Java多线程编程(六)单例模式与多线程
    Integer to Roman
    Container With Most Water
    Regular Expression Matching
    Palindrome Number
    c/c++获取硬盘序列号
    String to Integer (atoi)
  • 原文地址:https://www.cnblogs.com/think8848/p/6929351.html
Copyright © 2020-2023  润新知