Đang tải raster vào cơ sở dữ liệu PostGIS 2.0 trên Windows


18

Tôi đang cố gắng tìm ra cách tải raster vào cơ sở dữ liệu PostGIS2.0 (tôi đã hỏi những câu hỏi trước về chủ đề này ở đâyđây ). Tôi đang cố gắng sử dụng raster2pgsql.exechương trình được cung cấp với PostGIS2.0.

Sau khi nhận ra rằng dấu nhắc lệnh trong windows cần được chạy với tư cách quản trị viên (Trong Windows 7 để chạy dòng lệnh với tư cách quản trị viên, hãy nhập cmdvào thanh tìm kiếm và nhấn ctrl+ shift+ enter) để bật raster2pgsql.exechức năng tôi có chức năng quản lý tải một raster vào cơ sở dữ liệu của tôi. Tôi có một tệp raster được gọi là ras_test.tiftôi tạm thời đặt trong binthư mục postgresqlcài đặt của mình . Sử dụng mã sau đây tôi chuyển đổi và tải raster này:

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

Khi tôi xem bảng này trong PostGIS, nó trông như thế này:

nhập mô tả hình ảnh ở đây

Tuy nhiên, tôi chưa thể xem nội dung này trong QGIS và tôi không chắc liệu mình đã tải đúng chưa vì dường như không có dữ liệu trong tệp này. Có vẻ như tôi đã tải tên tệp dưới dạng raster, thay vì nội dung dữ liệu. Tôi đã thực hiện bất kỳ lỗi rõ ràng nào đang ngăn tôi tải raster vào cơ sở dữ liệu của mình chưa?


Tài liệu PostGIS cung cấp một ví dụ về cách tải raster, nhưng tôi không hiểu đối số nào là tùy chọn và vẫn chưa rõ về những gì tôi nên sử dụng nếu tôi muốn sử dụng lược đồ mặc định. Ví dụ, trong ví dụ sau từ tài liệu:

raster2pgsql -s 4236 -I -C -M *.tif -F -t myschema.demelevation > elev.sql 
psql -d gisdb -f elev.sql
  1. Tôi có phải cung cấp SRID không? -s 4236

  2. Là các đối số -I -C -Mtất cả tùy chọn?

  3. -tdường như là kích thước gạch; Tôi có cần chỉ định điều này nếu tôi không có lược đồ tùy chỉnh không?

  4. Tôi có thể rời khỏi đây myschema.demelevationkhông?

EDIT: Tôi đã bao gồm kết quả của các đề xuất dưới đây:

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

Điều này dẫn đến một bảng có hai cột ridrast. ridcó bốn giá trị, rastkhông có giá trị . Khi tôi thử sử dụng thêm một số đối số:

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)

Tôi nhận được đầu ra sau đây. Điều này dẫn đến một bảng mới với cấu trúc sau:

nhập mô tả hình ảnh ở đây

Tôi giả định rằng đây không phải là một raster được tải đúng cách vì tôi không thể xem dữ liệu. Có lựa chọn nào khác mà tôi có thể thử không?

EDIT: Lần thử cuối cùng này đã có hiệu quả, tôi chỉ không truy cập raster chính xác.


raster2pgsql đề cập đến tài liệu tham khảo postgis.org/documentation/manual-svn/ mẹo
Mapperz

Tôi đã cố tải tập tin raster (jpg) vào bài gis bằng cú pháp được cung cấp ở đây "C: \ Program Files (x86) \ PostgreQuery \ 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 "Tôi có thể thấy một bảng raster được tạo trong cơ sở dữ liệu. Nó giống như được hiển thị bởi Celenius khi bạn không nhìn thấy bất kỳ thứ gì trong cột "raster raster" trừ khi bạn nhấp vào một ô cụ thể. Đây là vấn đề thực tế của tôi. Cách xem lớp raster từ ArcGIS bằng lớp truy vấn sql. Khi tôi thử thêm lớp này và xác thực nó, nó báo "raster raster
GISTECH

