Windows 安装 GDAL C++库

news2024/11/15 9:36:12

Windows 安装 GDAL C++库

  • 1. 方法1:下载配置网友编译的GDAL版本
    • 1.1 下载
    • 1.2 配置
    • 1.3 测试
    • 1.4 缺点
  • 2. 方法2:自己编译
  • 3. 参考

1. 方法1:下载配置网友编译的GDAL版本

1.1 下载

CSDN: GDAL,geos联合编译的库,版本为1.8.0,只支持Debug X64。实测VS2013可以用。

1.2 配置

下载后,解压后如下所示:
步骤1:将路径C:\gdal18\bin添加到系统Path变量中,否则编译会提示找不到dll。
在这里插入图片描述
步骤2:
在这里插入图片描述
步骤3:
在这里插入图片描述

1.3 测试

#include "gdal_priv.h"
#include "cpl_conv.h" // for CPLMalloc()

int main()
{
	GDALAllRegister(); // 注册所有GDAL支持的数据格式

	// 读取输入文件
	GDALDataset *poSrcDS = (GDALDataset *)GDALOpen("input.tif", GA_ReadOnly);
	if (poSrcDS == NULL)
	{
		printf("Failed to open input file!\n");
		exit(1);
	}

	// 获取输入文件的基本信息
	int nCols = poSrcDS->GetRasterXSize();
	int nRows = poSrcDS->GetRasterYSize();
	int nBands = poSrcDS->GetRasterCount();

	// 创建输出文件
	GDALDriver *poDriver = GetGDALDriverManager()->GetDriverByName("GTiff");
	GDALDataset *poDstDS = poDriver->Create("output.tif", nCols, nRows, nBands, GDT_Float32, NULL);
	if (poDstDS == NULL)
	{
		printf("Failed to create output file!\n");
		exit(1);
	}

	// 读取和写入数据
	float *pafScanline = (float *)CPLMalloc(sizeof(float)* nCols); // 用于存储一行数据
	for (int iBand = 1; iBand <= nBands; iBand++)
	{
		GDALRasterBand *poSrcBand = poSrcDS->GetRasterBand(iBand);
		GDALRasterBand *poDstBand = poDstDS->GetRasterBand(iBand);
		for (int iRow = 0; iRow < nRows; iRow++)
		{
			poSrcBand->RasterIO(GF_Read, 0, iRow, nCols, 1, pafScanline, nCols, 1, GDT_Float32, 0, 0);
			poDstBand->RasterIO(GF_Write, 0, iRow, nCols, 1, pafScanline, nCols, 1, GDT_Float32, 0, 0);
		}
	}
	CPLFree(pafScanline);

	// 关闭文件
	GDALClose(poSrcDS);
	GDALClose(poDstDS);

	return 0;
}

1.4 缺点

缺点显而易见,可能无法适配自己的开发环境。

2. 方法2:自己编译

源码下载地址:http://download.osgeo.org/gdal
如果需要老版本,可以在old_releases/路径下找到更早的版本,这里我继续下载1.8.0(gdal-1.8.0.tar.gz)进行编译并记录。
步骤1:解压gdal-1.8.0.tar.gz,随便放在一个路径下。比如:C:\gdal-1.8.0
步骤2:修改nmake.opt文件,可在gdal-1.8.0中找到
步骤3:修改MSVC_VER=1800,我的VS是2013版,因此这里改为1800,如果你使用其他版本VS,参照下面各个版本Visual Studio MSVC 编译器版本

Visual Studio 2010 (10.0)         1600
Visual Studio 2012 (11.0)         1700
Visual Studio 2013 (12.0)         1800
Visual Studio 2015 (14.0)         1900
Visual Studio 2017 RTW (15.0)     1910
Visual Studio 2017 version 15.3   1911
Visual Studio 2017 version 15.5   1912
Visual Studio 2017 version 15.6   1913
Visual Studio 2017 version 15.7   1914
Visual Studio 2017 version 15.8   1915
Visual Studio 2017 version 15.9   1916
Visual Studio 2019 RTW (16.0)     1920
Visual Studio 2019 version 16.1   1921
Visual Studio 2019 version 16.2   1922
Visual Studio 2019 version 16.3   1923
Visual Studio 2019 version 16.4   1924
Visual Studio 2019 version 16.5   1925
Visual Studio 2019 version 16.6   1926
Visual Studio 2019 version 16.7   1927
Visual Studio 2019 version 16.8, 16.9       1928
Visual Studio 2019 version 16.10, 16.11     1929

