前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >MOD043km的hdf数据转为tif

MOD043km的hdf数据转为tif

作者头像
一个有趣的灵魂W
发布2020-09-15 12:21:03
发布2020-09-15 12:21:03
1.9K0
举报

MOD043km的hdf数据转为tifc尝试了两种办法,1是靠

gdal.open(r'D:/Thesis/ML/modis3km/MOD04_3K.A2018001.0320.061.2018003202214.hdf')

代码如下:

import gdal, osr

import numpy as np

import os

import rasterio

from rasterio.warp import calculate_default_transform, reproject, Resampling

from rasterio import crs

from pymodis.convertmodis_gdal import convertModisGDAL

ds = gdal.Open(r'D:/Thesis/ML/modis3km/MOD04_3K.A2018001.0320.061.2018003202214.hdf')

sub=ds.GetSubDatasets()

aod=gdal.Open(sub[10][0]).ReadAsArray()##这步有个问题aod=gdal.Open(sub[10]).ReadAsArray()的时候立刻报错,还是要[10][0]才可以,后续的问题不知道是不是这步有毛病

band = ds.GetRasterBand(1)#2

#arr = band.ReadAsArray()#3,

#[cols, rows] = arr.shape

[cols, rows] = aod.shape

format = "GTiff"#5

driver = gdal.GetDriverByName(format)#6

outDataRaster = driver.Create("D:/Thesis/ML/aodband2/aod5.tif", rows, cols, 1, gdal.GDT_Int16)

outDataRaster.SetGeoTransform(ds.GetGeoTransform())##sets same geotransform as input8

outDataRaster.SetProjection(ds.GetProjection())##sets same projection as input9

outDataRaster.GetRasterBand(1).WriteArray(aod)#10,5-10都是赋值给新数据

outDataRaster.FlushCache()#把缓存清理,很重要

del outDataRaster

结果:

是有问题的,它按行列号重新显示了图像,没有坐标系,

ds.GetGeoTransform()也有问题,其中6个参数分别为:x0, dx, dxdy, y0, dydx, dy = ds.GetGeoTransform(),有分辨率,坐标参数,还有行列数目貌似

于是尝试第二种办法:

import subprocess

import os

subprocess.call('gdal_translate'+' -of GTiff'+' "HDF4_EOS:EOS_SWATH:"D:/Thesis/ML/modis3km/MOD04_3K.A2018001.0320.061.2018003202214.hdf":mod04:Image_Optical_Depth_Land_And_Ocean"'+''+' "D:/Thesis/ML/aodband2/aod5.tif"')

一定要注意其中的空格,还有文件名前面的引号

结果:

这个结果可以接受了,是想要的wgs84

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一个有趣的灵魂W 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档