如何通过Python下载GSMap数据集(解决.dat无法打开的问题)?

news2024/9/29 13:16:08

目录

01 前言

02 GSMap-MVK的存储方式和数据集介绍

03 代码实现


01 前言

这么晚了我还是希望将这篇博客写一下,记录生活。

我所下载的数据集为GSMap-MVK数据集,延迟大概2.5月左右我记得.边下载我就想着先处理着吧。

例如,其中一个文件如下:
gsmap_mvk.20190101.1400.v7.2112.0.dat.gz

解压之后:
gsmap_mvk.20190101.1400.v7.2112.0.dat
发现是ENVI默认格式,于是尝试使用ArcGIS打开,发现是一种不支持的格式,我想可能是因为这种.dat只能ENVI打开吧,于是使用ENVI再次打开,无果。猜测是否可能是hdf4/hdf5/nc4,发现均不是,我明白我遇到对手了,再次确认数据没有下载错误并尝试了其他文件,均是如此。于是寻找博客文档等。发现确实一些博客解决了问题,但是没有说清楚为什么需要如此操作,于是去找官网等等途径了解数据集。现如下。

02 GSMap-MVK的存储方式和数据集介绍

这是JAXA关于GSMap相关数据格式的解释文档链接:http://sharaku.eorc.jaxa.jp/GSMaP/document/DataFormatDescription.pdf

 或许该文档已经过时了,因为我的数据集是GSMap-MVK,但是我并没有找到MVK的说明,然后既然MVK是标准版,那我们就拿和他最接近的GSMap-Gauge数据集(不仅仅是这个原因而是通过文档发现大部分的.dat数据集都是以该方式进行存储)的存储方式进行解析。

通过Gauge的Data format我们了解到,其.dat文件是由4个字节的浮点数构成的,那么这就好办了。一开始我以为.dat里面应该存在很多其他东西,没想到只含有一堆关于降水率的四字节浮点数,没有存储其他任何东西包括坐标系等。

所以,坐标系等等呢?继续翻看文档:

 发现经纬度的分辨率为0.1°,覆盖范围为0~360, 60°N~60°S,左上角像元的中心坐标为(59.95°N, 0.05°E)。那么基本上仿射参数也就有了。

另外,我们还需要影像的行列数才行,于是翻看文档:

 可以发现,对于所有二进制文件(就是那些多少多少字节的浮点数之类的文件),其行列数为3600rows×1200lines,刚刚看到这个时我有点蒙了,为什么都是行,然后猜测既然东西跨度那么大按道理应该时3600行1200列,正好文档有一幅图吻合我的猜测(如下)。

图像的基本信息可视化如下:

至于坐标系是什么,说实话,对于没有直接说明坐标系或者仅仅提供一些参数或者经纬度数据集的,我一般都是按照WGS84坐标系进行输出,因为它是默认的。

另外需要说明的缺失值问题,参考文档:

 如果你的数据集是2008年前的,那么缺失值全部设置是0,若是2018年往后,那么缺失值设置为-4、-8、-99,因为我一视同仁,而且降水率/降水量不可能为负数,所以将所有为负值的数全部设置为NoData即可。

03 代码实现

知道基本信息之后实现起来就比较简单。

有回答使用QGIS实现,参考:gdal - Reading JAXA GSMaP data in QGIS? - Geographic Information Systems Stack Exchange

也有官方文档使用ENVI IDL, fortran语言实现等,链接FTP后在类似sample文件夹 中

 当然,也有使用python实现的,例如:

Python reads GSMAP data - Programmer Sought

Python处理GPM(IMERG/GSMaP)卫星降水数据 - 简书 (jianshu.com)

这里我就展示一点新意,大家的文件应该都是.gz的压缩文件,所以如果大家先解压处理那么 数据量翻一倍,然后对解压的数据再处理输出数据又增加了的,因此我是直接输入压缩包进行处理。免去解压这一步,一旦你的数据量特别大时你需要考虑。

代码需要你额外安装rasterio, numpy模块

import gzip
import rasterio
import numpy as np
from rasterio.transform import from_origin

# preparation
in_path = r'F:\ExtremePrecipitation\TEMP\gsmap_mvk.20190101.0400.v7.2112.0.dat.gz'
out_path = r'F:\ExtremePrecipitation\TEMP\gsmap_mvk.20190101.0400.v7.2112.0.tif'
rows = 1200
cols = 3600
lon_upper_left = 0
lat_upper_left = 60
lon_res = 0.1
lat_res = 0.1
_type = np.float32  # because 4-Bytes floats means 32 bits floats, 1 Byte = 8 bits

