Gdal訪問Postgresql中的柵格資料
阿新 • • 發佈:2018-11-19
前言
Gdal功能非常強大,不僅可以訪問shp、tif等儲存在本地的空間資料,還支援訪問儲存在空間資料庫中的空間資料。通過Gdal訪問儲存在Postgresql中的向量資料和柵格資料略有差別,前面已經介紹過如何訪問向量資料,具體情況請看這裡。OK,下面我們來具體看下如何用Gdal訪問儲存在Postgresql中的柵格資料。
1、編譯Gdal支援Postgresql驅動
預設編譯的Gdal是不支援Postgresql驅動的,要通過Gdal訪問儲存在Postgresql中的柵格資料,必須重新編譯Gdal使其支援Postgresql驅動,如果不知道該如何做,可檢視 這裡。
2、訪問Postgresql中的柵格資料
本文先將一個名為test的tif影像資料匯入(未進行切片)到postgresql中,然後利用Gdal訪問Postgresql,讀取了該資料的轉換系數、長寬、波段數、一柵格上的值,並進行了輸出,具體程式碼如下:
import org.gdal.gdal.Band; import org.gdal.gdal.Dataset; import org.gdal.gdal.gdal; import org.gdal.gdalconst.gdalconstConstants; public class HelloGDAL { public static void readRasterSpacial(){ String path = "PG:dbname=Test schema=public table=test host=localhost port=5432" + " user=postgres password=postgres"; Dataset dataset = null; try{ gdal.AllRegister(); gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES"); gdal.SetConfigOption("SHAPE_ENCODING","CP936"); dataset = gdal.Open(path, gdalconstConstants.GA_ReadOnly); double[] trans = dataset.GetGeoTransform(); for(int i = 0; i < trans.length; i++){ System.out.println(trans[i]); } Band band=dataset.GetRasterBand(1); double[] data = new double[1]; band.ReadRaster(1000, 1000, 1, 1, data); for(int i = 0; i < data.length; i++){ System.out.println(data[i]); } int xSize = dataset.getRasterXSize(); int ySzie = dataset.getRasterYSize(); int nBandCount = dataset.getRasterCount(); System.out.println("Size is " + xSize + ", " + ySzie + ", " + nBandCount); }catch(Exception e){ System.out.println(e.toString()); }finally{ if(dataset != null){ dataset.delete(); } gdal.GDALDestroyDriverManager(); } } public static void main(String[] args) { readRasterSpacial(); } }
3、輸出結果
參考文獻
https://www.gdal.org/frmt_postgisraster.html
https://blog.csdn.net/theonegis/article/details/52585613
https://blog.csdn.net/theonegis/article/details/54427906