在Windows上将栅格加载到PostGIS 2.0数据库中


18

我试图弄清楚如何将栅格加载到PostGIS2.0数据库中(我在这里这里都曾问过有关此主题的先前问题)。我正在尝试使用raster2pgsql.exePostGIS2.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
  1. 我是否必须提供SRID? -s 4236

  2. 这些参数-I -C -M都是可选的吗?

  3. -t似乎是图块大小;如果没有自定义架构,是否需要指定?

  4. 我可以离开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和的表rastrid有四个值,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)

我得到以下输出。这将产生具有以下结构的新表:

在此处输入图片说明

我认为这不是正确加载的栅格,因为我无法查看数据。我还有其他选择可以尝试吗?

编辑:这最后一次尝试确实起作用,我只是无法正确访问栅格。



我尝试使用此处提供的语法将栅格文件(jpg)加载到gis中:“ 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“我可以看到在数据库中创建的栅格表。就像Celenius所显示的那样,除非您单击特定的像元,否则您在“光栅”栏下看不到任何东西。这是我的实际问题。如何使用sql查询图层从ArcGIS查看栅格图层。当我尝试添加此层并对其进行验证时,它显示为“ rast raster
GISTECH 2012年

我认为您应该将其作为一个新问题提出,因为您会得到更多的答复。我不知道如何使用ArcGIS进行连接,但是可以使用QGIS进行访问。
djq 2012年

1
注意:pgAdminIII显示一个空白单元格,用于存储超过一定大小的数据。参见票证297
Mike T

上面的Querry工作正常,但是谁能告诉我如何在表格中存储像素值/单元格值?

Answers:


5

SRID?-s 4236(必需)

参数-I -C -M是否都是可选的?

-C应用栅格约束-srid,pixelize等,以确保在raster_columns视图中正确注册了栅格。(需要)

-M(真空分析栅格表。)可选

-I(在栅格列上创建GiST索引。)可选,但建议

-t TILE_SIZE(将栅格剪切为图块,以每表行插入一个。TILE_SIZE表示为WIDTHxHEIGHT。)

myschema.demelevation 省略(是)

http://postgis.net/docs/using_raster_dataman.html#RT_Loading_Rasters


感谢Mapperz,我确实部分了解了raster2pgsql的工作原理-但是我在postgresql中的栅格仅包含一个单元格,这就是为什么我试图弄清楚要使用的参数的原因。
djq 2011年

9

塞莱尼厄斯

如果您不将-t选项与尺寸标注一起使用,则您的栅格文件将作为单个记录进入。我只是注意到文档中有一个错误,这可能会使您感到困惑。我会解决的。该-t应始终遵循一个宽x高。

如果您希望将其分块,请说成100x100像素宽度的高度(如Mapperz所说),请使用-t选项。

因此,您的命令将是:

raster2pgsql -s 102003  -t 100x100 ras_test.tif ras_test > elev.sql

看一下文档中的空中示例。 http://www.postgis.org/documentation/manual-svn/using_raster.xml.html#RT_Raster_Loader

许多手动示例中使用的是:

raster2pgsql -I -C -e -Y -F -s 26986 -t 128x128 -l 2,4 bostonaerials2008/*.jpg aerials.boston | psql -U postgres -d gisdb -h localhost -p 5432

我知道这些开关可能有些令人生畏,因为它们太多了,而且大多数都是可选的。也许在2.1中,我们将具有类似于的gui,shp2pgsql-gui以使新手更简单。

在最新版本中,raster2pgsql有一种逻辑可以从tif或其他栅格文件中的地理参考信息中推断出纬度(此版本现在可以作为窗口二进制文件获得)。还没有尝试过该功能,但是如果它起作用了,您甚至可以省去它,它将猜测(希望正确)。


感谢您的建议!仍然无法使其正常工作,但是开始更好地理解了这些开关。
djq 2012年

它确实起作用了,但是我不明白它在数据库中的外观。再次感谢你的帮助。
djq 2012年

将栅格加载到pgsql的GUI终于到达了吗?:)
astrojuanlu

-2

在SQL视图中,大数据看不到数据。您可以将查询执行到一个文件中,它将显示数据。


1
原始(旧)问题已经接受了答案,而您的问题实际上不是该问题的替代解决方案,而是要求进行目视检查。
Curlew
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.