当前位置: 首页 > news >正文

Ubuntu基于Docker快速配置GDAL的Python、C++环境

  本文介绍在LinuxUbuntu操作系统中,基于Docker快速配置PythonC++等不同编程语言均可用的地理数据处理库GDAL的方法。

  首先,我们访问GDAL库的Docker镜像官方网站(https://github.com/OSGeo/gdal/tree/master/docker)。其中,官方网站提供了AlpineUbuntu两种不同系统的Docker镜像;并且对于不同的系统版本,其还提供了SmallFull两种不同的镜像内容,其中前者包含的内容相对较少,而后者包含的内容较为齐全(因此后者的镜像大小也就更大一些),关于SmallFull两种不同镜像的具体内容差异,我们这里就不再赘述了,大家在其官方网站查阅即可;具体如下图所示。

  在我这里,由于只是需要用GDAL库完成一些读取.tif格式文件的操作,所以并不需要特别完整的GDAL库,所以就选择了Small这个小一点的版本。

  接下来,我们在Ubuntu电脑的终端中执行如下的代码。这里需要注意,由于我需要的是Ubuntu系统的Small版本,所以我就输入如下的代码即可;如果大家使用的是Alpine操作系统,或者是Ubuntu系统的Full版本,那么按照上图中自己所需要的版本对应的名称,修改下述代码并执行即可。

docker pull ghcr.io/osgeo/gdal:ubuntu-small-latest

  运行上述代码,如下图所示。

  稍等片刻,我们就完成了镜像的获取。此时,我们可以通过如下的代码,查看当前电脑中Docker镜像的下载情况(也就是看看我们已经有了哪些镜像)。

docker images

  运行上述代码,如下图所示。

  其中,那个ghcr.io/osgeo/gdal就是我们刚刚下载好的GDAL库的镜像。

  接下来,运行如下的代码,从而基于刚刚下载好的镜像运行一个容器。

docker run -it --rm ghcr.io/osgeo/gdal:ubuntu-small-latest

  其中,docker run是运行容器的命令,-it表示以交互模式运行容器,并分配一个终端,--rm表示在容器停止后自动删除容器;后面的就是我们刚刚下载好的镜像,表示我们要基于这个镜像去运行一个容器。运行上述代码,如下图所示。

  接下来,我们就进入了容器。此时,继续输入如下的代码,查看当前容器中GDAL库的版本信息。

gdalinfo --version

  运行上述代码,如下图所示。可以看到,此时将打印出我们GDAL库的版本信息。

  接下来,我们先通过如下的代码,退出当前镜像,回到终端中。

exit

  运行上述代码,如下图所示。

  我们既然配置了一个GDAL库的Docker镜像,那么后续肯定是需要将一些我们自己电脑中的文件(比如栅格图像、矢量数据等文件)带入到这个镜像的容器中去运行,所以肯定需要这个GDAL库的Docker镜像要和我们Ubuntu电脑中文件可以交互(换句话说,也就是可以读取、修改我们电脑中的文件与数据)。因此,我们在之后进入我们这个GDAL库的Docker镜像的容器时,需要通过如下的代码。

docker run -it --rm -v /home/dell/cppGDAL:/home/dell/cppGDAL ghcr.io/osgeo/gdal:ubuntu-small-latest

  上述代码和我们前面的docker run -it --rm ghcr.io/osgeo/gdal:ubuntu-small-latest相比,很显然是多了-v /home/dell/cppGDAL:/home/dell/cppGDAL这一个部分——这一部分是用于挂载主机文件系统中的目录容器中的命令参数。其中,-vDocker命令中用于挂载文件或目录的选项,其后面的/home/dell/cppGDAL:/home/dell/cppGDAL,则是文件挂载的源目录和目标目录的路径——它指定了主机文件系统中的/home/dell/cppGDAL目录将被挂载到容器内的/home/dell/cppGDAL目录。

  换句话说,上述命令将我的Ubuntu电脑中的/home/dell/cppGDAL目录与GDAL库的Docker镜像的容器中的/home/dell/cppGDAL目录进行了挂载。这样,在容器中对挂载点/home/dell/cppGDAL的操作将反映在主机系统的/home/dell/cppGDAL目录上,反之亦然。

  相当于通过这种方式,只要我将我需要用GDAL库处理的数据、代码等文件,都放在电脑的/home/dell/cppGDAL目录下,那么就可以在容器中对这些数据加以访问和处理。这样即实现了文件的交互,同样可以保证容器不会访问我们电脑中其他文件夹内的数据或者文件,保证了数据的安全。

  如果大家还是没有明白这句代码的意义,不着急,我们先运行上述代码,如下图所示。

  上图中运行完代码,我又不小心多运行了一句pwd代码,大家理解即可。

  为了更清晰地看到前述那一种进入容器的代码的意义,我们做一个如下的对比。如下图所示,这是我们用了那一句包含挂载文件夹命令的代码,进入我们的容器后,执行的操作;可以看到,此时在容器中,我们就可以进入/home/dell/cppGDAL目录下。

  而如果我们并没有挂载文件,而是用了本文中第一次出现的那一句代码进入容器的代码,也就是前面的docker run -it --rm ghcr.io/osgeo/gdal:ubuntu-small-latest代码,进入容器后会发现,cd进入home文件夹后,再ls,是看不到我们这个cppGDAL文件夹的;换句话说,此时我们就没有办法在容器内部读取我们电脑里/home/dell/cppGDAL目录下的文件了——连文件、数据都无法获取,那么这个GDAL镜像肯定也是没有用处的了。

  此外,前面我们还提到,-v /home/dell/cppGDAL:/home/dell/cppGDAL这一个部分可以保证镜像可以且仅可以读取/home/dell/cppGDAL目录下的文件,而不会读取到我们没有挂载的其他文件夹。针对这一个内容,我们再做一个对比。如下图所示,是我们直接在Ubuntu电脑的终端中,进入/home/dell目录的情况;可以很明显地看到,在电脑中的/home/dell目录下,不仅有我们的这个cppGDAL文件夹,还有很多很多其他的文件或者文件夹;而在上上图中,可以看到在容器中,我们进入/home/dell/cppGDAL目录下只能看到这个cppGDAL文件夹,而看不到电脑中这一路径下原本还有的其他文件或者文件夹。所以很明显,相当于我们就是可以在镜像中访问/home/dell/cppGDAL目录,但是无法访问没有挂载的其他文件夹,从而保证了其他无关文件夹的安全性。

  明白了上述内容,就可以开始我们的GDAL操作了。例如,我这里在/home/dell/cppGDAL目录下还有一个TIF文件夹,其中保存了一景遥感影像,那么我就可以通过gdalinfo语句,查看这一栅格数据的信息。如下图所示。

  最后,每一次完成镜像中的操作后,不要忘记通过exit命令,退出镜像。

  至此,大功告成。

欢迎关注:疯狂学习GIS

相关文章:

Ubuntu基于Docker快速配置GDAL的Python、C++环境

本文介绍在Linux的Ubuntu操作系统中,基于Docker快速配置Python、C等不同编程语言均可用的地理数据处理库GDAL的方法。 首先,我们访问GDAL库的Docker镜像官方网站(https://github.com/OSGeo/gdal/tree/master/docker)。其中&#x…...

<C++> 哈希表模拟实现STL_unordered_set/map

哈希表模板参数的控制 首先需要明确的是,unordered_set是K模型的容器,而unordered_map是KV模型的容器。 要想只用一份哈希表代码同时封装出K模型和KV模型的容器,我们必定要对哈希表的模板参数进行控制。 为了与原哈希表的模板参数进行区分…...

【数据结构与算法】通过双向链表和HashMap实现LRU缓存 详解

这个双向链表采用的是有伪头节点和伪尾节点的 与上一篇文章中单链表的实现不同,区别于在实例化这个链表时就初始化了的伪头节点和伪尾节点,并相互指向,在第一次添加节点时,不需要再考虑空指针指向问题了。 /*** 通过链表与HashMa…...

MySQL的内置函数

文章目录 1. 聚合函数2. group by子句的使用3. 日期函数4. 字符串函5. 数学函数6. 其它函数 1. 聚合函数 COUNT([DISTINCT] expr) 返回查询到的数据的数量 用SELECT COUNT(*) FROM students或者SELECT COUNT(1) FROM students也能查询总个数。 统计本次考试的数学成绩分数去…...

数据结构与算法-(7)---栈的应用-(3)表达式转换

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…...

Lilliefors正态性检验(一种非参数统计方法)

Lilliefors检验(也称为Kolmogorov-Smirnov-Lilliefors检验)是一种用于检验数据是否符合正态分布的统计检验方法,它是Kolmogorov-Smirnov检验的一种变体,专门用于小样本情况。与K-S检验不同,Lilliefors检验不需要假定数…...

【云原生】配置Kubernetes CronJob自动备份MySQL数据库(单机版)

文章目录 每天自动备份数据库MySQL【云原生】配置Kubernetes CronJob自动备份Clickhouse数据库 每天自动备份数据库 MySQL 引用镜像:databack/mysql-backup,使用文档:https://hub.docker.com/r/databack/mysql-backup 测试、开发环境:每天0点40分执行全库备份操作,备份文…...

基于PSO算法的功率角摆动曲线优化研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

数论知识点总结(一)

文章目录 目录 文章目录 前言 一、数论有哪些 二、题法混讲 1.素数判断,质数,筛法 2.最大公约数和最小公倍数 3.快速幂 4.约数 前言 现在针对CSP-J/S组的第一题主要都是数论,换句话说,持数论之剑,可行天下矣! 一、数论有哪些 数论 原根,素数判断,质数,筛法最大公约数…...

知识分享 钡铼网关功能介绍:使用SSLTLS 加密,保证MQTT通信安全

背景 为了使不同的设备或系统能够相互通信,让旧有系统和新的系统可以集成,通信更加灵活和可靠。以及将数据从不同的来源收集并传输到不同的目的地,实现数据的集中管理和分发。 通信网关完美克服了这一难题,485或者网口的设备能通过…...

asp.net core mvc区域路由

ASP.NET Core 区域路由(Area Routing)是一种将应用程序中的路由划分为多个区域的方式,类似于 MVC 的控制器和视图的区域划分。区域路由可以帮助开发人员更好地组织应用程序的代码和路由,并使其更易于维护。 要使用区域路由&#…...

KNN(下):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…...

Servlet开发-session和cookie理解案例-登录页面

项目展示 进入登录页面,输入正确的用户名和密码以后会自动跳到主页 登录成功以后打印用户名以及上次登录的时间,如果浏览器和客户端都保存有上次登录的信息,则不需要登录就可以进入主页 编码思路 1.首先提供一个登录的前端页面&…...

Polygon Miden:扩展以太坊功能集的ZK-optimized rollup

1. 引言 Polygon Miden定位为zkVM,定于2023年Q4上公开测试网。 zk、zkVM、zkEVM及其未来中指出,当前主要有3种类型的zkVM,括号内为其相应的指令集: mainstream(WASM, RISC-V)EVM(EVM bytecod…...

[题]宝物筛选 #单调队列优化

五、宝物筛选&#xff08;洛谷P1776&#xff09; 题目链接 好家伙&#xff0c;找到了一个之前学习多重背包优化时的错误…… 之前记的笔记还是很有用的…… #include<bits/stdc.h> using namespace std; const int N 1e5 10; int f[N]; int n, m; int v, w, s; int l…...

.NET的键盘Hook管理类,用于禁用键盘输入和切换

一、MyHook帮助类 此类需要编写指定屏蔽的按键&#xff0c;灵活性差。 using System; using System.Runtime.InteropServices; using System.Diagnostics; using System.Windows.Forms; using Microsoft.Win32;namespace MyHookClass {/// <summary>/// 类一/// </su…...

Anaconda Jupyter

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 前言An…...

Unity中Shader的前向渲染路径ForwardRenderingPath

文章目录 前言一、前向渲染路径的特点二、渲染方式1、逐像素(效果最好)2、逐顶点(效果次之)3、SH球谐(效果最差) 三、Unity中对灯光设置 后&#xff0c;自动选择对应的渲染方式1、ForwardBase仅用于一个逐像素的平行灯&#xff0c;以及所有的逐顶点与SH2、ForwardAdd用于其他所…...

简历项目优化关键方法论-START

START方法论是非常著名的面试法则&#xff0c;经常被面试官使用的工具 Situation:情况、事情、项目需求是在什么情况下发生Task:任务&#xff0c;你负责的做的是什么Action:动作&#xff0c;针对这样的情况分析&#xff0c;你采用了什么行动方式Result:结果&#xff0c;在这样…...

TensorFlow学习1:使用官方模型进行图片分类

前言 人工智能以后会越来越发达&#xff0c;趁着现在简单学习一下。机器学习框架有很多&#xff0c;这里觉得学习谷歌的 TensorFlow&#xff0c;谷歌的技术还是很有保证的&#xff0c;另外TensorFlow 的中文文档真的很友好。 文档&#xff1a; https://tensorflow.google.cn/…...

C++ 并发编程实战 第八章 设计并发代码 一

目录 8.1 在线程间切分任务 8.1.1 先在线程间切分数据&#xff0c;再开始处理 8.1.2 以递归方式划分数据 8.1.3 依据工作类别划分任务 借多线程分离关注点需防范两大风险 在线程间按流程划分任务 8.2 影响并发性能的因素 8.2.1 处理器的数量 8.2.2 数据竞争和缓存兵乓…...

设计模式8、装饰者模式 Decorator

解释说明&#xff1a;动态地给一个对象增加一些额外的职责。就扩展功能而言&#xff0c;装饰模式提供了一种比使用子类更加灵活的替代方案 抽象构件&#xff08;Component&#xff09;&#xff1a;定义一个抽象接口以规范准备收附加责任的对象 具体构件&#xff08;ConcreteCom…...

抖音开放平台第三方代小程序开发,一整套流程

大家好&#xff0c;我是小悟 抖音小程序第三方平台开发着力于解决抖音生态体系内的小程序管理问题&#xff0c;一套模板&#xff0c;随处部署。能尽可能地减少服务商的开发成本&#xff0c;服务商只用开发一套小程序代码作为模板就可以快速批量的孵化出大量的商家小程序。 第…...

Flutter笔记:滚动之-无限滚动与动态加载的实现(GetX简单状态管理版)

Flutter笔记 无限滚动与动态加载的实现&#xff08;GeX简单状态管理版&#xff09; 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq…...

前端架构师之02_ES6_高级

1 类和继承 1.1 class类 JavaScript 语言中&#xff0c;生成实例对象的传统方法是通过构造函数。 // ES5 创建对象 // 创建一个类&#xff0c;用户名 密码 function User(name,pass){// 添加属性this.name name;this.pass pass; } // 用 原型 添加方法 User.prototype.sho…...

VScode多文件编译/调试配置

之前都是在Visual Studio写C/C&#xff0c;最近想换到VScode&#xff0c;折腾半天把launch.json和tasks.json配好了&#xff08;虽然不懂为什么&#xff0c;但确实能用了&#xff09;&#xff0c;在此做个记录。 参考资料&#xff1a;1&#xff0c;2&#xff0c;3 环境&#…...

K折交叉验证——cross_val_score函数使用说明

在机器学习中&#xff0c;许多算法中多个超参数&#xff0c;超参数的取值不同会导致结果差异很大&#xff0c;如何确定最优的超参数&#xff1f;此时就需要进行交叉验证的方法&#xff0c;sklearn给我们提供了相应的cross_val_score函数&#xff0c;可对数据集进行交叉验证划分…...

2023.09.30使用golang1.18编译Hel10-Web/Databasetools的windows版

#Go 1.21新增的 log/slog 完美解决了以上问题&#xff0c;并且带来了很多其他很实用的特性。 本次编译不使用log/slog 包 su - echo $GOPATH ;echo $GOROOT; cd /tmp; busybox wget --no-check-certificate https://go.dev/dl/go1.18.linux-amd64.tar.gz;\ which tar&&am…...

React简介

react作为前端主流框架之一&#xff0c;因其语法接近原生JavaScript语法而广受欢迎。其生态丰富&#xff0c;常用的就有react-router、react-redux等插件&#xff0c;还有与其匹配的UI组件库antd。而且其还有用于移动端开发的react-native库&#xff0c;因此&#xff0c;react值…...

链表经典面试题(一)

面试题 1.反转链表的题目2.反转链表的图文分析3.反转链表的代码实现 1.反转链表的题目 2.反转链表的图文分析 我们在实现反转链表的时候,是将后面的元素变前面&#xff0c;前面的元素变后面&#xff0c;那么我们是否可以理解为&#xff0c;用头插法的思想来完成反转链表呢&…...

为什么做美妆网站/重庆网站制作系统

目录 一. 介绍 基本介绍 JSON和JS对象的区别 二.JSON与其他类型的转换 JS对象与JSON转换 Java对象与JSON转换 三.Json语法 定义JSON格式数据 获取JSON格式数据中的值 遍历JSON数据 使用注解 四.案例-校验用户名是否存在 一. 介绍 基本介绍 JavScript Object Not…...

企业网站的建设毕业论文/网站空间费用一年多少

本文是MapReduce论文的学习笔记。MapReduce框架需要使用者提供map和reduce函数&#xff0c;map函数将一个键/值输入转换成一组中间键/值&#xff0c;然后reduce函数将所有具有相同键的中间键值对进行合并&#xff0c;而其他的任务调度、文件分割、容错处理等工作都由框架来完成…...

帝国cms小说阅读网站模板/电商线上推广

3.7、线程属性1.线程属性函数有哪些2.线程函数介绍①pthread_attr_init②pthread_attr_destroy③pthread_attr_setdetachstate④pthread_attr_getdetachstate⑤pthread_attr_getstacksize3.一些线程属性函数的使用1.线程属性函数有哪些 使用命令 man pthread_attr_ <tab&g…...

哪个企业的网站做的比较好/互联网产品推广是做什么的

作为开发者&#xff0c;经常需要面对影响整个应用架构的决策。而Web开发者的核心决策之一&#xff0c;就是应用逻辑与渲染工作的实现&#xff0c;应处于架构中的什么位置&#xff08;译注&#xff1a;客户端 or 服务器&#xff1f;&#xff09;。现在有很多不同构建网站的方法&…...

盐城网站建设培训/郑州建网站的公司

PHP框架CI CodeIgniter 的log_message開啟日志記錄方法第一步&#xff1a;index.php文件&#xff0c;修改環境為開發環境define(‘ENVIRONMENT’, ‘development’);第二步&#xff1a;application/config/config.php文件修改$config[‘log_threshold’] 4; //0表示關閉&#…...

大连城建设计研究院网站/深圳外包网络推广

1. 什么是gcc gcc的全称是GNU Compiler Collection&#xff0c;它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器&#xff08;GNU C Compiler&#xff09;&#xff0c;现在除了c语言&#xff0c;还支持C、java、Pascal等语言。gcc支持多种硬件平台。 2. gcc的特…...