【GDAL】Windows下VS+GDAL开发环境搭建
Step.0 环境说明(vs版本,CMake版本)
本地的IDE环境是vs2022,安装的CMake版本是3.25.1。
Step.1 下载GDAL和依赖的组件
编译gdal之前需要安装gdal依赖的组件,gdal所依赖的组件可以在官网文档找到,可以根据自己的开发需求来下载编译相应的组件,在这里仅支持常用的数据及功能,所以就只下载了sqlite,libtiff,proj者几个依赖组件,下载的地址如下:
sqlite:https://www.sqlite.org/download.html ,根据自身的操作系统选择要下载的二进制文件。

libtiff:https://download.osgeo.org/libtiff/,我这里选择的是4.6.0版本。
proj:https://proj.org/en/9.3/download.html。
gdal:https://download.osgeo.org/gdal/,我下载的是3.8.2版本。
以上源码包已经上传,以上链接访问不了的可以直接下载:下载gdal相关源码包
Step.2 编译Sqlite
2.1 将之前下载的sqlite的三个压缩包全部解压到一个目录下。

2.1 在vs中新建一个名为SqliteCompile的空项目,将sqlite3.c和sqlite3.def文件导入源文件,将sqlite3.h和sqlite3ext.h导入头文件。

2.3 配置项目属性:
(1)配置平台和生成的目标类型(lib静态库)

(2)配置预处理器定义:

在预处理器定义中填入以下配置:
_USRDLL
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_UNLOCK_NOTIFY
(3)设置模块定义文件:

(4)编辑模块定义文件,在sqlite3.def文件后添加 sqlite3_unlock_notify:

(5)生成Release静态库:

可以在项目目录中看到已经生成了lib静态库:

(6)拷贝文件至指定目录:在sqlite的成品目录下新建bin, lib, include三个目录,bin目录放入解压的exe可执行文件,include目录中放入.h头文件,lib目录中放入上一步生成的lib库文件:

Step.3 编译libtiff
(1)将之前下载的libtiff源码包解压
(2)打开CMake,输入源码目录和build目录(libtiff源码目录下的build目录),点击Configure按钮。

(3)配置vs的版本和生成的平台,配置好之后点击Finish,然后点击主界面的Configure:

(4)输出框打印了Configuring done即说明配置成功了,可以修改安装libtiff的路径,搜索框中搜索“CMAKE_INSTALL_PREFIX”,设置安装路径,之后点击Generate生成文件:

生成成功打印“Generating done”,这时可以在build目录中看到生成了vs的项目文件,点击“Open Project”按钮打开文件:


(5)在VS中设置生成Release版本及平台(和之前的sqlite保持一致,后面的编译过程也是如此),生成ALL_BUILD和INSTALL两个项目,生成成功后在之前CMAKE设置的“CMAKE_INSTALL_PREFIX”路径下可以看到生成的文件。


Step.4 编译proj
(1)将下载的proj源码包解压,打开CMake,选择源码目录和build目录(在proj源码目录下新建build目录),设置完成后点击Configure按钮,设置vs版本和生成的平台:

(2)生成过程中会报错,查看日志是因为没有找到sqlite3,这里搜索SQLITE3配置项,设置sqlite3的include目录、lib文件和可执行文件,顺便再把生成目标文件的目录一并设置了,设置好之后再次点击Configure:


(3)配置后还是报错,查看日志发现找不到TIFF,这里参考上一个步骤的方法搜索TIFF相关的配置,配置libtiff的include目录和lib路径,配置后再次Configure:

(4)配置完成后还是报错,日志中打印缺少Curl,这里可以取消ENABLE_CURL的勾选使其不依赖curl,再次Configure。另外,如果本地访问不了github的话会报拉取代码失败的错误,这时可以取消BUILD_TESTING选项的勾选。


(5)还是报错“projsync requires Curl”,因为我们没有编译Curl,而projsync依赖Curl,自然配置projsync也就失败了,这里可以去掉BUILD_PROJSYNC的选项

(6)打印Configuring done即说明配置完成,再点击Generate按钮生成项目文件,打印“Generating done”即说明生成成功:

(7)点击打开项目按钮,在vs中设置生成Release版本,选择正确的平台,生成ALL_BUILD和INSTALL两个项目,生成成功后在之前设置的“CMAKE_INSTALL_PREFIX”路径下生成了PROJ相关的文件:


