raster国土地理院が提供している「基盤地図情報ダウンロードサービス」の中に「数値標高モデル」データがあります。このデータは、標高のメッシュデータです。標高点格子(メッシュサイズ)が5m、10mのものがそれぞれあります。利用登録をすればデータをダウンロードできます。データなのですが、データを閲覧するには専用のビューアアプリが必要になります。これはWindows専用です。そのため、これまで私は、下記に挙げるような第三者が開発するデータ変換用のツール、QGISのプラグイン等を利用してデータを変換していました。github.comgithub.com一方でこれらのツールはそれぞれ独立しており、Rと組み合わせて使うことはできません。「数値標高モデル」自体はXMLファイルですので、標高値を紐解けばRで利用可能な形式へ変換することが可能です。今日はこの方法を紹介します。Pythonを使って同様のことをしている方がいらっしゃり、それのR版ということになります。www.gis-py.com以下、数値標高データ本体とデータをRで扱うためのコードを説明をします。簡単な可視化もしてみます。提供されるデータにはいくつかのバージョンがありますがそれに応じて、XMLスキーマ定義およびファイルの仕様書が用意されています。その中から重要なものを説明します。なにはともあれ、まずはダウンロードしたXMLファイルを読み込みましょう。ファイルの読み込みにはxml2パッケージを利用します。国土地理院のページからダウンロードした圧縮ファイル(一つのファイルでカバーする領域は10kmメッシュ)を解凍すると、10mメッシュのファイルでは1つのファイル、5mメッシュでは領域に含まれる複数のファイルが展開されます。分割されていない分、10mメッシュを扱う場合にはデータサイズが大きくなってしまうので注意が必要です。"FG-GML-5440-34-00-DEM5A-20161001.xml"XMLファイルはxml2::read_xml()でファイルを読み込みます。10mメッシュを対象とする際は引数optionsで"HUGE"を指定してください。read_xml(tgt_file)対象領域の座標を調べてみましょう。この値は領域の北東端および南西端の座標となります。"54403400"メッシュに含まれるグリッドセルの数は以下のように格納されています。0が起点となっているので、5mメッシュの場合には225*150の標高値が格納されていることを示します。この値は10mメッシュでは1124,749となります(1125*750)。149</gml:high>標高値の配列順序と開始点は次のコードで確認できます。ここで示した例は基盤地図情報データでの典型的なもので、先頭セルを北西端におき、配列順序がx軸の正方向へ進み、東端に達するとy軸の負方向に進み、南東端に至ることを示しています。くだけた表現でいうと、グリッドの西から東、北から南へとジグザグに進む方式です。0</gml:startPoint>肝心の標高値は次のように抽出します。ここではデータフレームとして後の操作を扱いやすくしています。type列にDEM構成点の種別、value列に標高値を格納するようにしました。次は読み込んだ値を元にしてラスタデータへ変換するという処理です。地理空間データとして扱うための処理も行なっていきます。ラスタへの変換は、標高値を記録可能なサイズの行列オブジェクトを作り、raster::raster()を実行するだけです。これによりrasterに対応した可視化や地形解析のための関数が適用できるようになります。max)一方でこの状態では参照座標系が与えられていないので、メッシュデータの座標を元に定義します。sp::proj4string(as_Spatial(mesh))可視化と地形解析の例です。0.2)OpenStreetMapのタイルに重ねてみます。FALSE)これらの処理を関数化しておきました。複数のファイルを結合するさて、5mメッシュでは対象領域のメッシュが複数のファイルに分割されており、1ファイルの領域は1kmメッシュの範囲となっています。そこで複数のラスタを結合し、範囲を拡大することを試みます。XMLファイルの読み込みからラスタへの変換部分は先ほどの処理を関数化して使いまわします。purrr::reduce(merge)今度はggplot2を使って可視化を行います。カラーパレットをRで利用可能にするcptcityパッケージを使いました。モデルのデータを元に作成")筑波山周辺の標高データを利用しました。次回はこのデータを使って、rayshaderパッケージによる下の図のような立体表現に挑戦します。(1)はてなブログをはじめよう!u_riboさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。