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

每天上传当天数据 SQL SERVER 上传数据库_数据库

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

1、打开QGIS,右击PostGIS,新建连接,输入对应的参数,注意数据库名是否正确。

每天上传当天数据 SQL SERVER 上传数据库_栅格_02


建立完后,双击此连接,再次输入用户名和密码。

2、点击菜单栏–数据库–数据库管理器,点击拟上传的数据库连接,导入图层即可。

每天上传当天数据 SQL SERVER 上传数据库_postgresql_03


每天上传当天数据 SQL SERVER 上传数据库_数据库_04

二、通过PostGIS Manager上传

windows上安装完postgis后,在“开始”里面有PostGIS Shapefile Import/Export Manager导入与导出功能。

每天上传当天数据 SQL SERVER 上传数据库_sql_05

1、点击PostGIS PostGIS Bundle 3 for PostgreSQL x64 13 Shapefile and DBF Loader Exporter,然后点击 Add File ,可以一次性选择多个文件导入,比第一种方法效率高一些。

每天上传当天数据 SQL SERVER 上传数据库_栅格_06


2、修改SRID的编码,WGS84对应的编码为4326。

每天上传当天数据 SQL SERVER 上传数据库_栅格_07


3、点击import,第一次导入时需要连接数据库,最后再次import即可。

每天上传当天数据 SQL SERVER 上传数据库_栅格_08


每天上传当天数据 SQL SERVER 上传数据库_postgresql_09


如若导入失败,需考虑以下几点:

1)是否扩展:CREATE EXTENSION postgis;

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

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

前期准备:centos7安装完postgis3后,缺少raster2pgsql和shp2sql这两个文件(postgis2中自带),需要自行下载安装
另外,如果数据库没有空间扩展功能,则.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

各参数解释如下:

每天上传当天数据 SQL SERVER 上传数据库_数据库_10


导入实例:

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

每天上传当天数据 SQL SERVER 上传数据库_栅格_11


每天上传当天数据 SQL SERVER 上传数据库_sql_12


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

每天上传当天数据 SQL SERVER 上传数据库_每天上传当天数据 SQL SERVER_13


每天上传当天数据 SQL SERVER 上传数据库_每天上传当天数据 SQL SERVER_14

批量导入:

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