至此,编译proj的前序工作就完成了,下面就可以开始编译gdal了。
[TIPS] CMake输入参数时建议不要直接复制到文本框,最好使用选择目录活文件的方式填入,编译proj的时候由于CMake配置目录的斜杠与反斜杠问题导致一个模块编译失败,定位了很久。
Step.5 编译gdal
(1)解压下载的gdal源码包,在解压后gdal的跟路径下创建build目录用于存放CMake生成的临时文件。打开CMake,选择源码目录和build目录。

(2)点击Configure,设置平台类型和vs的版本后进行配置,发现报找不到PROJ的错误,配置proj的路径和生成二进制的路径,再点击配置。


(3)稍等片刻后会出现Configuring done,这里一定要注意,虽然Configure完成了,但是我们并没有配置tiff和sqlite的依赖,后面在编译和开发的时候大概率会有问题,所以这里把sqlite和tiff的路径给配置上,当然,这里有很多其他的配置项,后面有时间研究一下对应的功能。


(4)配置完之后点击Generate生成项目文件,然后点击打开项目按钮。

(5)在vs中设置生成Release版本和平台类型,依次生成ALL_BUILD和INSTALL两个项目,生成成功后可以看到目标路径下生成了编译好的二进制文件和一些数据文件。


Step.6 环境验证
通过以上步骤在本地已经配置好了gdal,现在在vs中新建一个c++项目来简单验证一下可用性,这个代码的功能也很简单,就是先注册gdal然后加载一副图像,如果正常执行就说明配置正确。
#include <iostream>
#include <gdal.h>
#include <gdal_priv.h>
using namespace std;int main() {GDALDataset* poDataset;GDALAllRegister();poDataset = (GDALDataset*)GDALOpen("pic.tif", GA_ReadOnly);if (poDataset == NULL){cout << "GDAL Configure OK";}return 0;
}
在执行前还需要配置下头文件和库的目录,在项目的属性中分别配置编译gdal生成的include目录,lib目录和lib文件路径:



这样配置后还没完,因为依赖了一些资源文件,所以需要把依赖的资源文件添加到项目中。在解决方案管理器中添加gdal.dll,proj_9_3.dll,tiff.dll三个资源文件,每个资源文件右键设置属性,设置类型为复制文件。

