How to download MODIS (MYD03, MOD03) Geolocation Files using python ?

Author: Benjamin Marchant
License: CC BY 4.0

In [1]:
from datetime import date
from os import path
from calendar import monthrange

import urllib.request
import urllib.request, json 
import pprint
import os

import glob
import netCDF4
import random
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
import numpy.ma as ma
In [2]:
output_dir = '/Volumes/HD2/Datasets/Research/NASA'

To download a file from NASA LAADS DAAC, you need to create a token. Here are the steps to follow:

  1. Visit this website: https://ladsweb.modaps.eosdis.nasa.gov/

  2. Create a free account.

  3. From the drop-down profile menu located in the top right corner, select "Generate Token."

  4. Copy your generated token.

Please replace "the token below" with your own token. As an example, I have put in my own token.

In [3]:
token = 'Ym1hcmNoYW50OlltVnVhbUZ0YVc0dWJXRnlZMmhoYm5SQWJtRnpZUzVuYjNZPToxNjI0NzE3MjEwOjEwZmNhNWU4ODVlNzc3OGUyMzE3NzFkZjNmNjUwMGIzNjVhMDY4ZWY'
In [4]:
opener = urllib.request.build_opener()
opener.addheaders = [('Authorization', 'Bearer {}'.format(token))]
urllib.request.install_opener(opener)
In [5]:
year = 2019
month = 8
day = 1
In [6]:
platform = 'AQUA'
instrument = 'MODIS'
product_category = 61
product = 'MYD03'
In [7]:
d0 = date(year, 1, 1)
d1 = date(year, month, day)
delta = d1 - d0
In [8]:
count_of_day = delta.days + 1
In [9]:
ladsweb_url = 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/{}/{}/{:04d}/{:03d}.json'.format(product_category,product,year,count_of_day)

print(ladsweb_url)
https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD03/2019/213.json
In [10]:
with urllib.request.urlopen(ladsweb_url) as url:
    data = json.loads(url.read().decode())

