【Python实例】Python读取并绘制tif数据

【Python实例】Python读取并绘制tiff数据

  • Python实例-以全球不透水面积数据为例
    • 数据准备:全球不透水面积数据
    • 基于gdal库绘制tif图
    • 基于Rasterio库绘制tif图
  • 参考

GeoTIff 是一个标准的.tif 文件或是一个图像文件格式,它包含了一些额外的空间信息,这些信息被当成附属信息(tag),集成在.tif文件内。这些附属信息包含了空间范围、地理参考系统(CRS)、分辨率,以及每一个像素的值。基于此,GeoTiff是一种非常理想的遥感影像和航空相片分发格式。

Python实例-以全球不透水面积数据为例

数据准备:全球不透水面积数据

以全球不透水面积数据为例,数据下载-全球1985-2022逐年不透水层数据(Version 2024)
在这里插入图片描述

  • 资源详情
    GAIA (1985-2024)为GAIA(1985-2018)的更新版本。代表性年份(1985年、1990年、1995年、2000年、2005年、2010年和2015年)的GAIA数据总体精度超过90%。GAIA的时间趋势与其他局域、地区和全球尺度的数据集一致。更多细节可以在相关论文中找到(Gong et al., 2020)。
  • 元数据信息
    参考坐标系: WGS84 - EPSG:4326
    空间分辨率: 30米
    空间覆盖范围: (xmin, xmax, ymin, ymax) - (-180, 180, -60, 80)
    时间分辨率: 1985-2024 (逐年)
    数据格式: GeoTiff
  • 像元值:像元值表示城市出现的频率(0-40)
    0: 非城市区域
    1: 2024年新增城市区域
    2: 2023年新增城市区域

    40: 1985年及之前存在的城市区域
  • 数据格网
    GAIA数据基于渔网格网以5°×5°的数据图幅存储。格网文件以“fishnet_shp”目录提供,可供查找感兴趣区域。
  • 命名规则
    每个数据图幅以“GAIA_1985_2024_{longitude}_{latitude}.tif”格式命名,其中,longitude-latitude 指格网左上角经纬度值。另外,每个图幅包含了30米缓冲区范围以便图幅间可以无缝镶嵌。

在GIS中打开界面如下:
在这里插入图片描述

基于gdal库绘制tif图

gdal是最流行的GeoTiff处理库,拥有由C++编写的方法和类。绝大部分的库,诸如georaster等,也是在运用GDAL的基础上,开发出符合Python风格的接口。

from osgeo import gdal
import matplotlib.pyplot as pltdataset = gdal.Open("D:/6 Python Codes/GBA_Data_Process/GAIA/GAIA_1985_2024_110_25.tif", gdal.GA_ReadOnly)
band = dataset.GetRasterBand(1) # 波段序号从1开始,而不是0
plt.figure(figsize=(10, 10))
plt.imshow(band.ReadAsArray())
plt.show()

绘制图形如下:
在这里插入图片描述

设置经纬度等细节,代码如下:

from osgeo import gdal
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
from matplotlib.colors import LinearSegmentedColormap# 设置字体为 Times New Roman
plt.rcParams['font.family'] = 'Times New Roman'# TIFF文件路径
tiff_file = "D:/6 Python Codes/GBA_Data_Process/GAIA/GAIA_1985_2024_110_25.tif"
dataset = gdal.Open(tiff_file, gdal.GA_ReadOnly)# 检查数据集是否成功打开
if dataset is None:raise Exception("Unable to open file")# 读取图像数据
band = dataset.GetRasterBand(1)  # 获取第一波段(波段序号从1开始,而不是0)
image_data = band.ReadAsArray()# 获取仿射变换参数
geo_transform = dataset.GetGeoTransform()# 提取仿射变换参数
top_left_x = geo_transform[0]
pixel_width = geo_transform[1]
top_left_y = geo_transform[3]
pixel_height = geo_transform[5]# 计算经纬度范围
height, width = image_data.shape
lon = np.linspace(top_left_x, top_left_x + pixel_width * width, width)
lat = np.linspace(top_left_y, top_left_y + pixel_height * height, height)# 创建橙色渐变色
cmapOrange = LinearSegmentedColormap.from_list("orange_gradient", ["white", "orange"])# 使用Matplotlib绘制地图
plt.figure(figsize=(10, 8))
img = plt.imshow(image_data, extent=(lon.min(), lon.max(), lat.min(), lat.max()), cmap= cmapOrange)
cbar = plt.colorbar(img, label='Pixel values')
cbar.set_label('Pixel values', fontsize=14)plt.xlabel('Longitude (°)', fontsize=16)
plt.ylabel('Latitude (°)', fontsize=16)
plt.title('GAIA 1985 Year', fontsize=16)# 设置坐标轴刻度值字体大小
plt.tick_params(axis='both', labelsize=14)# 自定义坐标轴刻度值,后面加上°
def format_ticks(x, pos):return f'{x:.2f}°'# 应用自定义格式化函数
plt.gca().xaxis.set_major_formatter(FuncFormatter(format_ticks))
plt.gca().yaxis.set_major_formatter(FuncFormatter(format_ticks))plt.show()

