1. 程式人生 > >PostGIS匯入匯出柵格資料

PostGIS匯入匯出柵格資料

上一篇博文PostGIS匯入匯出ESRI Shapefile資料介紹瞭如何匯入空間向量資料到PostgreSQL中,緊接上一篇,本文將介紹如何使用PostGIS匯入匯出空間柵格資料。
實驗環境和上一篇的博文一樣: Ubuntu 16.04 LTS 。
資料為全球影像(ESRI ArcGIS提供的示例資料),下載連線:全球影像百度網盤下載
可以使用GDAL的gdalinfo命令檢視其詳細資訊:
gdalinfo
在QGIS中檢視如下:
wsiearth.tif

PostGIS提供了raster2pgsql工具用於柵格資料的匯入(可以使用man raster2pgsql命令檢視幫助文件)。
使用如下命令進行影像資料的插入,具體引數的含義這裡不在累贅,上篇文章有說明。關於raster2pgsql的引數可以使用man命令進行檢視。

raster2pgsql -s 4326 -C ~/Downloads/gisdata/wsiearth.tif staging.wsiearth | psql -h localhost -p 5432 -U postgres -d postgis_in_action -W

PostGIS插入柵格資料
可以使用psql進入資料庫檢視:
PostGIS插入柵格資料
還可以使用\d staging.wsiearth檢視關係表的結構:
PostGIS中的柵格關係表
可以看到有一個rid和rast的列,rid是以一個整形對插入的柵格資料進行的標示,rast列的型別是raster儲存了具體資料。

如果想要匯出資料,可以使用PostGIS提供的內建函式。其中ST_AsGDALRaster 是一個通用性的函式,可以匯出為GDAL支援的任意格式。此外,還有ST_AsPNG,ST_AsJPEG和ST_AsTIFF等函式,提供了直接匯出到指定格式,並且接受更少的引數。
注意:PostGIS的預設匯出GDAL支援的格式資料是關閉的,啟用的話需要修改PostgreSQL的配置檔案。修改的方法比較多,而且不同的PostgreSQL版本的支援情況不一樣。我使用如下命令進行修改:

sudo vim /etc/postgresql/9.5/main/postgresql.conf

在該配置檔案後面新增:

postgis.gdal_enabled_drivers = 'ENABLE_ALL'
postgis.enable_outdb_rasters = True

重啟PostgreSQL:

sudo service postgresql restart

第二個問題是:這些內建函式提供的匯出結果是PostgreSQL的bytea (byte array)資料型別,我們需要自己寫程式進行轉換成實際的影象檔案。

# -*- coding: utf-8 -*-
import psycopg2 # Connect to an existing database conn = psycopg2.connect('host=localhost port=5432 user=postgres password=password dbname=postgis_in_action') # Open a cursor to perform database operations cur = conn.cursor() # Execute SQL query cur.execute("SELECT ST_AsTIFF(rast, 'LZW') AS rasttiff FROM staging.wsiearth WHERE rid=1;") # Fetch data as Python objects rasttiff = cur.fetchone() # Write data to file if rasttiff is not None: open('/home/theone/Desktop/wsiearth.tif', 'wb').write(str(rasttiff[0])) # Close communication with the database cur.close() conn.close()

在QGIS中檢視匯出結果如下:
PostGIS匯出結果
可以發現匯出的結果,丟失了影象的colormap,但是每個畫素值都是正確的。

相關推薦

PostGIS匯入匯出柵格資料

上一篇博文PostGIS匯入匯出ESRI Shapefile資料介紹瞭如何匯入空間向量資料到PostgreSQL中,緊接上一篇,本文將介紹如何使用PostGIS匯入匯出空間柵格資料。 實驗環境和上一篇的博文一樣: Ubuntu 16.04 LTS 。 資料為

PostGIS匯入匯出ESRI Shapefile資料