至此,gdal的开发环境搭建就ok了,就可以进行基于gdal的一些开发了,ENJOY!!!
相关文章:
【GDAL】Windows下VS+GDAL开发环境搭建
Step.0 环境说明(vs版本,CMake版本) 本地的IDE环境是vs2022,安装的CMake版本是3.25.1。 Step.1 下载GDAL和依赖的组件 编译gdal之前需要安装gdal依赖的组件,gdal所依赖的组件可以在官网文档找到,可以根据…...
基于sumo实现交通灯控制算法的模板
基于sumo实现交通灯控制算法的模板 目录 在windows安装run hello world networkroutesviewsettings & configurationsimulation 交通灯控制系统 介绍文件生成器类(FileGenerator)道路网络(Network)辅助函数生成道路网络&am…...
设计模式之单例模式的懒饿汉
懒汉式 说白了就是你不叫我我不动,你叫我我才动。 类初始化模式,也叫延迟占位模式。在单例类的内部由一个私有静态内部类来持有这个单例类的实例。因为在 JVM 中,对类的加载和类初始化,由虚拟机保证线程安全。 public class Singl…...
多平台多账号一站式短视频管理矩阵营销系统下载
矩阵营销系统多平台多账号一站式管理,一键发布作品。智能标题,关键词优化,排名查询,混剪生成原创视频,账号分组,意向客户自动采集,智能回复,多账号评论聚合回复,免切换&a…...
go work
vscode gopls插件工具依赖go work,否则会报错 https://github.com/golang/tools/blob/master/gopls/doc/workspace.md Go 1.18 新特性多模块工作区教程-让多模块开发变得简单 - Go语言中文网 - Golang中文社区...
基于JavaWeb+BS架构+SpringBoot+Vue智能菜谱推荐系统的设计和实现
基于JavaWebBS架构SpringBootVue智能菜谱推荐系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 目 录 目 录 III 第一章 概述 1 1.1 研究背景 1 1.2研究目的及意义 1 1.3…...
SpringSecurity集成JWT实现后端认证授权保姆级教程-授权配置篇
🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主 📌 擅长领域:全栈工程师、爬虫、ACM算法 💒 公众号:知识浅谈 🔥网站…...
关系型非关系型数据库区别,以MongoDB为例在express中连接MongoDB示例
目录 关系型数据库 关系型数据库常见的类型有: 关系型数据库的优点包括: 非关系型数据库 非关系型数据库常见的类型有: 非关系型数据库的特点包括: 关系型数据库和非关系型数据库区别 MongoDB是什么 MongoDB优势ÿ…...
Java版商城:Spring Cloud+SpringBoot b2b2c实现多商家入驻直播带货及 免 费 小程序商城搭建的完整指南
随着互联网的快速发展,越来越多的企业开始注重数字化转型,以提升自身的竞争力和运营效率。在这个背景下,鸿鹄云商SAAS云产品应运而生,为企业提供了一种简单、高效、安全的数字化解决方案。 鸿鹄云商SAAS云产品是一种基于云计算的软…...
【Spring Boot】SpringBoot maven 项目创建图文教程
创建一个Spring Boot项目并使用Maven进行构建是一项相对简单的任务。以下是使用IntelliJ IDEA创建Spring Boot Maven项目的详细教程: 步骤 1:安装 IntelliJ IDEA 确保你已经安装了最新版本的 IntelliJ IDEA。你可以从官方网站下载并安装。 步骤 2&am…...
【Python】Sigmoid和Hard Sigmoid激活函数对比总结及示例
Sigmoid和Hard Sigmoid是两种常用的激活函数,它们在神经网络中起到非线性变换的作用。以下是它们之间的对比和优缺点总结: Sigmoid激活函数: 优点: 输出范围是0到1之间,可以用于二分类问题。函数形状相对平滑&#…...
ajax+axios——统一设置请求头参数——添加请求头入参——基础积累
最近在写后台管理系统(我怎么一直都只写管理系统啊啊啊啊啊啊啊),遇到一个需求,就是要在原有系统的基础上,添加一个仓库的切换,并且需要把选中仓库对应的id以请求头参数的形式传递到每一个接口当中。。。 …...
Redis高可用(主从复制、哨兵模式和Cluster集群)
目录 前瞻 主从复制 哨兵 集群 主从复制 主从复制的作用 主从复制流程 搭建Redis主从复制 实验准备 实验流程 修改 Redis 配置文件(Master节点操作) 修改 Redis 配置文件(Slave节点操作) 验证主从效果 哨兵模式 哨兵…...
【Web】CTFSHOW PHP命令执行刷题记录(全)
目录 web29 web30 web31 web32 web33 web34 web35 web36 web37-39 web40 web41 (y4✌脚本) web42 -44 web45 web46 -49 web50 web51 web52 web53 web54 web55-56 web57 web58 web59 web60 web61 web62 web63-65 web66-67 w…...
鸿蒙开发已解决-Failed to connect to gitee.com port 443: Time out 连接超时提示
文章目录 项目场景:问题描述原因分析:解决方案:解决方案1解决方案2:解决方案3:此Bug解决方案总结解决方案总结**心得体会:解决连接超时问题的三种方案**项目场景: 导入Sample时遇到导入失败的情况,并提示“Failed to connect to gitee.com port 443: Time out”连接超…...
使用cURL命令在Linux中测试HTTP服务器的性能
cURL是一个强大的命令行工具,用于从或向服务器传输数据。它支持多种协议,包括HTTP、HTTPS、FTP等。在Linux系统中,cURL可以用于测试和评估HTTP服务器的性能。下面是一些使用cURL命令测试HTTP服务器性能的示例和说明。 1. 基本请求 要向指定…...
机器学习 -- 余弦相似度
场景 我有一个 页面如下(随便找的): 我的需求是拿到所有回答的链接, 再或者我在找房子网上,爬到所有的房产信息,我们并不想做过多的处理,我只要告诉程序,请帮我爬一个类似 xxx 相似…...
LeNet-5(fashion-mnist)
文章目录 前言LeNet模型训练 前言 LeNet是最早发布的卷积神经网络之一。该模型被提出用于识别图像中的手写数字。 LeNet LeNet-5由以下两个部分组成 卷积编码器(2)全连接层(3) 卷积块由一个卷积层、一个sigmoid激活函数和一个…...
Unity中URP下开启和使用深度图
文章目录 前言一、在Unity中打开URP下的深度图二、在Shader中开启深度图1、使用不透明渲染队列才可以使用深度图2、半透明渲染队列深度图就会关闭 三、URP深度图 和 BRP深度图的区别四、在Shader中,使用深度图1、定义纹理和采样器2、在片元着色器对深度图采样并且输…...
类似东郊到家上门预约系统需要具备哪些功能,预约系统应该怎么做
随着上门服务需求的持续增长,各类APP小程序应运而生。吸引了无数商家投资者,纷纷想要开发一款类似于"东郊到家"这样的上门服务软件。要想成功,这样的软件需具备以下核心功能: 1. 快速注册与登录:用户能通过手…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
