1. 程式人生 > >Gdal訪問Postgresql中的柵格資料

Gdal訪問Postgresql中的柵格資料

前言

        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