VS2022配置GDAL

news2024/11/15 12:06:52

GDAL(Geospatial Data Abstraction Library)是一个用于处理地理空间数据的开源库。它提供了一组功能丰富的API,用于读取、写入、转换和处理各种地理空间数据格式,包括栅格数据(如卫星图像、数字高程模型)和矢量数据(如矢量地图、矢量数据集)等。GDAL是由Open Source Geospatial Foundation(OSGeo)维护和发展的。

GDAL支持多种常见的地理空间数据格式,包括但不限于:TIFF、JPEG、PNG、HDF、NetCDF、GeoTIFF、Shapefile、FileGDB、SpatiaLite、PostGIS等。它提供了对这些数据格式的读取、写入和转换功能,可以在不同的地理空间数据之间进行格式转换、投影变换、数据子集提取等操作。

GDAL广泛应用于地理信息系统(GIS)、遥感图像处理、地理空间数据处理、地球科学、环境科学等领域。通过GDAL的API,开发者可以在各种编程语言(如C++、Python、Java等)中进行地理空间数据的处理和分析,从而实现地理空间数据的读取、处理、分析和可视化等功能。

需要注意的是,GDAL是一个专注于地理空间数据处理的库,与OpenGL这种图形渲染库在功能和应用领域上有所不同。GDAL主要用于处理地理空间数据的读取、写入和转换等操作,而OpenGL则专注于图形渲染和可视化。两者可以结合使用,例如使用GDAL加载地理空间数据,并将其转换为OpenGL纹理对象,然后使用OpenGL进行地理空间数据的可视化和渲染。

一般来讲,GDAL可以与OpenGL配合使用。GDAL负责读取和处理影像,OpenGL负责渲染影像。

VS2022配置OpenGL+Glad的教程可以参考我的这篇博客(Glad是一个用于管理和加载OpenGL函数指针的C/C++库。它可以生成用于加载OpenGL函数的代码,从而允许开发者在OpenGL应用程序中使用最新的OpenGL功能。Glad提供了简单的、跨平台的方法来加载和管理OpenGL函数指针,以便开发者可以方便地使用OpenGL的各种功能)。

VS2022配置OpenGL+GALD_程序员班长的博客-CSDN博客

一、事先说明

(一)配置的环境

Visual Studio 2022

SQLite----3410200

TIFF----4.5.0

PROJ----9.2.0

GDAL----3.5.3

我这里配置的是Debug版本的环境。

在 GDAL 3 之后,配置 GDAL 之前需要先配置 SQLite 和 PROJ 库,因为 GDAL 在其 3.0 版本之后引入了对 SQLite 和 PROJ 的依赖。

  1. SQLite 是一种嵌入式数据库,广泛用于移动应用和嵌入式系统中。GDAL 3 之后开始使用 SQLite 作为默认的虚拟文件系统(Virtual File System,VFS),用于支持对 SQLite 数据库的读取和写入。配置 SQLite 库后,可以确保 GDAL 正确地使用 SQLite VFS,从而支持从 SQLite 数据库中读取数据集。

  2. PROJ 是一个开源的地理空间坐标参考系统库,用于处理地理坐标的投影、转换和坐标系转换等操作。GDAL 3 之后引入了对 PROJ 库的强制依赖,以支持在 GDAL 中进行地理空间坐标的投影和转换操作。配置 PROJ 库后,可以确保 GDAL 正确地使用 PROJ 库进行地理坐标的处理。

在配置 GDAL 时,需要先安装和配置 SQLite 和 PROJ 库,以满足 GDAL 对它们的依赖要求。这可以确保 GDAL 在运行时能够正确地访问和使用 SQLite 和 PROJ 功能,以支持地理空间数据的读取、处理和转换等操作。

二、具体配置

(一)SQLite配置

