Làm cách nào để nhập raster vào PostGIS?


8

Tôi đang cố làm theo các hướng dẫn ở đây để tải raster vào cơ sở dữ liệu PostGIS:

python raster2pgsql.py -s 4269 -I -r *.tif -F myschema.demelevation -o elev.sql

Tôi hiểu rằng tôi thay thế *bằng đường dẫn đến raster của tôi, nhưng tôi không hiểu phần myschema.demelevationhay elev.sql. Tôi có nên có lược đồ riêng cho tệp này không? Và elev.sqlphần này có nghĩa là gì?

Tôi cũng đọc qua trình điều khiển raster PostGIS để thử và hiểu điều này với nhiều ví dụ hơn. Tương tự, họ đề nghị tải rasterkatrina

python raster2pgsql.py -r /path/to/katrina.tif -t katrina -l 1 -k 64x64 -o katrina.sql -s 4326 -I -M

Sử dụng thiết lập hiện tại của tôi, tôi đã thử tải katrinaraster vào:

    python2.6 ~/src/postgis-2.0.0SVN/raster/scripts/python/raster2pgsql.py -r ~/tmp/katrina.tif -t katrina -l 1 -k 64x64 -o katrina.sql -s 4326 -I -M

Tuy nhiên, tôi đã nhận được các lỗi sau:

Traceback (most recent call last):
  File "/home/src/postgis-2.0.0SVN/raster/scripts/python/raster2pgsql.py", line 34, in <module>
    from osgeo import gdal
  File "/home/lib/python2.6/GDAL-1.8.1-py2.6-linux-i686.egg/osgeo/__init__.py", line 21, in <module>
    _gdal = swig_import_helper()
  File "/home/lib/python2.6/GDAL-1.8.1-py2.6-linux-i686.egg/osgeo/__init__.py", line 17, in swig_import_helper
    _mod = imp.load_module('_gdal', fp, pathname, description)
ImportError: /home/lib/python2.6/GDAL-1.8.1-py2.6-linux-i686.egg/osgeo/_gdal.so: undefined symbol: GDALSetRasterUnitType

Tôi không hiểu đầy đủ những lỗi này; Khi tôi biên dịch gdaltôi có nên chỉ định một đối số cho GDALSetRasterUnitType?

Tổng quát hơn, tôi gặp khó khăn trong việc hiểu tại sao tôi không chỉ định cơ sở dữ liệu mà tôi đang cố tải dữ liệu này vào.


Sau khi làm theo lời khuyên của MerseViking, tôi chạy:

python /usr/lib/postgresql/8.4/bin/raster2pgsql.py -r /home/celenius/Downloads/katrina.tif -t katrina -l 1 -k 64x64 -o katrina.sql -s 4326 -I -M

trả về đầu ra sau:

------------------------------------------------------------
 Summary of GDAL to PostGIS Raster processing:
------------------------------------------------------------
Number of processed raster files: 1 (/home/celenius/Downloads/katrina.tif)
List of generated tables (number of tiles):
1   katrina (256)

Rồi tôi chạy:

psql -d test -f katrina.sql - U postgres -W

Trả về như sau:

    addrastercolumn                                                                                                                                                                                        
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 public.katrina.rast srid:4326 pixel_types:{8BUI,8BUI,8BUI} out_db:false regular_blocking:true nodata_values:NULL scale_x:'0.029325513196481' scale_y:'-0.029325513196481' blocksize_x:'64' blocksize_y:'64' extent:POLYGON((-100.014662756598 9.98533724340176,-100.014662756598 40.0146627565982,-69.9853372434018 40.0146627565982,-69.9853372434018 9.98533724340176,-100.014662756598 9.98533724340176))
(1 row)

(END)

Thông báo này và một con trỏ nhấp nháy xuất hiện trên màn hình. Tôi giả sử rằng nó đang tải vào cơ sở dữ liệu, nhưng tôi không chắc chắn. Các tiftập tin là chỉ 3MB - Tôi đã giả định rằng nó sẽ không mất nhiều thời gian để tải một tập tin kích thước này nhưng con trỏ nhấp nháy đã được trên màn hình cho ~ 1 giờ. Điều này đã sụp đổ hay tôi chỉ cần chờ đợi một thời gian dài? Tôi có 4GB RAM và bộ xử lý kép 2,5 GHz.


Tôi đã thấy rằng nếu tôi nhấn phím q, nó sẽ thực thi lệnh này và chèn dữ liệu vào cơ sở dữ liệu test. Đây có phải là hành vi bình thường và tôi nên làm điều này?
djq

Câu trả lời:


3

Có vẻ như có một lỗi đánh máy trên trang đó; trong dòng:

python raster2pgsql.py -s 4269 -I -r *.tif -F myschema.demelevation -o elev.sql

Các -Ftham số nên -tcó quy định cụ thể tên bảng để nhập dữ liệu vào. Phần trước tên .là lược đồ tùy chọn nếu bạn muốn bảng của mình trong một lược đồ khác public. Các -otham số xác định tập tin được tạo ra bởi kịch bản Python. Tệp này là biểu diễn SQL của định nghĩa bảng của bạn và dữ liệu thực tế từ raster nguồn, vì vậy nó có thể trở nên khá lớn. Khi tệp này được tạo, bạn cần chạy nó psql -d <db_name> -f elev.sqlđể thực sự điền vào cơ sở dữ liệu, sau đó nó có thể bị xóa.

Tuy nhiên, điều khiến tôi thấy kỳ lạ là bạn đang gọi raster2pgsql.pytừ thư mục nguồn PostGIS 2.0 . Bạn đã thực sự biên dịch (bằng cách chạy make) và cài đặt (bằng cách chạy make installbằng root) PostGIS 2.0 chưa? Bởi vì nó phải nằm trên đường dẫn của bạn và IIRC trình cài đặt sẽ tự động cập nhật PYTHON_PATHbiến môi trường của bạn .

Về phần còn thiếu GDALSetRasterUnitType, điều đầu tiên tôi sẽ kiểm tra là bạn không cài đặt phiên bản thư viện GDAL trước đó mà Python đang chọn thay vì 1.8.1. Hãy thử gdalinfo --version Trang web này có thể làm sáng tỏ vấn đề của bạn.


Cảm ơn những lời đề nghị - Tôi sẽ kiểm tra nó. Tôi khá bối rối về cách gọi kịch bản này. Tôi đã chạy makemake installtôi nên gọi nó từ ./bin/raster2pgsql.py. Tôi đang sử dụng lưu trữ chia sẻ không có quyền truy cập root, nhưng tôi có thể cài đặt chương trình. Khi tôi chạy gdalinfo --versiontôi nhận được GDAL 1.5.3, released 2008/09/09; đó là phiên bản máy chủ; Tôi đã cài đặt GDAL 1.8.1 nhưng lệnh này không được chọn.
djq
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.