pp = pprint.PrettyPrinter(indent=4)
pp.pprint(data['content'][:10])
[   {   'archiveSets': 61,
        'cksum': '3110923774',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0000.061.2019213152538.hdf',
        'fileId': 5015657932,
        'md5sum': '06fa58bd59cc60040d79e3d77a821259',
        'mtime': 1564673173,
        'name': 'MYD03.A2019213.0000.061.2019213152538.hdf',
        'products': 'MYD03',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0000.061.2019213152538.hdf',
        'size': 31562876},
    {   'archiveSets': 61,
        'cksum': '2899861016',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0005.061.2019213153146.hdf',
        'fileId': 5015668333,
        'md5sum': '01d692c4220098c0954163627bc23fa8',
        'mtime': 1564673534,
        'name': 'MYD03.A2019213.0005.061.2019213153146.hdf',
        'products': 'MYD03',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0005.061.2019213153146.hdf',
        'size': 32815905},
    {   'archiveSets': 61,
        'cksum': '2116102731',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0010.061.2019213152845.hdf',
        'fileId': 5015663458,
        'md5sum': 'a675a8b91e442d2e3c07241500a9ac8a',
        'mtime': 1564673354,
        'name': 'MYD03.A2019213.0010.061.2019213152845.hdf',
        'products': 'MYD03',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0010.061.2019213152845.hdf',
        'size': 29314293},
    {   'archiveSets': 61,
        'cksum': '387286709',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0015.061.2019213152401.hdf',
        'fileId': 5015656260,
        'md5sum': '6234ecce5b693b70f18bec3452d67073',
        'mtime': 1564673084,
        'name': 'MYD03.A2019213.0015.061.2019213152401.hdf',
        'products': 'MYD03',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0015.061.2019213152401.hdf',
        'size': 26751379},
    {   'archiveSets': 61,
        'cksum': '144644184',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0020.061.2019213152439.hdf',
        'fileId': 5015656908,
        'md5sum': '3b09171449ce0b20b9daaae990c740fd',
        'mtime': 1564673113,
        'name': 'MYD03.A2019213.0020.061.2019213152439.hdf',
        'products': 'MYD03',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0020.061.2019213152439.hdf',
        'size': 25788993},
    {   'archiveSets': 61,
        'cksum': '1357816352',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0025.061.2019213152431.hdf',
        'fileId': 5015656909,
        'md5sum': '9db0221c55dc3fec80f47ba65f5ff505',
        'mtime': 1564673113,
        'name': 'MYD03.A2019213.0025.061.2019213152431.hdf',
        'products': 'MYD03',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0025.061.2019213152431.hdf',
        'size': 25909203},
    {   'archiveSets': 61,
        'cksum': '1144845398',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0030.061.2019213152348.hdf',
        'fileId': 5015655907,
        'md5sum': '46ae4c470b16749b3593d3775189254d',
        'mtime': 1564673054,
        'name': 'MYD03.A2019213.0030.061.2019213152348.hdf',
        'products': 'MYD03',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0030.061.2019213152348.hdf',
        'size': 26092896},
    {   'archiveSets': 61,
        'cksum': '1699823598',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0035.061.2019213152445.hdf',
        'fileId': 5015656910,
        'md5sum': 'a9ebcd632f1eba39e687e5d8f571c9bd',
        'mtime': 1564673113,
        'name': 'MYD03.A2019213.0035.061.2019213152445.hdf',
        'products': 'MYD03',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0035.061.2019213152445.hdf',
        'size': 25774450},
    {   'archiveSets': 61,
        'cksum': '3445992180',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0040.061.2019213152441.hdf',
        'fileId': 5015656911,
        'md5sum': '408bc9d5e76e1741922a511dc62468b3',
        'mtime': 1564673113,
        'name': 'MYD03.A2019213.0040.061.2019213152441.hdf',
        'products': 'MYD03',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0040.061.2019213152441.hdf',
        'size': 27454928},
    {   'archiveSets': 61,
        'cksum': '3397908562',
        'dataDay': '2019-213 = 2019-08-01',
        'downloadsLink': 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0045.061.2019213152458.hdf',
        'fileId': 5015657561,
        'md5sum': 'a29de0b9e1d5391b944de2b66d02fe34',
        'mtime': 1564673143,
        'name': 'MYD03.A2019213.0045.061.2019213152458.hdf',
        'products': 'MYD03',
        'resourceType': 'File',
        'self': '/archive/allData/61/MYD03/2019/213/MYD03.A2019213.0045.061.2019213152458.hdf',
        'size': 29748399}]
In [11]:
os.system( 'mkdir {}/{}'.format(output_dir,platform) )
os.system( 'mkdir {}/{}/{}'.format(output_dir,platform,instrument) )
os.system( 'mkdir {}/{}/{}/{}'.format(output_dir,platform,instrument,product))
os.system( 'mkdir {}/{}/{}/{}/{:04d}'.format(output_dir,platform,instrument,product,year) )
os.system( 'mkdir {}/{}/{}/{}/{:04d}/{:04d}_{:02d}_{:02d}'.format(output_dir,platform,instrument,product,year,year,month,day) )
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS: File exists
Out[11]:
0
In [12]:
%%time

log_error = []

for file in data['content']:
    file_name = file['name']
    #print(file_name) 
    target_dir = '{}/{}/{}/{}/{:04d}/{:04d}_{:02d}_{:02d}/{}'.format(output_dir,platform,instrument,product,year,year,month,day,file_name)
    if not path.exists( target_dir ):
        try:
            ladsweb_url = 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/{}/{}/{:04d}/{:03d}/{}'.format(product_category,product,year,count_of_day,file_name)
            urllib.request.urlretrieve(ladsweb_url,target_dir) 
        except:
            log_error.append(file)
            print('error')
CPU times: user 58.8 s, sys: 59.2 s, total: 1min 58s
Wall time: 17min 36s
In [13]:
file_list = glob.glob('{}/{}/{}/{}/{:04d}/{:04d}_{:02d}_{:02d}/*.hdf'.format(output_dir,platform,instrument,product,year,year,month,day))

