はじめに
私の前回の記事(下)で、オープンに利用できるグローバル標高データNASADEMについて紹介しました。今回は、このデータ(全部で14520)を一括ダウンロードした方法をメモしておきたいと思います。
ファイル数が多いので、LP DAACのページ(以下)で見つけたコマンドラインでダウンロードする方法を試しました。curlコマンドでダウンロードをしますが、ユーザーとパスワード情報を入れないといけません。
今回はcurlでダウンロードする方法を試しますが、windowsのコマンドプロンプトにあるcurlではうまくいきませんでした。DockerでUbuntuベースのLinux環境を立ち上げて行ったらうまくいきました。
調べていた時に、ほかにもcurlでうまくいかない人はいたようです。→ https://forum.earthdata.nasa.gov/viewtopic.php?t=3021
私の環境
- Windows 10 (Enterprise)
- Docker version 20.10.8
- PowerShell version 5.1.19041.1237
また、LP DAAC でのデータ利用のため、NASAのEarthDataユーザーIDをとっておきました。
https://urs.earthdata.nasa.gov/users/new
手順
Step 0. Dockerコンテナ(unvt/nanban) の立ち上げ
Linuxの環境でcurlを使いたかったので、unvt/nanbanを立ち上げました。unvt/nanbanはUbuntuベースのイメージですから、curlが使えれば別のDocker imageでもいいと思います。
docker run -it --rm -v ${PWD}:/data unvt/nanban
cd /data
Step 1. ダウンロードファイルの一覧、shファイルを作成
次の作業はWindows環境でウェブブラウザやテキストエディタ、MS エクセルを使って行いました。
Data Treeのページ( https://e4ftl01.cr.usgs.gov/MEASURES/NASADEM_HGT.001/2000.02.11/ )からNASADEMのファイル一覧を抜き出します。HGTファイルのZIPファイルだけがほしいので、ソースをコピペして3行ごとに抜き出して、ファイル名だけ書き出すことにしました。
↓作業の途中の様子(不要な文字列はreplaceを駆使して消していく。その後、excelのleft関数なども使った。)
リストができたら、エクセルなどを使って、ファイル名一覧からダウンロードするためのcurlのコードを書きます。今後、IDとパスワードを設定しますが、オプションのつけ方については、以下のようにしておきます。
コマンドができたらテキストエディタにコピーして、shファイルとして保存しておきます。
全部貼り付けられないので、テスト用の3行のコマンドを下に書いておきます。
curl -O -b ~/.urs_cookies -c ~/.urs_cookies -L -n https://e4ftl01.cr.usgs.gov/MEASURES/NASADEM_HGT.001/2000.02.11/NASADEM_HGT_n00e006.zip;
curl -O -b ~/.urs_cookies -c ~/.urs_cookies -L -n https://e4ftl01.cr.usgs.gov/MEASURES/NASADEM_HGT.001/2000.02.11/NASADEM_HGT_n00e009.zip;
curl -O -b ~/.urs_cookies -c ~/.urs_cookies -L -n https://e4ftl01.cr.usgs.gov/MEASURES/NASADEM_HGT.001/2000.02.11/NASADEM_HGT_n00e010.zip;
Step 2. .netrcファイルの作成
LP DAACの説明(再掲・こちら)にありますが、machineはurs.earthdata.nasa.gov、loginにユーザー名、passwordにパスワードを指定したnetrcファイルを作ります。
touch ~/.netrc | chmod og-rw ~/.netrc | echo machine urs.earthdata.nasa.gov >> ~/.netrc
ここまでやると ~/.netrc ができています。echoを続けてユーザー名とパスワードを入れてもいいですが、viで編集しても大丈夫でした。
vi ~/.netrc
Step 3. Curlでダウンロード
次にcurlでダウンロードしてみます。
2-1. 実験1・ログイン情報なしの場合
試しに何もしないで普通のコマンドを実行してみます。
curl -O https://e4ftl01.cr.usgs.gov/MEASURES/NASADEM_HGT.001/2000.02.11/NASADEM_HGT_n00e006.zip
ダウンロードされますが、中身は空のファイルになってしまいました。なぜか302のエラーですね。
2-2. 実験2 ログイン情報ありの場合
そこで、次はLP DAACの手引きにあるように、以下のコマンドでやってみます。
curl -O -b ~/.urs_cookies -c ~/.urs_cookies -L -n https://e4ftl01.cr.usgs.gov/MEASURES/NASADEM_HGT.001/2000.02.11/NASADEM_HGT_n00e006.zip
2-3. 全体ダウンロード
大丈夫そうなので、準備しておいたシェルスクリプトを実行します。
./dl.sh
shファイルに改行をいれたので、その都度で怒られていますが、ダウンロードはできているようです。
ファイルもたまっていきます。
14,520ファイルのうち、14,519ファイルが20時間と少しでダウンロードできていました。なぜかn24e006が抜けていたので、そのファイルだけ個別にダウンロードして全部揃えました。
まとめ
NASAのDEMデータをcurlでダウンロードする方法をまとめました。ログイン情報が必要なので少し注意が必要でした。
謝辞
データを提供してくれているNASAやUSGSに感謝します。また、NASADEMはALOSのDEMやASTER-GDEMも利用されていますから、日本の関係の皆様に感謝します。
参考ページ:
- How to Access LP DAAC Data from the Command Line (LP DAAC, 2019): https://lpdaac.usgs.gov/resources/e-learning/how-access-lp-daac-data-command-line/
- NASADEM_HGT ダウンロードサイト:https://e4ftl01.cr.usgs.gov/MEASURES/NASADEM_HGT.001/2000.02.11/