1. 程式人生 > >在Linux系統下將GDAL部署到eclipse開發環境

在Linux系統下將GDAL部署到eclipse開發環境

前言:

前面已經將GDAL成功的配置在Linux下了,本篇文章主要是介紹一下如何將GDAL部署到eclipse開發環境,在eclipse使用GDAL庫進行影象的處理。
另外,我是用C++來進行編譯的,我係統中下載的g++版本如下圖所示:g++的版本是4.8.5在這裡插入圖片描述

配置過程:

1、匯入環境變數

因為是在預設路徑下安裝的,所以需要匯入的環境變數為:
export PATH=$PATH:/usr/local/bin

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
在C/C++ Build下的Environment下添加個name為LD_LIBRARY_PATH
value為/usr/local/lib的路徑,如下圖所示:
在這裡插入圖片描述


在這裡插入圖片描述

2、匯入路徑

首先選中專案,右擊滑鼠選擇屬性,在C/C++ Build中選擇Settings,然後再點選includes,在include paths中匯入路徑,如下圖所示:
在這裡插入圖片描述
我是預設路徑安裝的GDAL,GEOS以及PROJ4,所以需要匯入上述路徑,若不是按預設路徑就匯入自己的那個路徑。

3、匯入庫

預設安裝的庫都在/usr/local/lib裡面,匯入的時候只需要匯入中間部分就行,如libgdal.a,libgdal.la,libgdal.so只需要匯入gdal就可以,不需要加字首字尾,下圖是匯入的庫及其路徑:
在這裡插入圖片描述

4、匯入其他混雜的庫

在GCC C++ Linker 中的 Miscellaneous的Other objects 中需要匯入所有的動態靜態庫:
/usr/local/lib/libgdal.a
/usr/local/lib/libgdal.so
/usr/local/lib/libgdal.so.20
/usr/local/lib/libgdal.so.20.4.1
/usr/local/lib/libgeos.a
/usr/local/lib/libgeos_c.so.1.10.2
/usr/local/lib/libgeos.so
/usr/local/lib/libgeos-3.6.2.so
/usr/local/lib/libproj.a
/usr/local/lib/libproj.so
/usr/local/lib/libproj.so.0
/usr/local/lib/libproj.so.0.7.0
/usr/local/lib/libgeos_c.a
/usr/local/lib/libgeos_c.so
/usr/local/lib/libgeos_c.so.1
就是將lib中的所有動態靜態庫全部完整名稱匯入。
就此完成了所有環境變數,路徑以及動靜態庫的匯入。

測試

程式碼如下

//============================================================================
// Name        : test1.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
// GDAL_1.cpp : 定義控制檯應用程式的入口點。
//

#include <iostream>
#include <iomanip>
#include "gdal_priv.h"

using std::cout;

/*
    @brief 計算影象行列號在給定座標系下對應的地理座標
    @param x                行號
    @param y                列號
    @param coords           返回的地理座標
    @param transform        變換的六引數
*/
void toGeoCoord(int x, int y, double* coords, double* transform)
{
    coords[0] = transform[0] + x * transform[1] + y * transform[2];
    coords[1] = transform[3] + x * transform[4] + y * transform[5];
}

/*
    @brief 讀取資料並輸出元資料資訊
    @param fileName 資料檔案路徑
    @return 資料讀取失敗返回1,讀取成功返回0
*/
int readGeoRaster(const char* fileName)
{
    GDALAllRegister();  // 註冊所有支援的資料格式驅動
    GDALDataset* dataset = static_cast<GDALDataset*>(GDALOpen(fileName, GA_ReadOnly));  // 以只讀模式開啟給定的資料檔案
    if (!dataset)
    {
        cout << "影像讀取失敗:(" << fileName << ")!" << '\n';
        return EXIT_FAILURE;
    }

    int nSizeX = dataset->GetRasterXSize(); // 影像的寬度(像元數目)
    int nSizeY = dataset->GetRasterYSize(); // 影像的高度(像元數目)
    int nBandCount = dataset->GetRasterCount(); // 影像波段數

    cout << "影象大小:(" << nSizeX << ", " << nSizeY << ")\n";
    cout << "波段數:" << nBandCount << "\n";

    double adfGeoTransform[6];  //  儲存影象的六引數資訊
    dataset->GetGeoTransform(adfGeoTransform);  // 獲取資料的六引數資訊

    double adfULCoord[2];   // 影象左上角座標
    double adfLRCoord[2];   // 影象右下角座標
    // 獲取左上角和右下角的地理座標
    toGeoCoord(0, 0, adfULCoord, adfGeoTransform);
    toGeoCoord(nSizeX - 1, nSizeY - 1, adfLRCoord, adfGeoTransform);

    cout << std::fixed; // 對於double型別的資料可以使其正常輸入,阻止預設的科學計數法輸出,
    cout << "左上角座標:(" << adfULCoord[0] << ", " << adfULCoord[1] << ")\n";
    cout << "右下角座標:(" << adfLRCoord[0] << ", " << adfLRCoord[1] << ")\n";

    const char* pszProj = dataset->GetProjectionRef(); // 獲得WKT形式的投影資訊
    cout << "投影資訊:" << pszProj << '\n';

    GDALClose(dataset); // 關閉資料集

    return EXIT_SUCCESS;
}

int main()
{
    const char* pszFileName = R"(/home/zhongyong/Downloads/cut2_GF3207_386435_160203A0.tif)";
    return readGeoRaster(pszFileName);
}

結果並不盡人意,如期而至的報了錯誤,錯誤資訊如下:
在這裡插入圖片描述
提示必須要有C++11,文章的最前面已經提到我所用的g++的版本是4.8.5,通過上網查閱資料它是支援C++11編譯的,但是便已是需要新增 -std=c++0x,在eclipse需要加位置如下圖所示:
在這裡插入圖片描述
在Command的命令上新增-std=c++0x這段內容,再次進行編譯,成功的執行出了結果,如下圖所示:
在這裡插入圖片描述
到此,就成功的可以再Linux系統下的eclipse下進行gdal庫的使用了!

編輯人:邵光輝