首先,我们进入SQLite的官方下载网站(https://www.sqlite.org/download.html),并下载“Source Code”中的第一项sqlite-amalgamation-3410200.zip,以及“Precompiled Binaries for Windows”中的第二项sqlite-dll-win64-x64-3410200.zip与第三项sqlite-tools-win32-x86-3410200.zip,一共是三个文件,如下图所示。这里需要注意,随着SQLite版本的更新,上述三个文件名称最后面的一长串数字会随着改变,大家只需要对照好文件名称前面的字样即可。

随后,将上述下载好的三个压缩包文件解压到同一个文件夹下,我的文件夹是C:\GDAL\SQLite。

 随后,打开Visual Studio 2022,新建一个空项目。

随后,分别在“头文件”与“源文件”处右键,通过“添加”→“现有项...”的方法,将刚刚解压缩得到文件中的C:\GDAL\SQLite\sqlite-amalgamation-3410200\sqlite3.h与C:\GDAL\SQLite\sqlite-amalgamation-3410200\sqlite3ext.h文件放入“头文件”,并将C:\GDAL\SQLite\sqlite-amalgamation-3410200\sqlite3.c与C:\GDAL\SQLite\sqlite3.def文件放入“源文件”。

添加后结果如图所示

接下来,接下来,选中项目名称MySQLite,先在上方的“配置”与“平台”中将二者选择为“所有配置”与“所有平台”。在“C/C++”→“预处理器”中,右侧设置“预处理器定义”,点击“编辑”
填入如下代码

_USRDLL
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_UNLOCK_NOTIFY

 接下来,在“链接器”→“输入”,在右侧配置“模块定义文件”。

找到刚刚解压缩得到的C:\GDAL\SQLite\sqlite3.def文件,按下Shift按钮并右键,选择“复制文件地址”,将其粘贴至“模块定义文件”中。

 之后打开sqlite3.def文件,在其最后一行添加如下的代码。

sqlite3_unlock_notify

 然后选择“属性”→“配置属性”→“常规”,在右侧选择“配置类型”,将其选择为静态库(.lib)。(注意:改成.lib后左侧窗口的链接器会消失)

然后,点击“生成”---“生成解决方案”。(如果你需要Release版本的就在上方切换成Release,我这里是Debug版本)

 可以看到,在Debug文件夹下面多出来三个文件

 此时,在前面提到的SQLite环境所下载的三个压缩包文件解压后所存放的文件夹中,我们新建三个文件夹,分别命名为includelibbin

 随后,首先在刚刚生成的项目的x64\Debug文件夹中,找到MySQLite.lib文件。这里如果大家刚刚生成的是Release版本的项目,那么就是在x64\Release文件夹中。

随后,将其复制到刚刚新建的lib文件夹中。

然后, 将sqlite-amalgamation-3410200文件夹中的sqlite3.hsqlite3ext.h文件复制。

 将其粘贴至刚刚新建立的include文件夹中。

 随后,将sqlite-tools-win32-x86-3410200文件夹中的sqlite3.exe文件复制。

 粘贴至刚刚新建立的bin文件夹中。

SQLite环境就配置完成了。 

(二)CMake配置

接下来,我们开始对CMake软件进行配置。CMake软件是一个跨平台的编译软件,在后期进行PROJ库配置时需要用到。

首先,我们还是在其官方下载网站(https://cmake.org/download/)进行软件的下载。这里我们下载其“Binary distributions”中的第一项即可。



安装的过程记得将CMake添加到环境变量,其他选项默认即可。

 

 安装完毕即可。

(三)PROJ配置

1.配置PROJ库

接下来,我们开始PROJ库的配置。PROJ库是一个地理坐标转换库,用以处理不同的地理坐标数据;因为我们要安装的GDAL库是一个地理数据处理库,因此其固然需要PROJ这一地理坐标转换库来完成各项地理数据操作。

首先,我们在PROJ库的官方下载网站(https://proj.org/download.html)中下载其源代码。

 下载的时候注意不要点击到后面的md5,否则下载的文件是.md5结尾的

随后,将下载后的压缩包解压,并在解压后得到的文件夹中新建立一个build文件夹。

 接下来,打开我们刚刚安装好的CMake软件,并点击Browse Source选择我们的proj根目录,然后点击Browse Build,选择我们新建的build文件夹。随后,点击“Configue

 

 然后选择VS版本,我这里是2022;第二个选项选择处理器的架构(默认是AMD64,即x64),然后点击finish。

 第一次运行会满屏红色错误

接下来,在CMAKE_INSTALL_PREFIX中,配置一个我们后期将要存放PROJ库的路径,我的路径是C:\GDAL;接下来的三个数据,我们分别选择前面配置SQLite环境时,所得到的bin文件夹中的sqlite3.exe文件、include文件夹与MySQLite.lib文件的路径。具体配置如下图所示。

 

 但是还是有错误提示!

查了下官方文档,这是官方的要求

 但是查阅了一下,GDAL 库通常已经包含了对 libtiff 的依赖,并提供了对 TIFF 图像文件的支持。

GDAL 是一个功能强大的地理数据处理库,提供了对多种栅格和矢量地理数据格式的支持,包括 TIFF、JPEG、PNG 等常见格式。当安装了 GDAL 后,通常会自动包含对 libtiff 的依赖,并且可以通过 GDAL 的 API 接口直接读取和处理 TIFF 图像文件,而不需要单独安装 libtiff 库。因此,我们可以点击Advanced,ENABLE_TIFF取消勾选。

但是,防止在使用 GDAL 和 OpenGL 过程中遇到了与 TIFF 图像文件相关的问题,例如无法读取或处理 TIFF 文件,可能需要检查 GDAL 和 OpenGL 配置,并确保其包含了对 libtiff 的正确依赖。如果在某些情况下,可能需要单独安装 libtiff 库就麻烦了,还是现在安装了比较好。

2.配置TIFF

下载最新版的libtiff库,然后解压

下载地址:Index of /libtiff/

 然后打开CMake-gui,源码目录选择解压后的目录,并指定生成目录

点击Configure,选择对应的vs版本,其它选项不用修改,完成后最下方提示Configuring done。

 然后点击Generate,提示Generating done。

 关闭CMake-gui。

以管理员身份打开VS2022,打开项目,选择刚才在build目录生成的tiff.sln文件。

先生成ALL_BUILD

成功。

再生成INSTALL(注意:如果以非管理员打开VS2022,这一步会报错)。

 成功生成到C盘。

3.继续配置PROJ库 

 再次打开CMake-gui,再次编译PROJ库,点击Advanced,把TIFF_INCLUDE_DIRTIFF_LIBRARY_DEBUG补上,再次点击Configure,这时又报出“Could NOT find CURL”的错误。

 把ENABLE_CURL取消勾选,再次点击Configure

 又发出错误提示:projsync requires Curl

 

 然后取消勾选“BUILD_PROJSYNC”,再次点击Configure

 成功。

 点击Generate,成功

这时可以关闭CMake-gui了。

在开始菜单中找到位于Visual Studio 2022软件下的“x64 Native Tools Command Prompt for VS 2022”软件,点击打开。

进入到PROJ的build目录。

执行命令

msbuild ALL_BUILD.vcxproj /p:Configuration="Release"

如果需要编译Debug版本的库,将Release修改为Debug即可。

但是,推荐选择Release,为什么呢?

因为如果选择了Debug,那么再下一步执行"msbuild INSTALL.vcxproj /p:Configuration="Debug",不管是Debug还是Release,都会产生错误。

而且,即使选择的是Release,在Visual Studio软件中无论是Release模式还是Debug模式,都可以成功调用配置好的Release版本的GDAL库。

成功后会显示0个错误,警告的出现并不影响。

 继续输入以下代码。

msbuild INSTALL.vcxproj /p:Configuration="Release"

成功。

此时,前面提到我们在CMake软件中设置了CMAKE_INSTALL_PREFIX所对应的文件夹路径,我的路径是C:\GDAL

在这个路径中,此时我们可以看到其已经自动生成了binincludelibshare四个文件夹。

 

这就完成了PROJ库的配置。

(四)GDAL配置

首先,依然是在其官方下载网站(https://gdal.org/download.html)中进行源代码的下载。

也可以去github下载:Releases · OSGeo/gdal · GitHub

这里下载3.5.3版本,因为在此之后的版本中没有nmake.opt文件,配置起来比较麻烦。

然后解压。

随后,找到其中的nmake.opt文件,并用能够打开文本的软件打开(Visual Studio软件也可以)。

随后,在其42行左右(具体行数可能会随着GDAL库版本的不同而不同)的位置,将等号后的数字修改为自己Visual Studio软件的_MSC_VER值。如果大家不知道自己Visual Studio软件的这一个值是多少,可以参考文章Visual Studio软件_MSC_VER数值(MSVC编译器版本)的获取。

接下来,在66行左右的位置,将这一路径设置为自己希望编译后GDAL库存放的路径。

随后,在130行左右的位置,如果大家需要编译的是Debug版本的GDAL库,则将等号后的数字修改为1即可;需要编译的是Release版本的GDAL库,就不用修改。

随后,在213行左右的位置,如果我们的电脑是64位的Windows系统,就将这一行的注释取消掉即可。

接下来,在245行左右的位置,如果需要动态编译就不用修改,如果需要静态编译就将等号后的数字修改为0。一般我们选择静态编译即可,因此将其修改为0

接下来,在265行左右,需要我们配置PROJ库的一些路径。

其中,第265行是前面我们在CMake软件中设置了CMAKE_INSTALL_PREFIX所对应的文件夹路径下,include文件夹的路径;第269行是这一文件夹中,lib文件夹中proj.lib文件的路径。配置成功如下图所示。

最后,在638行左右,需要我们配置SQLite环境的一些路径。原配置如下。

其中,这里所涉及的文件夹,是前面提到的下载的SQLite压缩包文件解压后所存放的文件夹中,我们新建的、分别命名为includelibbin的那三个文件夹。其中,将include文件夹的路径放在第一个位置,将lib文件夹中的MySQLite.lib文件的路径放在第二个位置。

配置完毕如图所示,如果你不需要使用SQLite,就可以保留注释。

 随后,保存当前nmake.opt文件,并再一次打开“x64 Native Tools Command Prompt for VS 2022”软件,cd进入刚刚解压得到的GDAL库文件夹(也就是nmake.opt文件所在的那个文件夹,这一文件夹下还有一个名为makefile.vc的文件,如下图所示)。

 

如果需要的是Debug版本的GDAL库,直接分别输入并运行以下三句代码即可。

nmake /f makefile.vc WIN64=YES DEBUG=1
nmake /f makefile.vc install
nmake /f makefile.vc devinstall

 ​结果分别如下图所示。

 

 

 如果需要的是Release版本的GDAL库,那么分别输入并运行以下两句代码即可。

nmake /f makefile.vc
nmake /f makefile.vc devinstall

此时,在我们刚刚于nmake.opt文件66行左右处所设定的GDAL库存放路径中,可以看到已经自动生成了相关的文件夹,如下图所示。

 GDAL配置完成。

三、效果测试

新建一个C++的空项目,在源文件右键---添加---新建项。新建一个C++源文件,我这里新建的文件名为main.cpp。

在main.cpp中添加如下代码。

#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可以用了";
    }
    return 0;
}

然后我们还需要把GDAL库导入一下。

首先,在项目名称那右键点击属性,然后点击C/C++下面的常规,在右侧的包含附加目录点击编辑(我这里已经编辑好了)。

 把之前在nmake.opt的第66行设置的GDAL库目录下面的include文件夹所在路径填进来

 

 然后点击链接器---常规---附加库目录进行编辑。

把之前在nmake.opt的第66行设置的GDAL库目录下面的lib文件夹所在路径填进来 

 

 然后点击链接器---输入---附加依赖项,进行编辑

把之前在nmake.opt的第66行设置的GDAL库目录下面的lib文件夹下的gdal.lib文件所在路径添加进来(可以把鼠标光标放在gdal.lib文件,然后按shift+鼠标右键,然后松开,再按A键快速复制文件路径)。

 

 然后确定保存即可。

点击本地Windows调试器,编译运行此代码。

 但是不出意外的话又要出意外了。 

 对于此错误,我们需要把刚刚于nmake.opt文件66行左右处所设定的GDAL库存放路径中的bin文件夹,分别放于系统变量的PATH中,然后重启电脑。

为什么要放到系统变量的PATH中呢?放到用户变量的PATH中可以吗?答案是当然可以。区别在于,对于普通变量,用户变量的优先级大于系统变量;如果变量名相同,则用户变量中的内容会替换掉系统变量中的内容。

但是对于PATH,系统变量的优先级要大于用户变量。

还有一个区别是,用户变量只对当前登录的用户有效(换言之,如果换一个账户登录这台电脑就用不了其他账户设置的用户变量),而系统变量是对所有用户都有效!

详情可参考这三篇文章

VS环境下,关于“找不到 **.dll,无法执行代码,重新安装程序可能会解决此问题。”的四种解决方案_找不到emp.dll,无法继续执行代码_Vete.的博客-CSDN博客

 windows下用户变量和系统变量的优先级_系统变量和用户变量优先级_SJ2050的博客-CSDN博客

Windows 10 / 11 环境变量 (用户变量与系统变量)_Yongqiang Cheng的博客-CSDN博客

最后设置完毕的结果是这样的。

 然后重启电脑。

打开VS2022,继续运行刚才新建的项目。

又提示这个错误,唉。。。。 

 照葫芦画瓢,把tiffd.dll的存放路径也添加到系统变量的PATH中。(在上面配置LIBTIFF的时候,生成INSTALL完毕后可以看到在C盘的Program Files(x86)下生成了tiff文件夹)

 然后确定保存,重启电脑。

再次运行上面新建的项目。

 成功。

GDAL这就配置完成啦。

参考文章

GDAL库在Visual Studio C++环境中的配置 - 简书

windows下编译proj库_proj编译_lxmeng的博客-CSDN博客

WIN10 VS2019下编译GDAL3.0+PROJ6+SQLite_win安装proj6_Zzzxs-的博客-CSDN博客

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

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

相关文章

Jupyter创建Anaconda多个虚拟环境教程

这里写目录标题 1.1界面化创建虚拟环境1.2命令行创建虚拟环境2.查看是否创建成功3.激活虚拟环境pylessonppt4.更改工作目录5.删除6.查看是否删除成功 1.1界面化创建虚拟环境 1.2命令行创建虚拟环境 conda create -n myenv——name pythonx.xmyenv-name:自己定义的环境名称 pyt…

fastjson反序列化漏洞复现

fastjson反序列化漏洞复现 一.影响版本: Fastjson<1.2.24二.实验过程图三.实验步骤四&#xff0c;实验结果以及参考链接 一.影响版本: Fastjson<1.2.24 二.实验过程图 (踩坑) rmijndi环境&#xff1a;java.sql.SQLException: JdbcRowSet (连接) JNDI 无法连接 2、ldapjn…

上海无纺布制造商【盈兹】申请纳斯达克IPO上市,募资1100万美元

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;来自上海的无纺布制造商【盈兹】&#xff0c;近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&#xff0c;股票代码为&#xff08;ETZ&#…

Invalid bound statement (not found)的原因以及解决方法

相信我们在学习Mybatis的时候都出现过 Invalid bound statement (not found) 这个错误&#xff0c;一般由以下几种可能导致这个错误 一&#xff1a;mapper方法名 和 mapper.xml id名不对应 例如&#xff1a; mapper&#xff1a; 对应的mapper.xml 这里建议小伙伴们下载一个插…

Linux中的YUM源仓库和NFS文件共享服务

这里写目录标题 一 、YUM仓库源的介绍和相关信息1.1yum相关介绍1.2 Linux系统各家厂商用的安装源1.3 yum下载方式 二 、 yum 仓库源的三种搭建2.1yum 配置本地源2.2创建ftp源2.3 配置http源2.4 配置yum在线源 三 、NFS的简介3.1 什么是NFS3.2 linux中要使用NFS需要下载的软件包…

User Diverse Preference Modeling by Multimodal Attentive Metric Learning

BACKGROUND 现有模型通常采用一个固定向量去表示用户偏好&#xff0c;在假设——特征向量每一个维度都代表了用户的一种特性或者一个方面&#xff0c;这种方式似乎不妥&#xff0c;因为用户对于不同物品的偏好是不一样的&#xff0c;例如因演员喜欢一部电影&#xff0c;而因特…

C++中的vector容器

文章目录 vector的介绍vector的使用vector的定义vector初始化vector iterator的使用vector空间增长问题vector增删改查vector迭代器失效问题 vector的介绍 vector是封装动态数组的顺序容器。   就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。这也就意味着我…

Java核心技术 卷1-总结-15

自己实现的hashCode方法应该与equals方法兼容 Java核心技术 卷1-总结-15 视图与包装器子范围不可修改的视图同步视图受查视图 并发线程状态新创建线程可运行线程被阻塞线程和等待线程被终止的线程 视图与包装器 子范围 可以为很多集合建立子范围&#xff08;subrange&#x…

机器学习——朴素贝叶斯

目录 一、贝叶斯 1.什么是贝叶斯 3.贝叶斯下的朴素贝叶斯 二、朴素贝叶斯 1.高斯朴素贝叶斯 2.伯努利朴素贝叶斯 3.多项式朴素贝叶斯 前言 在所有的机器学习分类算法中&#xff0c;朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法&#xff0c;比如决策…

【业务数据分析】—— 用户留存分析(以挖掘Aha时刻为例)

目录 一、用户留存是什么 二、为什么要考虑用户留存 1、为什么要考虑用户留存&#xff1f; 2、影响用户留存的可能因素 3、用户留存的3个阶段 三、怎么进行用户留存分析(挖掘Aha时刻) 1、Aha时刻 2、Aha时刻的作用 3、挖掘Aha时刻 一、用户留存是什么 在互联网行业中…

Three——二、加强对三维空间的认识

Three——二、加强对三维空间的认识 接上个例子我们接着往下看 辅助观察坐标系 THREE.AxesHelper()的参数表示坐标系坐标轴线段尺寸大小&#xff0c;你可以根据需要改变尺寸。 使用方法&#xff1a; // AxesHelper&#xff1a;辅助观察的坐标系 const axesHelper new THRE…

Jetson nano B01学习笔记 -- 系统环境配置以及ROS安装

文章目录 一、Jetson nano 简介二、 系统环境配置1、系统镜像烧录2、CUDA环境配置 三、 ROS安装和环境配置总结 一、Jetson nano 简介 Jetson Nano是一款体积小巧、功能强大的人工智能嵌入式开发板&#xff0c;于2019年3月由英伟达推出。它预装Ubuntu 18.04LTS系统&#xff0c;…

有什么好用的远程工具吗

沟通在任何类型的工作中都扮演着重要的角色。但当谈到远程工作时&#xff0c;这一点就更为重要。因此&#xff0c;您的组织必须找到可以让您的团队保持一致的工具。 在某些方面&#xff0c;项目管理扮演着类似的角色。 您会注意到&#xff0c;下面的大多数工具都会直接影响您的…

Android进阶宝典—Koin使用和原理分析

一、理解设计模式 控制反转 是面向对象编程中的一种设计原则&#xff0c;可以用来减低计算机代码之间的耦合度。 实现控制反转最常见的方式叫做依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;&#xff0c;依赖注入(Dependency Injection)和控制反…

提高硬件设计能力的学习路线

不懂硬件的人&#xff0c;会觉得硬件高深莫测&#xff0c;“为什么他改几个电阻、电容就调出来&#xff0c;我弄个半天没搞定&#xff1f;”&#xff0c;“噢&#xff0c;靠的是经验”&#xff0c;但是经验又是什么呢&#xff1f;不能形容&#xff0c;反正就是不明觉厉。 就是…

Git(版本控制:前端git使用全流程)

1.版本控制&#xff08;简单理解&#xff1a;就是软件对每次操作之后提交的记录&#xff09; 文件版本 版本控制软件 版本控制的好处 版本控制的分类 本地版本控制系统 集中化版本控制系统 分布式版本控制系统 2. Git基础概念与工作流程 什么是Git&#xff1f; 开源的…

单片机编程中的裸机编程和多任务系统FreeRTOS系统详解,以及怎么学习FreeRTOS,看哪家的教程?(合集)

单片机编程中的裸机系统和多任务系统 学习了那么久的stm32还停留在裸机&#xff1f;&#xff1f;&#xff1f; 单片机编程中的裸机系统和多任务系统.1 裸机系统1.1轮询系统1.2 前后台系统 2 多任务操作系统3 为什么要学习多任务操作系统&#xff1f;&#xff1f;4 怎么学习Free…

诊断CAPL自动化(6) —— 诊断自动化测试,实战演示

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe,博客目录大全,点击跳转👉 下图是UDS协议测试的部分测试用例,该表格在文章末尾网盘自己获取经过前面几…

Cesium实践(4)——空间数据加载

文章目录 前言几何形体点线面体 标签文字图标 几何文件GeoJsonKMLCZML 三维模型总结 前言 本文介绍Cesium如何加载空间数据&#xff0c;空间数据即明确定义在三维空间中的数据&#xff0c;空间数据包括以下几类&#xff1a;1、几何形体&#xff08;点、线、面、体&#xff09;…

“支付+SaaS”赋能传统产业数字化转型

易观&#xff1a;传统支付业务利润空间在政策监管和市场竞争下不断被压缩&#xff0c;多家上市支付机构逐步将业务经营重点转移切入到企业交易环节&#xff0c;为企业提供包括SaaS服务、行业解决方案、营销服务及金融科技服务等在内的企业服务收入成为新的增长点。 伴随着“十四…