win10、vs2015配置GDAL2.4.1

win10、vs2015配置GDAL2.4.1

首先,安装好vs15(其他版本也可以),下载好gdal安装包,可以去官网下载需要的版本, 但是我在配置最新版3.0.2的时候出现了错误,所以选择了之前的版本2.4.1(原因就没有去看了),这里我选择的是 zip 格式。

1、解压文件

将下载好的gdal解压到自定义目录,比如我的是D:\software\gdal241
在这里插入图片描述

2、修改解压文件目录下的 makefile.opt 文件

  1. 进入解压后的目录,找到nmake.opt文件并打开,打开方式选择Editplus、vs等都可,我选择vs打开;
  2. 找到57行(也可能是附近几行),修改 GDAL_HOME = “C:\warmerda\bld” 内容为你解压的文件夹路径;在这里插入图片描述
  3. 将191行(也可能是附近几行)中 #WIN64=YES去掉前面的 “#”;在这里插入图片描述
  4. 点击保存后关闭文件。

3、编译

在搜索中输入cmd后回车,选择VS2015 ×64 本机工具命令提示符。

  1. 输入cd D:\software\gdal241 ,回车;cd后面是你gdal解压的文件路径,按照你自己的路径输入。这样就进入到gdal路径里面了,我们在这个路径下操作。
    在这里插入图片描述
  2. 输入第一个命令: nmake -f makefile.vc ,输入完成后回车,如下图2-1,等待编译完成,这需要等待几分钟,完成后如图2-2;

图2-1
在这里插入图片描述图2-2
在这里插入图片描述
3. 键入第二个命令: nmake /f makefile.vc install , 输入完成后回车,如下图3-1,等待编译完成,这需要等待几分钟,完成后如图3-2;

图3-1
在这里插入图片描述
图3-2
在这里插入图片描述

  1. 键入第三个命令: nmake /f makefile.vc devinstal ,输入完成后回车,如下图4-1,等待编译完成,这需要等待几分钟,完成后如图4-2;

图4-1
在这里插入图片描述
图4-2
在这里插入图片描述

4、在VS2015中配置

  1. 编译完成,关闭cmd窗口。进入到vs中,创建一个空项目,为了避免调试的错误,提前设置这个为×64;
    在这里插入图片描述
  2. 然后点击新建的项目,右键 -> 属性 按着下图配置,在包含目录添加gdal文件中的include文件夹路径、库目录中添加lib文件夹路径;
    在这里插入图片描述
  3. 进入链接器->常规->附加库目录,添加lib文件夹路径;
    在这里插入图片描述
  4. 进入链接器->输入->附加依赖项,添加gdal_i.lib,点击确定。
    在这里插入图片描述

5、测试

将D:\software\gdal241\bin 下的gdal204.dll 复制,粘贴到刚才新建的vs项目的debug/bin 下 ,注意生成解决方案平台与放入的目录平台一致。如我的都是: Debug/x64。
至此,gdal已经配置完成,写一段代码测试一下看看是否成功了!
我参照博客案例中代码进行测试,运行结果会在D盘下生成一个newShp.shp。

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//

#include <ogrsf_frmts.h>
#include <gdal_priv.h>
#include <ogr_geometry.h>
#include <iostream> 
//生成shp文件
int main()
{
	const char *pszDriverName = "ESRI Shapefile";
	GDALDriver *poDriver;
	CPLSetConfigOption("SHAPE_ENCODING", "UTF-8"); //避免乱码
	GDALAllRegister();
	poDriver = GetGDALDriverManager()->GetDriverByName(pszDriverName);
	if (poDriver == NULL)
	{
		printf("%s driver not available.\n", pszDriverName);
		return 0;
	}
	GDALDataset *poDS;

	poDS = poDriver->Create("d:/newShp.shp", 0, 0, 0, GDT_Unknown, NULL); //创建shp文件
	if (poDS == NULL)
	{
		printf("Creation of output file failed.\n");
		return 0;
	}
	OGRLayer *poLayer;
	poLayer = poDS->CreateLayer("point_out", NULL, wkbPoint, NULL);
	if (poLayer == NULL)
	{
		printf("Layer creation failed.\n");
		return 0;
	}
	OGRFieldDefn idField("ID", OFTReal);
	OGRFieldDefn firstField("NAME", OFTInteger);
	OGRFieldDefn secondField("X", OFTReal);
	OGRFieldDefn thirdField("Y", OFTString);
	idField.SetWidth(32);
	firstField.SetWidth(32);
	secondField.SetWidth(32);

	poLayer->CreateField(&idField);
	poLayer->CreateField(&firstField);
	poLayer->CreateField(&secondField);
	poLayer->CreateField(&thirdField);


	int x, y;
	int a = 10, b = 100;
	for (int i = 1; i <= 10; i++)
	{
		OGRFeature *poFeature;
		poFeature = OGRFeature::CreateFeature(poLayer->GetLayerDefn());
		poFeature->SetField("ID", i);
		poFeature->SetField("NAME", i);
		x = (rand() % (b - a)) + a;
		y = (rand() % (b - a)) + a;
		poFeature->SetField("X", x);
		poFeature->SetField("Y", "你好,弟中弟");
		OGRPoint pt;
		pt.setX(x);
		pt.setY(y);
		poFeature->SetGeometry(&pt);
		if (poLayer->CreateFeature(poFeature) != OGRERR_NONE)
		{
			printf("Failed to create feature in shapefile.\n");
			return 0;
		}
		OGRFeature::DestroyFeature(poFeature);
	}
	GDALClose(poDS);
	return 1;
}

查看运行结果:
在这里插入图片描述

发布了18 篇原创文章 · 获赞 10 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41135605/article/details/103673368
今日推荐