绘制图形如下:
在这里插入图片描述

基于Rasterio库绘制tif图

Rasterio由mapbox团队开发,它提供了一系列用于读取地理空间数据的Python接口,可配合Matplotlib库使用。

代码如下:

import rasterio
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap
from matplotlib.ticker import FuncFormatter# 设置字体为 Times New Roman
plt.rcParams['font.family'] = 'Times New Roman'# 打开TIFF文件
tiff_file = "D:/6 Python Codes/GBA_Data_Process/GAIA/GAIA_1985_2024_110_25.tif"
with rasterio.open(tiff_file) as dataset:# 读取图像数据image_data = dataset.read(1)# 获取仿射变换参数transform = dataset.transform# 计算经纬度范围
height, width = image_data.shape
lon = np.linspace(transform.c, transform.c + transform.a * width, width)
lat = np.linspace(transform.f, transform.f + transform.e * height, height)# 创建橙色渐变色
cmap = LinearSegmentedColormap.from_list("orange_gradient", ["white", "orange"])# 绘制地图
plt.figure(figsize=(10, 8))
img = plt.imshow(image_data, extent=(lon.min(), lon.max(), lat.min(), lat.max()), cmap=cmap)
cbar = plt.colorbar(img, label='Pixel values')
cbar.set_label('Pixel values', fontsize=12)# 设置坐标轴标签
plt.xlabel('Longitude (°)', fontsize=12)
plt.ylabel('Latitude (°)', fontsize=12)
plt.title('TIFF Map', fontsize=14)# 设置坐标轴刻度值字体大小
plt.tick_params(axis='both', labelsize=10)# 自定义坐标轴刻度值,后面加上°
def format_ticks(x, pos):return f'{x:.2f}°'# 应用自定义格式化函数
plt.gca().xaxis.set_major_formatter(FuncFormatter(format_ticks))
plt.gca().yaxis.set_major_formatter(FuncFormatter(format_ticks))plt.show()

绘制图形相同。

参考

1、用Python读取tif格式的dem数据并且将它绘制在经纬度坐标上

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

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

相关文章

Prometheus 抓取 nginx 访问日志的指标

要通过 Prometheus 的 NGINX Exporter 来抓取 NGINX 中的日志信息,例如状态码为 4xx 或 5xx 的日志,需要结合以下几种工具和方法: 1. NGINX Exporter 基础功能 NGINX Exporter 是一个 Prometheus Exporter,用于从 NGINX 的 /sta…

.mkp勒索病毒攻击全攻略:防护、数据恢复与安全建议

导言 随着互联网的发展,勒索病毒的威胁也在不断升级,给个人和企业的数据安全带来了巨大的挑战。其中,[datastorecyberfear.com].mkp、 [tsai.shenmailfence.com].mkp、 [sspdlk00036cock.li].mkp勒索病毒作为一种新型的加密型恶意病毒&#…

Chromium 中HTML5 WebSocket实现分析c++(一)

一、WebSocket前端接口定义: WebSocket 对象提供了用于创建和管理 WebSocket 连接,以及可以通过该连接发送和接收数据的 API。 使用 WebSocket() 构造函数来构造一个 WebSocket。 构造函数 WebSocket(url[, protocols]) 返回一个 WebSocket 对象。 …

如何读书?

如何读书? 方法论、读书、意义、思考背景 对于知识获取一直有一个疑问,那就是如何有效获取知识?这个答案我自己并没有总结出来,其一是本文要谈的读书,其他呢?多了暂未想到,先写读书吧。 恰巧…

System:oneshot类型的service

有的时候,某个进程只在特殊的情况下运行一下即可,不需要一直以服务的形式待命,这种情况下,可以设置service的type为oneshot,然后设置RemainAfterExit=yes。 这样设置的service,即使在其进程启动完成之后退出了,systemd 也仍然会认为这个服务还在运行中,将此服务视为活…

新时代下吉林省城乡流动人才就业问题及路径探析

摘要:新时代背景下,中国经济快速发展,城乡融合发展成为缩小城乡差距,推动共同富裕的重要方式。吉林省作为东北老工业基地,传统产业竞争优势减弱,城乡流动人才就业规模增加,并呈现“农村-城市”的…

prompt learning

prompt learning 对于CLIP(如上图所示)而言,对其prompt构造的更改就是在zero shot应用到下游任务的时候对其输入的label text进行一定的更改,比如将“A photo of a{obj}”改为“[V1][V2]…[Vn][Class]”这样可学习的V1-Vn的token…