len(file_list)
Out[13]:
288
In [14]:
tot_size = 0

for file in file_list:
    file_size = os.path.getsize(file) * 0.001 # in KB
    tot_size += file_size
    print( str( round(file_size,2)  ) + ' KB')
31562.88 KB
32815.9 KB
29314.29 KB
26751.38 KB
25788.99 KB
25909.2 KB
26092.9 KB
25774.45 KB
27454.93 KB
29748.4 KB
35483.82 KB
30434.79 KB
34914.24 KB
37607.53 KB
33589.8 KB
35022.55 KB
29143.62 KB
27386.0 KB
28806.35 KB
29227.61 KB
31771.65 KB
32523.55 KB
27796.26 KB
27043.99 KB
26549.76 KB
26261.72 KB
26138.7 KB
26074.74 KB
27532.23 KB
37786.48 KB
35109.01 KB
30125.83 KB
32945.95 KB
31710.87 KB
29703.34 KB
28631.84 KB
26695.25 KB
27045.75 KB
28494.65 KB
29216.85 KB
32757.99 KB
31382.31 KB
28043.76 KB
26931.51 KB
30215.95 KB
29465.14 KB
26013.53 KB
27323.36 KB
36497.67 KB
43997.97 KB
32784.07 KB
31553.38 KB
29419.29 KB
26602.6 KB
26539.74 KB
27457.14 KB
38433.77 KB
33430.07 KB
30916.41 KB
30209.49 KB
32574.86 KB
31498.43 KB
27680.63 KB
27144.58 KB
32243.01 KB
29997.56 KB
28773.99 KB
39409.21 KB
42708.44 KB
40664.35 KB
29700.21 KB
33749.8 KB
32251.26 KB
27722.49 KB
26846.58 KB
35526.83 KB
34106.58 KB
30823.38 KB
30221.41 KB
30102.52 KB
32114.14 KB
31605.47 KB
27158.03 KB
26281.32 KB
26209.13 KB
28562.49 KB
32868.16 KB
43745.99 KB
39104.4 KB
35256.03 KB
31509.17 KB
34636.08 KB
35139.88 KB
33272.96 KB
30297.22 KB
26217.53 KB
25975.62 KB
27845.48 KB
28464.05 KB
30677.07 KB
31799.51 KB
30345.35 KB
26850.55 KB
26055.28 KB
26133.05 KB
26781.93 KB
30967.09 KB
38580.65 KB
36892.84 KB
32934.97 KB
32768.19 KB
35539.88 KB
38627.04 KB
35145.77 KB
26190.65 KB
26326.46 KB
26543.68 KB
28113.24 KB
28576.78 KB
31125.3 KB
31410.98 KB
29504.06 KB
26665.7 KB
26967.33 KB
28390.29 KB
32844.33 KB
35065.33 KB
38690.81 KB
37900.96 KB
31734.66 KB
33582.87 KB
40490.65 KB
29409.71 KB
25985.75 KB
25986.16 KB
25874.07 KB
26484.41 KB
27963.29 KB
28441.19 KB
31852.34 KB
32024.3 KB
28379.46 KB
26730.43 KB
34083.91 KB
38223.4 KB
34006.73 KB
34118.77 KB
38421.42 KB
33745.65 KB
33867.75 KB
32982.0 KB
34756.38 KB
25771.56 KB
26046.2 KB
25948.75 KB
25861.16 KB
27538.12 KB
29142.79 KB
29860.2 KB
31918.49 KB
32299.23 KB
27870.12 KB
27082.54 KB
27631.9 KB
27770.72 KB
34132.45 KB
33800.8 KB
30239.29 KB
32963.73 KB
33064.32 KB
33418.23 KB
28384.3 KB
25840.15 KB
25950.76 KB
26034.93 KB
26247.25 KB
29617.53 KB
28331.02 KB
31803.88 KB
32220.78 KB
31133.44 KB
27672.67 KB
26450.29 KB
26541.19 KB
26817.77 KB
26629.99 KB
28135.58 KB
29862.19 KB
35835.18 KB
30026.37 KB
36398.82 KB
29289.88 KB
26368.37 KB
25931.69 KB
29225.19 KB
31702.95 KB
29366.2 KB
28841.91 KB
32713.74 KB
32706.24 KB
28687.07 KB
27086.33 KB
29321.42 KB
38590.0 KB
31097.36 KB
26582.48 KB
30614.8 KB
36200.83 KB
35752.06 KB
28465.92 KB
41366.61 KB
38530.78 KB
31827.46 KB
29117.03 KB
29844.96 KB
28415.87 KB
27948.09 KB
29435.07 KB
32577.32 KB
32080.02 KB
28745.22 KB
31641.77 KB
33153.99 KB
35825.88 KB
32023.15 KB
29553.09 KB
36709.13 KB
35805.35 KB
31844.22 KB
33013.3 KB
42970.0 KB
40430.06 KB
42754.98 KB
28199.51 KB
26013.92 KB
26996.14 KB
28196.97 KB
30372.94 KB
32720.27 KB
32135.51 KB
28211.57 KB
26185.21 KB
26178.82 KB
26156.91 KB
28334.01 KB
38250.79 KB
42319.45 KB
40301.35 KB
28729.49 KB
36407.17 KB
37693.49 KB
40759.26 KB
31686.07 KB
26390.1 KB
26055.92 KB
27651.15 KB
28515.43 KB
31473.83 KB
32534.42 KB
30896.1 KB
27094.09 KB
26092.57 KB
26296.15 KB
26404.75 KB
26044.69 KB
27953.34 KB
33295.53 KB
36206.53 KB
29434.56 KB
35018.49 KB
34208.34 KB
36053.27 KB
35057.09 KB
32626.16 KB
33139.51 KB
29905.35 KB
29002.4 KB
32171.13 KB
32707.35 KB
29258.95 KB
26785.98 KB
25823.16 KB
25935.76 KB
25972.46 KB
26023.9 KB
27397.6 KB
31280.66 KB
33203.19 KB
In [15]:
tot_size
Out[15]:
8891744.064000001
In [ ]:
 