# get data from .gz file
with gzip.open(in_path, 'rb') as f:
    data = f.read()
    data = np.frombuffer(data, dtype=_type)
    data = np.array(data).reshape(rows, cols)
    data[data < 0] = np.nan
    with rasterio.open(out_path, 'w', driver='GTiff',
                       height=rows, width=cols,
                       count=1, dtype=data.dtype,
                       crs='+proj=latlong',  # the coordinate acrually is WGS84
                       nodata=np.nan,
                       transform=from_origin(lon_upper_left, lat_upper_left, lon_res, lat_res)) as dst:
        dst.write(data, 1)  # write the precipitation dataset into the first band of the tif file

我所使用的rasterio模块进行处理,当然你可以使用gdal处理,只是rasterio对于我来说更Pythonic。

另外,如果你有很多文件需要处理,那么你需要注意对代码进行改进时注意内存不要饱满了,建议使用glob.iglob而非glob.glob因为前者得到路径的生成器而后者得到路径的列表,这里不再过多赘述了。(glob为内置模块)

拜~

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

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

相关文章

HOT38-翻转二叉树

leetcode原题链接&#xff1a;翻转二叉树 题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;…

华为OD机试真题B卷 Python 实现【小朋友排队】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Python算法源码六、效果展示1、输入2、输出 一、题目描述 小明今年升学到了小学1年级&#xff0c;来到新班级后&#xff0c;发现其他小朋友身高参差不齐&#xff0c;然后就想基于每个小朋友和自己的身高差&#xff…

postgresql内核分析 spinlock与lwlock原理与实现机制

​专栏内容&#xff1a; postgresql内核源码分析 手写数据库toadb 并发编程 个人主页&#xff1a;我的主页 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 概述 在postgresql 中&#xff0c;有大量的并发同步&#xff0…

浅谈容器技术之Podman

1.Podman容器简介 Podman&#xff08;Pod Manager&#xff09;是一个由RedHat公司推出的容器管理工具&#xff0c;它的定位就是 Docker 的替代品&#xff0c;在使用上与Docker 的体验类似。Podman源于CRI-O项目&#xff0c;可以直接访问 OCI 的实现&#xff08;如 runC&#x…

【Unity实战】复刻实现经典2d平台跳跃游戏《蔚蓝 Celeste》(附工程源码)

文章目录 前言蔚蓝欣赏实现1. 移动2. 跳跃3. 滑动4. 爬墙5. 蹬墙跳6. 移动优化7. 粒子效果8. 角色环境素材9. 编写角色动画控制10. Tilemap绘制地图环境11. 环境粒子特效12. 冲锋残影效果13. 屏幕震动效果14. 涟漪效果 最终效果工程源码参考完结 前言 《蔚蓝》是一款备受好评的…

信号与系统复习笔记——通讯系统

信号与系统复习笔记——通讯系统 复指数与正弦幅度调制 y ( t ) x ( t ) c ( t ) y(t) x(t)c(t) y(t)x(t)c(t) 上式称为调制&#xff0c;其中 x ( t ) x(t) x(t) 称为 调制信号 &#xff0c;而 c ( t ) c(t) c(t) 称为 载波信号 &#xff0c; y ( t ) y(t) y(t) 称为 已…

Redis高可用(主从复制、哨兵模式和Cluster集群)

文章目录 一、Redis高可用1.持久化2.主从复制3.哨兵4.Cluster集群 二、主从复制1.概念2.作用3.主从复制流程4.配置主从复制 三、哨兵模式1.功能2.作用3.组成4.故障转移机制7.故障模拟8.恢复故障节点 四、Cluster群集1.简介2.作用&#xff08;1&#xff09;数据分区&#xff08;…

Redis常用数据类型

Redis 哈希(Hash)&#x1f349; Redis hash 是一个 string 类型的 field&#xff08;字段&#xff09; 和 value&#xff08;值&#xff09; 的映射表&#xff0c;hash 特别适合用于存储对象。 Redis 中每个 hash 可以存储 232 - 1 键值对&#xff08;40多亿&#xff09; 它…

如何动手用js自己写一个分页?

