Pythonを用いた空間統計分析のための衛星データ(LST, NDVI)の処理2

本Webページでは、本人の了承の下、2022年3月修士課程修了の楠瀬智也氏が残してくれたLST, NDVIプロダクトのダウンロードおよび処理の手引書をそのまま引用しています。ここに記して謝意を表します。

ここでは、衛星リモートセンシングデータから生成された地表面温度 (Land Surface Temperature: LST) と植生指数 (Normalized Difference Vegetation Index: NDVI) の自動処理を紹介します。Pythonを使って、WebサイトからNDVI・LSTデータを取得するところから始まり、投影変換を通じて、最終的にNDVI・LSTデータを日本全国の市区町村に分ける処理までを説明します。人口分布を加味して、年間あるいは夏季(6〜9月)の平均NDVI・LSTを計算しています。

このWebページで紹介する処理は、「Pythonを用いた空間統計分析のための衛星データ(LST, NDVI)の処理1(市町村別データの生成)」の後の処理です。
    本演習(演習2)の内容:
  1. 27都市ごとにNDVI・LSTを整理
  2. 人口メッシュデータの緯度経度への変換
  3. 27都市のshpファイルの作成
  4. 27都市の人口メッシュデータの抽出
  5. 特定の期間に応じたNDVI・LSTの抽出
  6. データの統合
  7. メッシュデータとNDVI・LSTとの対応づけ
  8. NDVI・LSTデータの結合
    演習1の内容:
  1. WebサイトからNDVI・LSTデータの自動ダウンロード
  2. HDFファイルの加工
  3. ファイルの移動1
  4. 座標投影変換
  5. ファイルの移動2
  6. ファイルの統合
  7. 属性の付与
    1. ポリゴンの自己交差の解消法
    2. クリッピング(属性の付加)処理
  8. 市町村単位での抽出、CSVファイルの出力

9. 27都市ごとにNDVI・LSTを整理

Pythonスクリプト: 27都市ごとにNDVI・LSTを整理

使用フォルダはNDVI・LSTに市区町村の属性が付与された「JapanAttributeData_LST」、「JapanAttributeData_NDVI」を使用する。(演習1 「7. クリッピング(属性の付加)処理 について」で作成されるフォルダ)

実行後、Dataフォルダ内に「27City_LST」、「27City_NDVI」が出力され、27都市ごとのフォルダにNDVI・LSTのデータが格納される。

分類の上では、政令指定都市か否かで場合分けを行い、27都市の属性名と一致するものを抽出している。

10. 人口メッシュデータの緯度経度への変換

Pythonスクリプト: 人口メッシュデータの緯度経度への変換

下記のリンクから、人口メッシュデータ(1 km)をCSV形式でダウンロードする。

参考:国勢調査(2015年)

ダウンロードしたファイル(txtファイル)は手動で全て「population_1kmmesh」に入れておく。データの詳細のフォーマットについては、同フォルダ中の「T000846.pdf」に記載されている。

以後の処理を簡単にするため、上記のPythonスクリプトを用いてtxtファイルをCSVファイルに変換し、そのうえでメッシュコードを緯度経度に変換する。メッシュコードの中心座標が緯度経度に変換される。メッシュコードを緯度経度に変換するにあたり、以下のWebページを参考にした。

参考:https://www.gis-py.com/entry/py-mesh

実行後、

の2つのフォルダが自動的に作成される。

最終的に、全国のメッシュデータを1つに統合したCSVファイルとして「population_1kmmesh_XY」内に「all_population_XY.csv」というファイルが保存される。

11. 27都市のshpファイルの作成 (QGIS)

自己交差解消済みのshpファイルを用いて、27都市のshpファイルを作成する。 QGIS上で「japan_ver82_2.shp」を表示させ、 レイヤで右クリック→ 「属性テーブルを開く」→(属性テーブルウィンドウの左下のボタンから)「高度なフィルタ(式)」を選択する。

高度なフィルタ(式)内で記述する式を以下に示す。

"SEIREI" = 'さいたま市' or "SEIREI" = '京都市' or "SEIREI" = '仙台市' or "SEIREI" = '北九州市' or "SEIREI" = '千葉市' or "SEIREI" = '名古屋市'or "SEIREI" = '堺市' or "SEIREI" = '大阪市'or "SEIREI" = '岡山市' or "SEIREI" = '川崎市' or "SEIREI" = '広島市'or "SEIREI" = '新潟市' or "SEIREI" = '横浜市'or "SEIREI" = '浜松市' or "SEIREI" = '熊本市' or "SEIREI" = '相模原市' or "SEIREI" = '神戸市'or "SEIREI" = '福岡市' or "SEIREI" = '静岡市' or "SEIREI" = '札幌市' or "SIKUCHOSON" = '宇都宮市' or "SIKUCHOSON" = '船橋市' or "SIKUCHOSON" = '姫路市' or "SIKUCHOSON" = '東大阪市' or "SIKUCHOSON" = '鹿児島市' or "SIKUCHOSON" = '川口市' or "SIKUCHOSON" = '松山市'