In [ ]:
 
In [16]:
365 * 4 * 20 / ( 60 * 24 )
Out[16]:
20.27777777777778
In [ ]:
 
In [17]:
%%time

year = 2019
month = 8

platform = 'AQUA'
instrument = 'MODIS'
product_category = 61
product = 'MYD03'

log_error = []

for day in range(1, monthrange(year, month)[1]+1):
    
    d0 = date(year, 1, 1)
    d1 = date(year, month, day)
    delta = d1 - d0

    count_of_day = delta.days + 1

    ladsweb_url = 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/{}/{}/{:04d}/{:03d}.json'.format(product_category,product,year,count_of_day)

    with urllib.request.urlopen(ladsweb_url) as url:
        data = json.loads(url.read().decode())

    os.system( 'mkdir {}/{}/{}/{}/{:04d}'.format(output_dir,platform,instrument,product,year) )
    os.system( 'mkdir {}/{}/{}/{}/{:04d}/{:04d}_{:02d}_{:02d}'.format(output_dir,platform,instrument,product,year,year,month,day) )
    
    for file in data['content']:
        file_name = file['name']
        #print(file_name) 
        target_dir = '{}/{}/{}/{}/{:04d}/{:04d}_{:02d}_{:02d}/{}'.format(output_dir,platform,instrument,product,year,year,month,day,file_name)
        if not path.exists( target_dir ):
            try:
                ladsweb_url = 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/{}/{}/{:04d}/{:03d}/{}'.format(product_category,product,year,count_of_day,file_name)
                urllib.request.urlretrieve(ladsweb_url,target_dir) 
            except:
                log_error.append(file)
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019/2019_08_01: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
mkdir: /Volumes/HD2/Datasets/Research/NASA/AQUA/MODIS/MYD03/2019: File exists
CPU times: user 30min 32s, sys: 28min 6s, total: 58min 38s
Wall time: 10h 21min 4s
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]: