GIS矢量数据上传到postgresql数据库的三种方式

**前提工作:**新建自己的数据库用于存放数据,如:test。在数据库上建立查询语句:CREATE EXTENSION postgis; 运行即可在扩展中出现,其他扩展的建立类似。
在这里插入图片描述

一、通过QGIS数据库管理上传(也可通过arcmap中的Catalog中的Database Connection)

1、打开QGIS,右击PostGIS,新建连接,输入对应的参数,注意数据库名是否正确。
在这里插入图片描述
建立完后,双击此连接,再次输入用户名和密码。
2、点击菜单栏–数据库–数据库管理器,点击拟上传的数据库连接,导入图层即可。
在这里插入图片描述
在这里插入图片描述

二、通过PostGIS Manager上传

windows上安装完postgis后,在“开始”里面有PostGIS Shapefile Import/Export Manager导入与导出功能。
在这里插入图片描述1、点击PostGIS PostGIS Bundle 3 for PostgreSQL x64 13 Shapefile and DBF Loader Exporter,然后点击 Add File ,可以一次性选择多个文件导入,比第一种方法效率高一些。
在这里插入图片描述
2、修改SRID的编码,WGS84对应的编码为4326。

在这里插入图片描述
3、点击import,第一次导入时需要连接数据库,最后再次import即可。
在这里插入图片描述
在这里插入图片描述
如若导入失败,需考虑以下几点:

1)是否扩展:CREATE EXTENSION postgis;

2)数据路径不能含有中文名。

三、通过raster2pgsql和shp2sql插件上传栅格和矢量数据

前期准备:centos7安装完postgis3后,缺少raster2pgsql和shp2sql这两个文件(postgis2中自带),需要自行下载安装,具体方法参考博客:https://blog.csdn.net/qq_37967853/article/details/126471074?spm=1001.2014.3001.5502
另外,如果数据库没有空间扩展功能,则.shp文件导入会失败。

create extension postgis;
create extension postgis_topology;
create extension fuzzystrmatch;
create extension postgis_tiger_geocoder;

1、矢量数据的上传
进入数据库:su postgres,然后导入命令:

shp2pgsql -s 4326 -a -W GBK 文件名.shp 命名空间名.表名 | psql -h localhost -U postgres -d 数据库名-p 5432

各参数解释如下:
在这里插入图片描述
导入实例:

shp2pgsql -s 4326 -c /gisdata/road_side.shp test1 test_db | psql -d test_db

在这里插入图片描述
在这里插入图片描述
2、栅格数据的上传
各参数说明:

-s <srid>空间参考id,必须设置,-s 4326
 -b <band>要提取的栅格波段.不设置则写入所有波段,从1开始,如要提取多个用,号隔开,-b 1,2
 -t  <title size>栅格切片大小,格式为WIDTHxHEIGHT.,不设置则不切片,导入后只有一行数据.切片后每一片一行,-t 256*256
 -P 自动填充瓦片右下角.有些瓦片的有效数据可能达不到-t指定的大小,因此需要自动补填充,确保所有瓦片具有相同的宽度和高度,只有切片才需要设置,-P
 -R 注册栅格的db文件,提供db文件的绝对路径
(d|a|c|p)这些是互斥选项,只能选择其中之一:
  -d 删除该表, 然后重新创建
  -a 追加到当前表中, 图层字段必须与表架构完全相同
  -c 创建一个新表并填充它, 如果不指定任何选项, 这是默认值
  -p 准备模式, 只创建表
 -f <column>指写raster列名称,-f rast
 -F  在栅格表中添加列名称字段,列名称默认为filename,用于存储删除文件名(不包含路径),-F
 -n <column> 与-F参数作用相同,只是允许自定义文件列的列名称,-n "fname"
 -l <overview factor> 未用过,具体用途有用过的欢迎补充.创建栅格的覆盖因子.对于超过多个因素用逗号,分开.覆盖表名如下模式"o_<overview factor>_<table>".创建的覆盖因子是存储在数据库中,不受-R参数影响
 -q  Wrap PostgreSQL identifiers in quotes.
 -I  在栅格列上创建GIST 空间索引
 -M 导入完成后运行VACUUM ANALYZE.
 -C 在加载栅格后设置栅格列上的标准约束集,如果一个或多个栅格违反约束,某些约束可能会失败
 -x 禁用设置最大范围约束,只有在使用了-C时才有效
 -r 设置约束(空间唯一和覆盖磁贴) 以进行常规阻塞,只有在使用了-C时才有效
 -T <tablespace> 指定使用的表空间,索引如未使用-X 标志将使用默认表空间 ,-T "tabspace"
 -X <tablespace> 指定使用的索引表空间,不设置将使用默认表空间,-X "idxtabspace"
 -N <nodata> 非数据值,用于没有 NODATA 值的波段.
 -k  跳过每个栅格波段的NODATA值检查
 -E <endian> 指栅格生成二进制时是大端(big-endian)生成还是小端生成(little-endian),使用0表示XDR,使用1表示NDR(默认值),目前仅支持NDR,-E 1
       little-endian为网络数据表示NDR
       big-endian为外部数据表示XDR
 -V <version> 指定输出WKB格式的版本,默认是0,目前仅支持0,-V 0
 -e   单独执行每个语句,不要使用事务
 -Y  使用COPY语句而不是插入语句
 -G  打印支持的 GDAL 栅格格式
 -?  打印帮助

导入命令:

raster2pgsql -s 4326 -I -C -M C:\Users\Administrator\Desktop\shuju\result.tif\*.tif -F -t 256x256 dengzhou_t  | psql -h localhost -p 5432 -U postgres -d raster -W

SRID码,输入位置,输出位置,切片数,表名,数据库用户名,数据库名
导入实例:cd 进入存放数据的文件夹,输入命令:

raster2pgsql -s 4326 -I -C -M C:\Users\Administrator\Desktop\shuju\result.tif\*.tif -F -t 256x256 dengzhou_t  | psql -h localhost -p 5432 -U postgres -d raster -W

SRID码,输入位置,输出位置,表名,数据库用户名,数据库名

raster2pgsql -s 4326 -I  -M result.tif  -t 256x256 dengzhou_t | psql -h localhost -p 5432 -U postgres -d test_db -W

在这里插入图片描述
在这里插入图片描述

批量导入:

raster2pgsql -s 4326 -I  -M *.tif -F -t 256x256 dengzhou_ | psql -h localhost -p 5432 -U postgres -d test_db -W
  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

定位算法工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值