これらを選択したあと、別のshapeファイルとして保存する。 「レイヤ」中の「japan_ver82.shp」で右クリックし「エクスポート」→「選択地物の保存」として、任意の名前で保存すればよい。

12. 27都市の人口メッシュデータの抽出 (QGIS)

27都市のshpファイルと、全国の人口メッシュデータが結合された「all_population_XY.csv」を用いて、27都市の人口メッシュデータを切り抜く。

27都市のshpファイル、「all_population_XY.csv」をQGIS上で表示させ、 「ベクタ」→「空間演算ツール」→「切り抜き(clip)」とする。

そして、 入力レイヤ→「all_polulation_XY」 オーバーレイレイヤ→27都市のポリゴンレイヤ を選択し、実行する。

出力される点群をCSVファイルとして保存する。ファイル名は「1kmmesh_population_XY_main27.csv」とし、「population_1kmmesh_XY」フォルダ内に保存する。

13. 特定の期間に応じたNDVI・LSTの抽出

Pythonスクリプト: 特定の期間に応じたNDVI・LSTの抽出

「6月から9月までのNDVI・LSTの平均値」、「1年間のNDVI・LSTの平均値」を取得する。 処理については、NDVI・LSTデータ中の7桁の数字(例えば2012001→2012年1月1日)を活用し、「6月から9月まで」、「1年間」の数値を指定することで抽出を行っている。

実行後、Dataフォルダ内に「27City_LST(orNDVI)_6to9_AVE」、「27City_LST(orNDVI)_annual_AVE」の4フォルダが自動生成され、27都市の6月から9月までのNDVI・LSTの平均値」、「2012〜2015年までのそれぞれの年間のNDVI・LSTの平均値」が格納される。

14. データの統合

Pythonスクリプト: データの統合

「27City_LST(orNDVI)_6to9_AVE」、「27City_LST(orNDVI)_annual_AVE」に格納されたCSVファイルを1つに統合する。

統合されたファイルは

として保存される。

15. メッシュデータとNDVI・LSTとの対応づけ (QGIS)

QGIS等のGISソフトを用い、27都市の人口メッシュデータ点(1kmmesh_population_XY_main27.csv)と、14.で得た「ALL_6to9_AVE.csv」、「2012(~2015)_ALLannual_AVE.csv」とを対応させる。

QGIS上に「1kmmesh_population_XY_main27.csv」、「ALL_6to9_AVE.csv」、「2012(~2015)_ALLannual_AVE.csv」の計6つのCSVファイルを表示させ、 「ベクタ」→「解析ツール」→「距離行列(distance matrix)」を選択する。

距離行列中において、以下のようにパラメータを設定する。

とし、実行する。適宜全てのファイルに対して実行する(実行にはやや時間がかかる(1時間程度)。

計算後、レイヤに現れる「距離行列(distance matrix)」をCSV形式として保存する。 取得したCSVファイルは、あらかじめ手動で作成した「population_1kmmesh_MinDistance」フォルダ内に「NDVI」、「LST」フォルダをそれぞれ作成し、その中に各々保存しておく。

16. NDVI・LSTデータの結合

Pythonスクリプト: NDVI・LSTデータの結合

最短距離による紐づけ処理後、「1kmmesh_population_XY_main27.csv」にpopulation_1kmmesh_MinDistanceフォルダ内のNDVI・LSTデータを結合させる。

QGIS上で1kmmesh_population_XY_main27.csvの点に対して最も近い1点のみを選定し、NDVI・LSTを対応させたが、ほとんど距離が同じ点が複数ある場合は、該当する複数の点が選定されてしまう場合がある。そこで、値が重複しているものを削除する必要がある。

具体的には、全てのファイルを'InputID'(8桁のメッシュコードに相当する)で昇順に並べ替え、"InputID"が重複するものを削除する処理を行い、全てを結合する処理を行っている。

最終的に得られるCSVファイルは「population_1kmmesh_MinDistance」フォルダ内に「populationConcat_NDVILST.csv」として保存される。

ここまでで人口メッシュデータと27都市のNDVI・LSTデータとを最短距離によって紐づけられているはずである。

[GRASSのインストール、標高データを用いた地滑り危険度マップの作成]
[植生指数 (NDVI) の計算、表示]
[標高データ (SRTM)の表示、植生指数 (NDVI) の3次元表示]
[反射率、輝度温度、標高データを用いた土地被覆分類]
[QGIS, Rを用いた公示地価データの空間統計分析:空間的自己回帰モデル]
[QGIS, Rを用いた公示地価データの空間統計分析:静的な時空間モデリング]
[Rを用いた衛星データ(LST, NDVI)の空間統計分析]
[Pythonを用いた空間統計分析のための衛星データ(LST, NDVI)の処理1(市町村別データの生成)]
[Pythonを用いた空間統計分析のための衛星データ(LST, NDVI)の処理2(人口データの重みを加味した市町村別データの生成)]

[講義「リモートセンシングと地理情報システム(GIS)」のトップページ]
[須ア純一のページへ]

須ア純一 京都大学大学院 工学研究科社会基盤工学専攻 空間情報学講座