在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库的使用了!

编辑人:邵光辉

猜你喜欢

转载自blog.csdn.net/DoctorCuiLab/article/details/85123566
今日推荐