Ubuntu基于Docker快速配置GDAL的Python、C++环境
本文介绍在Linux的Ubuntu操作系统中,基于Docker快速配置Python、C++等不同编程语言均可用的地理数据处理库GDAL
的方法。
首先,我们访问GDAL
库的Docker镜像官方网站(https://github.com/OSGeo/gdal/tree/master/docker)。其中,官方网站提供了Alpine和Ubuntu两种不同系统的Docker镜像;并且对于不同的系统版本,其还提供了Small和Full两种不同的镜像内容,其中前者包含的内容相对较少,而后者包含的内容较为齐全(因此后者的镜像大小也就更大一些),关于Small和Full两种不同镜像的具体内容差异,我们这里就不再赘述了,大家在其官方网站查阅即可;具体如下图所示。
在我这里,由于只是需要用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
这一个部分——这一部分是用于挂载主机文件系统中的目录到容器中的命令参数。其中,-v
是Docker命令中用于挂载文件或目录的选项,其后面的/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…...
[题]宝物筛选 #单调队列优化
五、宝物筛选(洛谷P1776) 题目链接 好家伙,找到了一个之前学习多重背包优化时的错误…… 之前记的笔记还是很有用的…… #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帮助类 此类需要编写指定屏蔽的按键,灵活性差。 using System; using System.Runtime.InteropServices; using System.Diagnostics; using System.Windows.Forms; using Microsoft.Win32;namespace MyHookClass {/// <summary>/// 类一/// </su…...

Anaconda Jupyter
🙌秋名山码民的主页 😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 获取源码,添加WX 目录 前言An…...

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

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

TensorFlow学习1:使用官方模型进行图片分类
前言 人工智能以后会越来越发达,趁着现在简单学习一下。机器学习框架有很多,这里觉得学习谷歌的 TensorFlow,谷歌的技术还是很有保证的,另外TensorFlow 的中文文档真的很友好。 文档: https://tensorflow.google.cn/…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...