PostGIS作為PostgreSQL資料庫的空間擴充套件,提供了對空間資料管理的支援。對於空間向量資料,PostGIS提供了Geometry和Geography倆種類型用於空間物件的儲存,Geometry使用笛卡爾座標系,而Geography使用球面座標系(預

mysql匯入匯出指定資料指令碼(含遠端)及弊端

有時候,需要匯出表中的指定列的資料,拼接成INSERT語句。如下: Code(遠端匯出需要加入引數"-h+ip";本地則去掉該引數,或者將ip換為本地ip即可) mysql -h+ip -uusername -ppassword -e "select concat('insert i

mysql匯入匯出全部資料指令碼(含遠端)及錯誤收集

使用mysql的mysqldump命令進行資料的匯入匯出。 1、匯出 匯出(遠端): 以下指令碼為預設語句,其他引數預設 mysqldump -h127.0.0.1 -uusername -ppassword --databases dbname --tables tablenam

MySQL mysqldump 匯入/匯出 結構&資料&儲存過程&函式&事件&觸發器

一、使用mysqldump匯出/匯入sql資料檔案 二、使用infile/outfile匯入/匯出txt/csv資料檔案 ———————————————-庫操作———————————————- 1.①匯出一個庫結構 mysqldump -d dbname -u ro

MongoDB 匯入匯出資料遷移

遷移需求 現有測試伺服器A 和 測試伺服器 B,需要實現從測試伺服器A向測試伺服器B進行mongoDB 資料庫的遷移。 可以使用 mongoDB 的匯出工具 mongoexport 和匯入工具 mongoimport 實現。 官方英文文件連結 mongoDB mongoexport

5.非關係型資料庫(Nosql)之mongodb:建立集合,備份與匯入匯出資料還原,匯入匯出

1固定集合固定集合值得是事先建立而且大小固定的集合2固定集合的特徵:固定集合很像環形佇列,如果空間不足,最早文件就會被刪除,為新的文件騰出空間。一般來說,固定集合適用於任何想要自動淘汰過期屬性的場景

C#實現匯入匯出Excel資料的兩種方法詳解

這篇文章主要為大家詳細介紹了C#匯入匯出Excel資料的兩種方法,具有一定的參考價值,感興趣的小夥伴們可以參考一下本文為大家分享了C#匯入匯出Excel資料的具體程式碼,供大家參考,具體內容如下注:對於實體類物件最好新建一個並且繼承原有實體類,這樣可以將型別進行修改;方法一:

Mysql匯入匯出大量資料的方法、備份恢復辦法

 經常使用PHP+Mysql的朋友一般都是通過phpmyadmin來管理資料庫的。日常的一些除錯開發工作,使用phpmyadmin確實很方便。但是當我們需要匯出幾百兆甚至幾個G的資料庫時,phpmyadmin就會很卡。甚至如果你是想匯入大量資料,則phpmyadmin完全

PostGIS匯入匯出SHP檔案常用命令

SHP匯入POSTGIS資料庫[quote][color=red]直接匯入資料庫shp2pgsql -I -s 2437 -W GBK shop_point.shp public.ntable | psql -U postgres -w -d jwsz匯出sql再匯入資料庫

MAPublisher9.5快速開始指南 第7章 匯入GIS柵格資料

7     匯入GIS柵格資料 繼續製作地圖,開啟Vancouver Downtown 7.ai 1. 從MAPublisher工具條,點選匯入按鈕。從格式下拉選單中選擇Image,點選瀏覽按鈕,定位到\Quick Start Data\RasterFiles,選擇Vanc

poiExcel表格所有操作以及資料匯入匯出

這個是本人在學習中記錄的筆記以供大家參考 Poi簡介: 1.1什麼是poi Apache POI [1]  是用Java編寫的免費開源的跨平臺的 Java API,Apache POI提供API給Java程式對Microsoft Offi

使用POI將資料匯入匯出資料庫。

POI將資料匯入匯出資料庫。(採用ssm框架) 1.前臺列表的展示 <script type="text/javascript"> //進行資料的全選 function selectAll(){ var ids=document.get

linux下匯入匯出mysql資料庫命令的實現方法

首先建空資料庫 mysql>create database abc; 匯入資料庫 mysql>use abc; 設定資料庫編碼 mysql>set names utf8; 匯入資料(注意sql檔案的路徑) mysql>source /home/abc/abc.sql;

Oracle資料庫資料常用的匯入匯出

採用exp/imp命令 知識擴充:   資料泵匯出匯入(EXPDP和IMPDP)的作用    1、實現邏輯備份和邏輯恢復。    2、在資料庫使用者之間移動物件。    3、在資料庫之間移動物件    4、實現表空間搬移。   資料泵匯出匯

【轉載】oracle 資料匯入匯出

oracle 資料匯入匯出   一、oracle中copy from的用法     1.語法及使用說明   1.1 語法   下面我們來看一下SQL*Copy Command的語法及使用說明。   在解釋SQ

Hive命令之三:hive的資料匯入匯出

Hive 資料的匯入匯出: 一 Hive資料匯出   1、匯出資料到本地檔案系統:      insert overwrite local directory '/software/data/data1' select * f

oracle 11g 資料庫表空間建立與資料匯入匯出

** oracle資料庫中進行資料的匯入匯出時要在cmd中進行而不是在sqlplus中進行操作! (1)向oracle資料庫中匯入完整的資料庫(字尾名:dmp)      首先進入cmd,輸入sqlplus /nolog執行oracle自帶程式,

Oracle利用exp和imp,資料泵impdp和expdp匯入匯出資料,spool匯出資料

Oracle利用exp和imp,資料泵impdp和expdp匯入匯出資料,spool匯出資料 注意: (1)imp只能匯入exp匯出的檔案 ,imp,exp是客戶端程式,操作少量資料  (2)impdp只能匯入expdp匯出的檔案,impdp,expdp是伺服器端程式,操作適量大的

thinkphp5匯入匯出大量csv資料

在thinkphp/library/think下新建Csv.php檔案: <?php /** * Created by PhpStorm. * User: sunin * Date: 2018/10/18 * Time: 17:42 */ namespace think;