业务开发常见问题-并发工具类

hello,大家好,本讲我们一起聊一下常见的几个并发工具类的使用和坑! 在日常工作中,我们经常会遇到多线程并发问题,比如ThreadLocal、锁、ConcurrentHashMap、CopyOnWriteArrayList等。那么如何正常的使用呢?…

【最新通知】2024年Cisco思科认证CCNA详解

CCNA现在涵盖安全性、自动化和可编程性。该计划拥有一项涵盖IT职业基础知识的认证,包括一门考试和一门培训课程,助您做好准备。 CCNA培训课程和考试最近面向最新技术和工作岗位进行了重新调整,为您提供了向任何方向发展事业所需的基础。CCNA认…

blender分离含有多个动作的模型,并导出含有材质的fbx模型

问题背景 笔者是模型小白,需要将网络上下载的fbx模型中的动作,分离成单独的动作模型,经过3天摸爬滚打,先后使用了blender,3d max,unity,最终用blender完成,期间参考了众多网络上大佬…

3.1.1ReactOS系统中搜索给定长度的空间地址区间函数的实现

系列文章目录 //搜索给定长度的空间地址区间 PMADDRESS_SPACE AddressSpace,//该进程用户空间 ULONG_PTR Length,//寻找的空间间隔大小 ULONG_PTR Granularity,//粒度位,表明空间起点的对齐要求,注意是起点地址 ULONG_PTR TopDown);函数的定义&#xf…

【Ansiable】ansible的模块和主机清单

目录 一、介绍一些运维自动化工具 二、Ansible 概述/简介 三、Ansible 工作机制 3.1 内部工作机制 3.2 外部工作机制 四、Ansible 执行流程 五、Ansblie 安装以及日常操作模块***** 5.1 ansible 环境安装部署 5.2 ansible 命令行模块 5.2.1 command 模块 5.2.2 shel…

html5的简单问题

1.html5结构语义化 用正确的标签做正确的事情。 便于团队的开发和维护,在没有加载css的情况下也能呈现较好的内容与结构代码,易于阅读。 有利于seo,提高可访问性。 2.html5新特性 增加:用于媒介回访的video和autio元素&#…

NVIDIA Jetson支持的神经网络加速的量化平台

NVIDIA Jetson支持的神经网络加速的量化工具、技术 NVIDIA Jetson 是专为边缘计算和嵌入式系统设计的高性能计算平台,它支持多种深度学习模型的部署和推理。对于神经网络加速的量化平台,Jetson 支持以下技术和工具: TensorRT:Ten…

Python Bagging算法详解与应用案例

这里写目录标题 Python Bagging算法详解与应用案例引言一、Bagging的基本原理1.1 Bagging的概念1.2 Bagging的步骤1.3 Bagging的优势与挑战 二、Python中Bagging的面向对象实现2.1 DecisionTree 类的实现2.2 Bagging 类的实现2.3 Trainer 类的实现 三、案例分析3.1 使用Bagging…

字符、解释型语言、编程语言的互操作、输出

字符 同样是1,有人看到的是数字,有人看到的是字符,还有人看到的是一个小目标。 不同语言的字符 正则表达式把字符分成普通字符和元字符,元字符为了搭配匹配。比如.代表任意非换行字符,这对于通配很简便,用\…

明源云ERP报表服务GetErpConfig.aspx接口存在敏感信息泄露

一、漏洞简介 在访问 /service/Mysoft.Report.Web.Service.Base/GetErpConfig.aspx?erpKeyerp60 路径时,返回了包含敏感信息的响应。这些信息包括但不限于数据库连接字符串、用户名、密码、加密密钥等。这些敏感信息的暴露可能导致以下风险:数据库访问…

【IPv6】IPv6 NAT66介绍

参考链接 IPv6-to-IPv6 Network Address Translation (NAT66) (ietf.org)https://datatracker.ietf.org/doc/id/draft-mrw-nat66-00.html IPv6 NAT66 NAT66,全称为Network Address Translation for IPv6 to IPv6,是一种用于IPv6网络的地址转换技术。在…

Tkinter -- python GUI学习与使用

前言 python GUI 目前pythonGUI有很多,哪一个最好? 先说说我选择的思路,我的目的是开发一个易用的软件,最重要的是稳定,并且碰到问题能够解决,因此,我的目标很明确,有比较大的用户群…

基于深度学习的对抗攻击的防御

基于深度学习的对抗攻击防御是一项重要的研究方向,旨在提高模型在面对对抗样本时的鲁棒性和安全性。对抗攻击通常通过向输入数据中添加微小扰动,使得深度学习模型做出错误的预测。为了应对这些攻击,研究人员提出了多种防御策略。 1. 对抗训练…