利用Python下载Landsat数据

尽管Landsat数据应用广泛,但是数据下载一直都是比较困难的事情。国内数据一般采用地理空间数据云或者中科院的网站勉强都可以搞定。但是国外的数据一般很难下载到。这里面主要存在两个问题:
1)因为下载数据的网站经常性连接不上,包括EarthExplore和Glovis。
2)批量数据下载困难。
最近在思考如何更简单的进行数据的批量下载。下面介绍一下使用方法,代码依然采用的是Python。下载方式其实非常简单,主要用到landsatxplore这个库,这个库的github地址是https://github.com/yannforget/landsatxplore。里面有详细的介绍,我主要介绍一下我的使用心得。使用前,你需要先注册EarthExplore的账户,记住你的username 和 password

安装:

pip install landsatxplore

用户登录:

api = landsatxplore.api.API(username, password)

数据搜索:这里面我没换位置,因为显然经纬度的点在国外,数据集你可以选择TM,ETM和Landsat8 (LANDSAT_TM_C1|LANDSAT_ETM_C1|LANDSAT_8_C1),这里我以Landsat8为例,设置数据筛选时间,云量

scenes = api.search(
    dataset='LANDSAT_8_C1',
    latitude=19.53,
    longitude=-1.53,
    start_date='2014-01-01',
    end_date='2016-01-01',
    max_cloud_cover=10)

数据筛选结果:
在这里插入图片描述
数据下载:

Earth_Down = EarthExplorer(username, password)
Earth_Down.download(scene_id='LC81960462014022LGN01', output_dir='E:\data')

数据下载结果:
在这里插入图片描述
下载速度大概4M/s,速度还可以。目前批量下载没有问题,就是还不清楚批量下载是网络连接是不是稳定。
详细代码如下:

import landsatxplore.api
from landsatxplore.earthexplorer import EarthExplorer

def request_Landsat(username,password,product,lat,lon,start_date,end_date,cloud_max):

    api = landsatxplore.api.API(username, password)

    scenes = api.search(
        dataset=product,
        latitude=lat,
        longitude=lon,
        start_date=start_date,
        end_date=end_date,
        max_cloud_cover=cloud_max)

    print('{} scenes found.'.format(len(scenes)))
    api.logout()
    return scenes

def download_landsat(username,password,Landsat_name,output_dir):

    Earth_Down = EarthExplorer(username, password)

    for scene in Landsat_name:

        ID = scene['entityId']
        print('Downloading data %s '% ID)
        Earth_Down.download(scene_id=ID, output_dir=output_dir)

    Earth_Down.logout()

if __name__ == '__main__':

    username = ''
    password = ''
    product = 'LANDSAT_8_C1'
    lat = 19.53
    lon = -1.53
    start_date='2014-01-01'
    end_date='2016-01-01'
    cloud_max = 10
    output_dir = '.\data'
    Landsat_name = request_Landsat(username,password,product,lat,lon,start_date,end_date,cloud_max)
    download_landsat(username,password,Landsat_name,output_dir)

在这里插入图片描述
祝好!
2020.01.02

  • 13
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
好的,我可以帮您编写一个利用PythonLandsat 8热红外数据进行大气校正的代码。下面是代码示例: 首先,我们需要安装gdal库和rasterio库。可以通过以下命令来安装: ``` pip install gdal rasterio ``` 接着,可以使用以下代码对Landsat 8热红外数据进行大气校正: ```python import gdal import rasterio # 设置数据文件路径 input_file = "/path/to/LC08_L1TP_200041_20210215_20210216_02_T1_B10.tif" output_file = "/path/to/LC08_L1TP_200041_20210215_20210216_02_T1_B10_atmcorr.tif" # 读取数据 dataset = gdal.Open(input_file, gdal.GA_ReadOnly) input_data = dataset.GetRasterBand(1).ReadAsArray().astype('float32') # 计算辐射率 L = 1.4388 K1 = 774.89 K2 = 1321.08 radiance = K2 / (input_data * L + K1) # 计算大气透过率 emissivity = 0.95 # 可通过其他方法计算得到 atmos_tran = 0.9097 # 可通过MODTRAN模型计算得到 atmos_irrad = 0.1 # 可通过MODTRAN模型计算得到 atmos_transparency = (atmos_tran * atmos_irrad) ** (-emissivity/L) # 校正数据 refl = radiance / atmos_transparency # 写入数据 output_profile = dataset.GetGeoTransform() output_profile = {'driver': 'GTiff', 'height': input_data.shape[0], 'width': input_data.shape[1], 'count': 1, 'dtype': 'float32', 'transform': output_profile} with rasterio.open(output_file, 'w', **output_profile) as dst: dst.write(refl.astype('float32'), 1) # 关闭数据集 dataset = None ``` 这段代码将计算出Landsat 8热红外波段的辐射率,然后通过MODTRAN模型计算大气透过率,并将数据进行校正。最后,将校正后的数据写入输出文件中。 希望这个代码能够帮到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值