实现效果 实现代码 function generateTableHead() {const tableHead document.getElementById(table-head);tableHead.innerHTML ;// 添加复选框列的表头const checkboxHead document.createElement(th);const checkbox document.createElement(input);checkbox.type che…

项目部署

#修改表的编码 alter table t_course convert to character set utf8 show create table t_course启动docker&#xff1a; service docker startdocker创建redis设置密码&#xff1a; docker pull redis docker run --name my-redis -p 6379:6379 -e REDIS_PASSWORD<pass…

【大数据趋势】7月2日 汇率,美澳,恒指期货的大数据趋势概率分析。

数据源头之一 : 汇率变化 从程序模拟趋势来看&#xff0c;如果没有干预&#xff0c;极大概率要试探顶部7.375的位置。【位置1】从长期趋势来看&#xff0c;在一个上升通道中长期震荡上行&#xff0c;所以正常应该走2.2的路径【趋势2.2】 因为这轮上涨的动能很大&#xff0c;所…

join on 后面的and 与where 的区别及用法

--- 先把数据导入数据库 CREATE TABLE test_join_where_a ( aid int(0) NOT NULL, aname varchar(255) , atimedate datetime(0) , ascore varchar(255) ); INSERT INTO test_join_where_a(aid, aname, atimedate, ascore) VALUES (1, 张三, 2023-05-03 01:13:30, 8…

环境变量的配置

在我上一篇文章中有写到&#xff0c;在编译和运行Hello World这个文档的时候要使用java.c和java这俩个工具&#xff0c;但是我们却没有转换到这俩个工具所在的磁盘位置&#xff0c;而是直接调用了&#xff0c;那么是怎么实现这一功能的嘞&#xff0c;就有下面的理解 首先wine打…

Linux--给指令起别名:alias

示例&#xff1a;给ls-al起了个别名叫kk​ 注意&#xff1a;起别名只在本次登录有效。

Python爬虫-某政务网站文档爬取,并将正文内容保存在word

前言 本文是该专栏的第1篇,后面会持续分享python爬虫案例干货,记得关注。 地址:aHR0cDovL3d3dy5oZWJlaS5nb3YuY24vc2VhcmNoL3BjUmVuZGVyP3BhZ2VJZD1iOTdhMzg4MzNmNzM0M2NlYmMzMWRlYzQ0NTQ0ZjY4NA== 需求:以某政务网网站为例,采集其正文内容,并将其正文内容以docx格式保…

借助APlayer、MetingJS实现 网页音乐播放器

借助APlayer、MetingJS实现 1、src/publi/index.html引入 <script src"https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script> <script src"https://cdn.jsdelivr.net/npm/meting2.0.1/dist/Meting.min.js"></scri…

离线安装ffmpeg源码包【详细教程】

今天分享一下ffmpeg源码包的安装过程&#xff0c;针对在没有网络环境下&#xff0c;且不能直接使用yum如何成功安装ffmpeg源码包。博主本人通过正式服务器测试&#xff0c;记录整个安装过程。值得大家收藏 同时&#xff0c;我会分享一下如何使用ffmpeg对H.264格式视频(MP4)进行…

echarts数据可视化模板相互影响

问题 echarts数据可视化模板相互影响 详细问题 echarts数据可视化模板相互影响,笔者使用由CSSJavaScriptHTML实现的echarts数据可视化模板&#xff0c;对于其中的子图(图A&#xff0c;位于boxA.js下与图B位于boxB.js下)进行数据下钻&#xff0c;更改option配置后&#xff0c…

苹果正在研发具备智能家居显示功能的外接显示器,具备低功耗模式

据彭博社记者 Mark Gurman 在他最新一期的 Power On 时事通讯中报道&#xff0c;苹果公司正致力于研发一款新的 Mac 外接显示器&#xff0c;具备智能家居设备显示器的低功耗模式功能。 根据了解&#xff0c;这款显示器将集成iOS设备芯片&#xff0c;与Studio Display不同的是&a…

最短路径相关算法

文章目录 图论中的图属性最短路径算法- Dijkstra算法1. 算法介绍2. 适用场景3. 场景举例 - Bellman-Ford算法1. 算法介绍2. 适用场景3. 场景举例 - Floyd-Warshall算法1. 算法介绍2. 适用场景3. 场景举例 具体实现方案- JGraphT 小结 图论中的图属性 图论中&#xff0c;图的属…