步骤4:修改为GDAL_HOME = “C:\gdald”,可改可不改,我改了也没啥用,并不会生成到指定路径,反而生成在了C:\gdal-1.8.0
步骤5: 修改WIN64=NO,这个默认就是生成WIN32
步骤6:修改DEBUG=1,默认就是生成DEBUG版本,如果需要Release,设置为DEBUG=0
步骤7:管理员模式打开,因为我要编译WIN32版本的,因此选择X86,如果你要生成WIN64,那就选择X64
依次执行命令:

cd C:\gdal-1.8.0
nmake /f makefile.vc

大约五六分钟就编译结束了。
在这里插入图片描述
步骤8:新建如下目录结构
将C:\gdal-1.8.0路径里所有DLL文件拷贝到bin文件夹;将所有.h文件拷贝到include文件夹;将所有lib文件拷贝到lib文件夹。
在这里插入图片描述
步骤8:配置和测试参考方法1

3. 参考

[1] Win10(64位) VS2013配置编译GDAL
[2] windows环境下安装和配置GDAL

编译
[1] VS2017编译配置GDAL——超详细,适合初学者!!!
[2] GDAL-3.4.0库 C++版编译

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/431827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware虚拟机搭建

网络步骤 VMWARE虚拟机NAT模式上网设置 VM虚拟机设置 虚拟机全局设置 启动虚拟机选择【虚拟网络编辑器】 如果需要管理员权限点【更改设置】&#xff0c;没有提示这忽略这一步 选择NAT模式&#xff0c;更改下面的子网IP&#xff0c;改成你需要的任何一个子网网段&#xff08;…

KDZD608屏蔽服效率测试仪

一、产品概述 KDZD608型屏蔽服效率试验装置&#xff08;带电作业用屏蔽服屏蔽效率试验装置&#xff09;是对屏蔽服进效率试验的专用设备&#xff0c;广泛用于电力系统、生产厂家和科研单位不可缺少的检测设备。KDZD608型屏蔽服效率试验装置根据最新国家标GB6568.2-86《带电作业…

9.含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度

说明书 MATLAB代码&#xff1a;含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度 关键词&#xff1a;冰蓄冷空调 CCHP-MG 多时间尺度优化 冷热电联供 参考文档&#xff1a;《含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度》完全复现 仿真平台&#xff1a;MATLAB yal…

算法学习day57

算法学习day57 1.力扣647. 回文子串1.1 题目描述1.2分析1.3 代码 2.力扣 516.最长回文子序列2.1 题目描述2.2 分析2.3 代码 3.参考资料 1.力扣647. 回文子串 1.1 题目描述 题目描述&#xff1a; 给定一个字符串&#xff0c;计算这个字符串中有多少个回文子串。 具有不同开始…

TenserRT(一)模型部署简介

第一章&#xff1a;模型部署简介 — mmdeploy 0.12.0 文档 pytorch.onnx.export方法参数详解&#xff0c;以及onnxruntime-gpu推理性能测试_胖胖大海的博客-CSDN博客 我们来谈谈ONNX的日常 - Oldpan的个人博客 初识模型部署 训练&#xff1a;网络结构&#xff08;深度学习框…

【Windows】更换笔记本键盘操作

目录 一、拆旧 1、电脑保持关机状态 2、拆下电池 3、拧开中间这块区域的螺丝 4、拿键盘进行对照&#xff0c;找到对应的固定键盘的螺丝的位置&#xff0c;拧开 5、直接撬起原本的键盘&#xff0c;注意不要扯到下面的排线&#xff0c;小心点 二、换新 6、换新键盘&#…

公司新招了个腾讯拿38K的人,让我见识到了什么才是测试天花板···

5年测试&#xff0c;应该是能达到资深测试的水准&#xff0c;即不仅能熟练地开发业务&#xff0c;而且还能熟悉项目开发&#xff0c;测试&#xff0c;调试和发布的流程&#xff0c;而且还应该能全面掌握数据库等方面的技能&#xff0c;如果技能再高些的话&#xff0c;甚至熟悉分…

ubuntu_修改libc.so.6 或者 libm.so.6的软链接导致sudo ls 等命令失效的解决方法

