我试图弄清楚如何将栅格加载到PostGIS2.0数据库中(我在这里和这里都曾问过有关此主题的先前问题)。我正在尝试使用raster2pgsql.exe
PostGIS2.0随附的程序。
确定Windows中的命令提示符需要以管理员身份运行(在Windows 7中以管理员身份运行命令行后,cmd
在搜索栏中键入并单击ctrl
+ shift
+ enter
)以启用raster2pgsql.exe
我已管理的功能将栅格加载到我的数据库中。我有一个栅格文件ras_test.tif
,我暂时将其放置在安装bin
文件夹中postgresql
。使用以下代码转换并加载此栅格:
C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -s 102003 ras_test.tif -t> elev.sql
Processing 1/1: ras_test.tif
C:\Program Files (x86)\PostgreSQL\9.1\bin>psql.exe -p 5434 -U postgres -d test2 -f elev.sql
BEGIN
psql:elev.sql:2: NOTICE: CREATE TABLE will create implicit sequence "-t_rid_seq" for serial column "-t.rid"
psql:elev.sql:2: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "-t_pkey" for table "-t"
CREATE TABLE
INSERT 0 1
COMMIT
当我在PostGIS中查看此表时,它看起来像这样:
但是,我无法在QGIS中查看此文件,并且由于该文件中似乎没有数据,因此不确定是否正确加载了该文件。好像我已将文件名作为栅格而不是数据内容装入。我是否犯了任何明显的错误,阻止我将栅格加载到数据库中?
PostGIS 文档提供了有关如何加载栅格的示例,但是我不了解哪些参数是可选的,并且如果要使用默认模式,我仍不清楚应使用什么参数。例如,在文档中的以下示例中:
raster2pgsql -s 4236 -I -C -M *.tif -F -t myschema.demelevation > elev.sql
psql -d gisdb -f elev.sql
我是否必须提供SRID?
-s 4236
这些参数
-I -C -M
都是可选的吗?-t
似乎是图块大小;如果没有自定义架构,是否需要指定?- 我可以离开
myschema.demelevation
吗?
编辑:我已经包括以下建议的结果:
C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -s 102003 -t 300x300 ras_test.tif ras_test | psql.exe -U postgres
-d raster_analysis -h localhost -p 5434
Processing 1/1: ras_test.tif
BEGIN
NOTICE: CREATE TABLE will create implicit sequence "ras_test_rid_seq" for serial column "ras_test.rid"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "ras_test_pkey" for table "ras_test"
CREATE TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
COMMIT
这将产生一个包含两列rid
和的表rast
。rid
有四个值,nad rast
没有。当我尝试使用更多参数时:
C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -I -C -e -Y -F -s 102003 -t 300x300 ras_test.tif ras_test1 | psql
.exe -U postgres -d raster_analysis -h localhost -p 5434
Processing 1/1: ras_test.tif
NOTICE: CREATE TABLE will create implicit sequence "ras_test1_rid_seq" for serial column "ras_test1.rid"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "ras_test1_pkey" for table "ras_test1"
CREATE TABLE
CREATE INDEX
ANALYZE
NOTICE: Adding SRID constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding scale-X constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding scale-Y constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding blocksize-X constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding blocksize-Y constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding alignment constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding number of bands constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding pixel type constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding nodata value constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Unable to add constraint "enforce_nodata_values_rast"
CONTEXT: PL/pgSQL function "_add_raster_constraint_nodata_values" line 40 at RETURN
PL/pgSQL function "addrasterconstraints" line 94 at assignment
PL/pgSQL function "addrasterconstraints" line 49 at RETURN
WARNING: Unable to add constraint: 'nodata_values'. Skipping
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding maximum extent constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
addrasterconstraints
----------------------
t
(1 row)
我得到以下输出。这将产生具有以下结构的新表:
我认为这不是正确加载的栅格,因为我无法查看数据。我还有其他选择可以尝试吗?
编辑:这最后一次尝试确实起作用,我只是无法正确访问栅格。