ラスタの領域を拡張する(QGIS)

とあるところでタイトルのとおりの処理のやり方を提案してみたところ
ぽつぽつとリアクション(そーやってもできるのか!的な)があったりしたので書いてみます。
コネタでも書いておくのだいじなのね..と思いました。

さて、とある湖岸線(琵琶湖,支笏湖などなど)を示すラスタデータがあるとします。
湖岸線を示すピクセル値が1でありその他の領域がNODATAとされている
と仮定します。

その周辺域のにおいて湖岸線からの距離を面的に求めたい場合は
QGISのラスタ→解析→プロキシミティ(ラスタ距離)というツールをつかうと便利です。
プロキシミティってなんじゃらほいって解説は以下のサイトを参照ください。

gdal_proximity.py
(QGISのプロキシミティはこのコマンドを生成して実行するためのインターフェイスです)
http://www.gdal.org/gdal_proximity.html
QGIS | 道からの距離を視覚的に表現
http://y4su.seesaa.net/article/430793300.html

さてこの処理ですが、出力ラスタの領域がもとのラスタデータと同一領域となるため
湖岸線ラスタが湖岸線が丁度収まる領域のデータであった場合
知りたい場所からの湖岸線までの距離はもとめられないことが多いのですよね。
(ex.琵琶湖の範囲ぴったりの湖岸線ラスタだと京都駅からびわ湖畔までの距離はもとめられない…)
なので湖岸線ラスタの領域を拡張したくなることがあります(拡張領域はNODATAでよい)。
その手順を以下より書きます。

  • 元のラスタの領域情報を抽出する

QGIS(今回はvesion 2.16を利用しています)のメニューバーのラスタを開き
→その他→情報を選択してください。
入力ファイルとして湖岸線ラスタデータを指定してOKしてください。
対象ラスタの情報が出力されますが
その中に以下のようなラスタデータの領域を示す
四隅の座標値が含まれています。

Upper Left ( 491925.257, 4781017.207) (140d54′ 2.30″E, 43d10’54.76″N)
Lower Left ( 491925.257, 4723777.207) (140d54′ 5.27″E, 42d39’59.12″N)
Upper Right ( 534495.257, 4781017.207) (141d25’28.06″E, 43d10’52.08″N)
Lower Right ( 534495.257, 4723777.207) (141d25’15.37″E, 42d39’56.48″N)

これをテキストエディタ等にコピーしておいてください。

  • クリッパーツールを使ってラスタの領域を拡張する

メニューバーのラスタ→抽出→クリッパー
を開き、湖岸線ラスタデータを入力ラスタとし
任意の出力ラスタデータ名を指定してください。

クリッピングモードを「領域」とします。

ここででてくる「1」と「2」のxy座標は
出力ラスタデータの
「1」はUpperLeft
「2」はLowerRight
の座標値にあたります。

この領域指定はラスタの切り取りだけでなく
領域拡張にも利用することができます。
(拡張範囲はNODATAとなります)

今回領域を拡大したい範囲を
X方向(東)に100セル分
Y方向(北)に100セル分
とし
ラスタの解像度を90mとしますと
90×100セル = 9000m
分XYの正の方向へ領域を拡大することになります。

この値を先ほどの「情報」ツールで得られた
UpperLeftのY座標値とLowerRightのX座標値に
加算して領域を指定すると以下のようになります。

「1」(Upperleft)
x:491925.257
y:4790017.207(北に+9000m)

「2」(LowerRight)
x:543495.257(東に+9000m),
y:4723777.207

上記の値を入力し処理を実行すると
湖岸線ピクセルの位置がずれることなく
領域のみが拡張された新たな湖岸線ラスタデータが得られるかと思います。
拡張領域のセル値はNODATA
(どの値がNODATAと定義されるかはラスタのデータタイプ次第です)
として定義されていることとおもいます。

もじばっかりな記事でアレですが、お試しください。