1. 背景 运行一个binary 应用程序, 提示报错: /lib/x86_64-linux-gnu/libm.so.6: version GLIBC_2.27 not found (required by 我的应用程序string 里一下符号标, 确实没有然后下载了一个 glibc-2.27, 安装到 usr/local/下, 并将 libm-2.27.so 和 libc-2.27.so 复制到 /lib/x8…

点云的处理

一、激光点云 激光点云指的是由三维激光雷达设备扫描得到的空间点的数据集&#xff0c;每一个点云都包含了三维坐标&#xff08;XYZ&#xff09;和激光反射强度&#xff08;Intensity&#xff09;&#xff0c;其中强度信息会与目标物表面材质与粗糙度、激光入射角度、激光波长以…

基于imx8m plus开发板全体系开发教程3:Ubuntu 20.04 编译

前言&#xff1a; i.MX8M Plus 开发板是一款拥有 4 个 Cortex-A53 核心&#xff0c;运行频率 1.8GHz;1 个 Cortex-M7 核心&#xff0c;运行频率 800MHz;此外还集成了一个 2.3 TOPS 的 NPU&#xff0c;大大加速机器学习推理。 全文所使用的开发平台均为与NXP官方合作的FS-IMX8…

websorm启动vue项目修改内容后自动运行内存溢出

手动启动vue项目正常运行&#xff0c;修改部分内容保存后会自动重新run一下&#xff0c; 这个时候就报错内存溢出&#xff0c;然后很悲伤的需要再手动重启一下。 &#xff08;在网上查了好多方法就不单独加链接了&#xff09; 前3个方法都试过对于我的项目无效&#xff0c;第4…

017 - C++ 中的静态(static)

本期我们将讨论 C 中的 static&#xff08;静态&#xff09;。 static 关键字在 C 中有两个意思&#xff0c;这个取决于上下文。 简单了解 第一种情况是在类或结构体外部使用 static 关键字&#xff0c;另一种是在类或者结构体内部使用 static。 基本上我们可以这样理解&am…

背包问题基础与应用

背包问题 理论基础 01背包 背包中的每个物品只能用一次 物品编号重量价值物品1115物品2320物品3430 定义&#xff1a;dp[i][j]表示从下标0-i的物品中任取&#xff0c;放进容量为j的背包的最大价值 初始化&#xff1a; dp [[0] * (bag_size 1) for _ in range(len(weigh…

Java程序内存占用优化实践

目录背景堆内存调整内存还会继续上涨减少线程数量TomcatDubboLogback野线程背景 上了微服务的当&#xff0c;喜欢将服务各种拆分&#xff0c;公有云模式下服务器比较多&#xff0c;还能玩得转。到了私有化部署&#xff0c;有的客户连个技术人员都没有&#xff0c;只想一键启动…

java——《面试题——基础篇》

1、 Java语言有哪些特点 1、简单易学、有丰富的类库 2、面向对象&#xff08;Java最重要的特性&#xff0c;让程序耦合度更低&#xff0c;内聚性更高&#xff09; 3、与平台无关性&#xff08;JVM是Java跨平台使用的根本&#xff09; 4、可靠安全 5、支持多线程 2、面向对象…

Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCVSharp实现Mono12和Mono16位深度的图像保存(C#)

Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCVSharp实现Mono12和Mono16位深度的图像保存&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机保存位深度12/16位图像的技术背景代码案例分享1&#xff1a;引用合适的类文件2&#xff1a;BGAPI SDK在图像回调中联合O…

【GCU体验】基于PaddlePaddle + GCU跑通模型并测试GCU性能

一、环境 地址&#xff1a;启智社区:https://openi.pcl.ac.cn/ 二、计算卡介绍 云燧T20是基于邃思2.0芯片打造的面向数据中心的第二代人工智能训练加速卡&#xff0c;具有模型覆盖面广、性能强、软件生态开放等特点&#xff0c;可支持多种人工智能训练场景。同时具备灵活的可…

STM32理论 —— 定时器、时钟

文章目录 1. 定时器1.1 分类与简介1.1.1 分类与主要功能特点1.1.2 三种常用的定时器简介1.1.3 三种计数模式1.1.4 定时器计数原理 1.2 时钟来源1.3 通用定时器简介1.4 计数溢出时间公式1.4 定时器中断的原理1.5 输入捕获1.6 核心代码1.6.1 通用定时器初始化1.6.2 高级定时器初始…

【Python_Scrapy学习笔记(十三)】基于Scrapy框架的图片管道实现图片抓取

基于Scrapy框架的图片管道实现图片抓取 前言 本文中介绍 如何基于 Scrapy 框架的图片管道实现图片抓取&#xff0c;并以抓取 360 图片为例进行展示。 正文 1、Scrapy框架抓取图片原理 利用 Scrapy 框架提供的图片管道类 ImagesPipeline 抓取页面图片&#xff0c;在使用时需…

领域驱动设计理论实践

战略设计 战略设计是将“混沌”解构成“清晰”的过程&#xff0c;在该过程从开始到结束的历程之中&#xff0c;我们会划分出领域、界定通用语言范围、确定出系统限界上下文以及上下文之间的映射方式。 领域划分 战略设计在领域驱动设计中起着关键作用&#xff0c;因为其决定了…