Tôi nghĩ bạn nên hỏi đây là một câu hỏi mới vì bạn sẽ nhận được nhiều câu trả lời hơn. Tôi không biết làm thế nào bạn có thể kết nối bằng ArcGIS nhưng bạn có thể sử dụng QGIS để truy cập nó.
djq

1
Lưu ý: pgAdminIII hiển thị một ô trống cho dữ liệu vượt quá kích thước nhất định; xem vé số 297
Mike T

querry trên hoạt động nhưng có ai có thể cho tôi biết cách lưu trữ giá trị pixel / giá trị ô trong bảng không?

Câu trả lời:


5

SRID? -s 4236 (bắt buộc)

Các đối số -I -C -M có phải là tùy chọn không?

-C Áp dụng các ràng buộc raster - srid, pixelize, v.v. để đảm bảo raster được đăng ký đúng cách trong chế độ xem raster_columns. (cần thiết)

-M (Hút chân không phân tích bảng raster.) Tùy chọn

-Tôi (Tạo chỉ mục GiST trên cột raster.) Tùy chọn nhưng được đề xuất

-t TILE_SIZE (Cắt raster thành các ô được chèn một trên mỗi hàng của bảng. TILE_SIZE được thể hiện dưới dạng WIDTHxHEIGHT.)

myschema.demelevation rời khỏi (có)

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


Cảm ơn Mapperz, tôi đã hiểu một phần cách raster2pgsql hoạt động - tuy nhiên raster của tôi trong postgresql chỉ chứa một ô, đó là lý do tại sao tôi đang cố gắng tìm ra những đối số nào sẽ sử dụng.
djq

9

Thiên thần,

Nếu bạn không sử dụng -ttùy chọn với kích thước kích thước, thì tệp raster của bạn sẽ xuất hiện dưới dạng một bản ghi. Tôi chỉ nhận thấy một lỗi trong các tài liệu có lẽ là điều khiến bạn bối rối. Tôi sẽ sửa nó. Các -tnên luôn luôn được theo sau bởi một WIDTHxHEIGHT.

Nếu bạn muốn nó được chia nhỏ theo chiều cao chiều rộng 100x100 pixel - như Mapperz nói - hãy sử dụng tùy chọn -t.

Vì vậy, lệnh của bạn sẽ là:

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

Hãy xem ví dụ trên không trong các tài liệu. http://www.postgis.org/documentation/manual-svn/USE_raster.xml.html#RT_Raster_Loader

Đó là một trong rất nhiều ví dụ thủ công sử dụng:

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

Tôi biết các công tắc có thể hơi nản chí vì chúng rất nhiều và hầu hết là tùy chọn. Có lẽ trong 2.1 chúng ta sẽ có một gui tương tự như shp2pgsql-guiđể làm cho điều này đơn giản hơn một chút cho người mới.

Trong verson mới nhất raster2pgsqlcó logic để suy ra srid từ thông tin địa lý trong tệp tif hoặc tệp raster khác (phiên bản này hiện có sẵn dưới dạng cửa sổ nhị phân). Chưa thử tính năng này, nhưng nếu nó hoạt động, bạn thậm chí có thể bỏ qua phần srid và nó sẽ đoán (hy vọng là chính xác).


Cảm ơn những lời đề nghị! Vẫn không thể làm cho nó hoạt động, nhưng bắt đầu hiểu các công tắc tốt hơn một chút.
djq

Nó đã hoạt động, nhưng tôi không hiểu cái này sẽ trông như thế nào trong cơ sở dữ liệu. Cảm ơn một lần nữa vì sự giúp đỡ của bạn.
djq

Có phải GUI để tải raster vào pssql cuối cùng đã đến? :)
astrojuanlu

-2

Trong chế độ xem SQL, bạn không thể xem dữ liệu khi nó lớn. Bạn có thể thực hiện truy vấn vào một tệp và nó sẽ hiển thị dữ liệu.


1
Câu hỏi ban đầu (cũ) đã có câu trả lời được chấp nhận và câu hỏi của bạn không thực sự là một giải pháp thay thế cho câu hỏi, mà là một cuộc gọi để kiểm tra trực quan.
Curlew
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.