ラベル GIS の投稿を表示しています。 すべての投稿を表示
ラベル GIS の投稿を表示しています。 すべての投稿を表示

2014年11月21日金曜日

RでGeotifの面積を出す

#ラスタデータの面積計算
#GISでできると思ったのにうまくいかないため、
#Rでセルの数を数えて面積に変換する。
#傾斜(度)のラスタから、任意の区分で区切った面積を%で出す。
#GeotiffのプロジェクションやセルサイズのデータをRから呼び出す方法が不明。

####parameter####
in.file.path         <- "C:/path/hoge.tif"

pixel.size.x        <- 30.31054
pixel.size.y        <- 30.30613

#特定の値のピクセル面積を出す場合
pixel.value.target  <- c(1:14)

#特定の範囲の値のピクセル面積を出す場合
pixel.value.target.min <- c(0, 5.710593137, 14.03624347, 16.69924423, 30.96375653)  #min, maxのi番目が、目的の階級に対応するように。
pixel.value.target.max <- c(5.710593137, 14.03624347, 16.69924423, 30.96375653, 90)
pixel.value.target.lab <- c("0-10","10-25%", "25-30%", "30-60%", "OVER60" )
#################

library(raster)
#ファイルを読み込み
i <- 1
target.tif <- raster(in.file.path)

#パラメータから変数生成
pixel.area <- pixel.size.x * pixel.size.y

#ベクトルデータに変換 <-これ必要?<-計算が早く終わる気がする
target.v <- as.vector(target.tif)
#NAのないベクトルデータに変換 <-これ必要?<-計算が早く終わる気がする
target.v.nna <- target.v[!is.na(target.v)]

#任意の値のセルの面積
    #各値をもつ面積をデータフレーム形式で出力する
    i <- 1
    tmp.area <- 0
    tmp.name <- 0
    for(i in 1:length(pixel.value.target)){
        tmp.area[i] <- sum(target.v.nna == pixel.value.target[i]) * pixel.area
        tmp.name[i] <- paste("pv", pixel.value.target[i], sep="")
    }
    (area.spec.range <- data.frame(area = tmp.area, row.names=pixel.value.target.lab))

#条件に合うピクセルの面積
    #条件に当てはまる値をもつピクセルの合計面積をデータフレーム形式で出力する
    i <- 3
    tmp.area <- 0
    tmp.name <- 0
    for(i in 1:length(pixel.value.target.min)){
        tmp.area[i] <- sum(target.v.nna > pixel.value.target.min[i] & target.v.nna <= pixel.value.target.max[i]) * pixel.area
        tmp.name[i] <- pixel.value.target.lab[i]
        #tmp.name[i] <- paste(pixel.value.target.min[i], "-", pixel.value.target.max[i], sep="")
    }
    (area.spec.value <- data.frame(area = tmp.area, row.names=tmp.name))

2014年11月7日金曜日

Frequency Tabulations from geotif (with R)

GISで、ポテンシャル地域を評価した後、ポテンシャルインデックスの累積累積度数分布表を作成するために、Rにてtiffファイルを操作した。
#ライブラリの読み込み
library(raster)

#GISで出力したtiffファイルの読み込み
pot.tif <- raster('XXXXXX.tif')

#画面で確認
plot(pot.tif)

#方はSで読み込まれているので、数値に変換する。(必要か?)
#また、その際データなしの場所を飛ばす。(必要?)
mode(pot.tif)
pot.num <- as.vector(pot.tif[!is.na(pot.tif)])
#モードの確認。
mode(pot.num)
#ヒストグラム作成
hist(pot.num)

#数値データをカテゴリに分ける
pot.cat <- cut(pot.num, breaks=c(14:30)/2, labels=(c(15:30)/2))
(pot.table <- table(pot.cat))

#エクスポート(略)

2014年10月21日火曜日

QGISでの表示言語の変更(QGIS 2.4)

海外の人にQGISの使い方を示すとき、メニューが英語表記であると説明しやすいため、UIの言語設定を変更しました。
参考 http://deerfoot.exblog.jp/12372794/
設定(s)→オプション→ロケールから、「システムロケールを上書きする」にチェックをいれて、変更したい言語を選択。
OKを押して、QGISを再起動すると、表示言語が変更されます。

2014年6月16日月曜日

Visibility on SAGA GIS

SAGA GISの機能で、特定の地点からどこの場所が見ることができるか計算するモジュールがあります。このモジュールを使えば、たとえば特定の山からどの範囲が展望できるかわかります。利用するモジュールは、Terrain Analysis – Lighting, Visibility / Visibility (Single Point) [Interactive]です。

いつも通り、DEMのグリッドを指定します。

image

実行すると、下のメッセージに、”Interactive module execution has been started” と表示されます。Interactiveのモジュールは、計算起点等を指定してやる必要があります。地図を表示し、地図の上の矢印(Action)ツールで、地図の適当な地点を選択すると、計算が始まります。

image 

一回のクリックで一か所からのVisibilityが計算され、再び待機状態になるので、Moduleメニューから、Visivility モジュールを停止させます。

image

Visivilityグリッドが作成されるので、地図に重ねてみます。

image

白くなっているところが、選択した箇所から見えるところです。3D表示すると以下の通り。

image

できました。

2014年6月14日土曜日

ImageMagickでGIFアニメーション

SAGA GISでの3D表示機能には、任意の視点をつなげた鳥瞰図をアニメーション表示する機能があります。SAGA GISではそれらを連続したスナップショットとしてpng出力ができるので、これをImageMagickでGIFアニメとして結合します。

まずは、出力されたpng画像をそのままつなげるとサイズが大きくなるのでリサイズします。

convert out*.png -resize 50% resize_%06d.png

新しくサイズが半分になったpngが作成されます。これを、以下のコマンドでGIFアニメーションに変換します。

convert -delay 5 -loop 0 resize_*.png movie.gif

できました。

movie

2014年6月11日水曜日

Watershed Basin in SAGA GIS

Sink Removal SAGA GISで、集水域図を作成しました。Saga Users Guide vol.2を参考に。

使うツールは以下の通り

  • Terrain Analysis - Preprocessing/Sink Removal
  • Terrain Analysis – Hydrology/Catchment Area(Parallel)
  • Terrain analysis – Channels/Channel Network
  • Terrain analysis – Channels/Watershed Basins

作業の流れとしては、1)DEMから窪地を削除、2)各セルにおける集水面積の計算、3)河川流路の作成、4)集水域グリッドの作成といった感じです。

データは、ASTER GDEMを利用しましたが、面積の計算等があるため、プロジェクションはUTMに変換して置きます。

Sink Removal

ModuleのTerrain Analysis - Preprocessing内にあるSink Removalツールにより、標高グリッドから窪地を削除します。ツールを選択すると、Decriptionに概要が表示される。このツールはグリッドを指定すると、窪地を埋めたグリッドを出力します。また、Thresholdを指定すると、どれくらいの標高差まで乗り越えを許容するか指定できます。

image

標高グリッドを指定して実行します。実行すると、河川が流下できるように、窪地や山岳地域で沢がうまく流下できない箇所が、埋められます。下の図は、左が処理前、右が処理後です。

image

湖周辺部や、火口も以下のように埋められます。

image

 image

 

Catchment Area(Parallel)

上で作ったグリッドに対し、各セルへの集水面積が入ったグリッドが作成されます。利用するのは、Terrain Analysis – Hydrology/Catchment Area(Parallel) です。標高データとしては、先ほど作成したno sinkのグリッドを指定します。

OptionのMethodでは、河川の流れがDEMの中でどう流れる仮定をするか設定できます。 河川の分岐を許可するかどうかや、流下方向を8方位に限定するか、などが指定できます。どの仮定を用いるかは、やってみて不自然でないものを選べばよいようです。

image

実行結果すると、それぞれのセルにそのセル自身の面積とそのセルの常流側に位置するセルの合計の面積が入力されます。色づけを調整(Logarithmic(up) 10000)して、Hillshadingレイヤを重ねて表示してみると、以下のようになります。

image

さらにズームして、セルに入っている値を表示すると、各セルの値が確認できます。

image

 

Channel Network

Sink RemovalとCatchment Area(Parallel)を用いて作成したグリッドにから、河川ネットワークのグリッドとシェープを作製します。モジュールは、Terrain Analysis – Channels / Channel Networkのモジュールを利用します。

Initiation Gridには、河川が始まる起点を指定します。今回は、集水域が1km以上になったら、河川が発生すると仮定します。Initiation GridにCatchment Area(Parallel)で作成したグリッドを指定し、Greater than 1000,000とします。また、最短河川長をセル数として与えます。今回は10としました。

image

実行すると、河川ネットワークを表したグリッドとシェープ、各セルの流下方向を示したグリッド、が作成されます。

image

グリッドの各セルには、河川の識別番号が与えられ、各河川の合流点には-1が与えられます。下の図は河川ネットワークのグリッドとシェープを重ねて表示しました。河川9と河川1が各端点-1のグリッドで合流して河川10になっています。

image

Watershed Basins

Terrain Analysis – Channels / Water Shed Basinsモジュールを使って、これまで作成したグリッドから集水域を作成します。標高グリッドと、先ほど作成したChannel Networkを指定します。

image

OptionのMin. Sizeは、最少集水面積をセルの数で指定します。今回は1000セルとしました。

image

できました。

2014年6月8日日曜日

SAGA GISでのグリッドの計算

複数のグリッドを用いて、計算を行います。
今回は一番簡単な二つのグリッドの差分を取る計算をします。Water Basinを作成する際に作成したfill sinkを行ったDEMと、オリジナルのDEMを比較しました。
モジュールは、Grid – Calculation / Grid Defference を利用します。
窪地を埋められたDEMをA、オリジナルのDEMをBとして指定します。
image
差分のグリッドが出力されました。色をGraduated Colorでwhite-Redに指定し、陰影図と重ねてみました。
image
オリジナルと比べると、どこがどれくらい埋められているかよくわかります。
image

2014年6月6日金曜日

SAGA GIS 3D View 2

前回、3D Viewが失敗してしまいましたが、座標系が緯度経度であったため、できなかったみたいです。UTM座標へ変換したら、表示されました。
image
3D表示をやめるには、地図を右クリックし、Show 3D Viewのチェックを外します。
image
デフォルトの設定では荒いので、3Dの設定画面のResolusionを1000くらいにしてみます。
image
image
きれいになりました。
また地形を強調するため、縦に引き伸ばします。
image
この右から3つ目のアイコンで、強調されます。
image
そのほか、赤青メガネで立体視できる画像を作ったり、
image
ムービーもつくれます。
movie

2014年6月4日水曜日

SAGA GISでCRSの変更

TASTER GDEMはWGS84/EGM96で作成されている緯度経度座標のデータのため、これをUTMに変換します。
DEMをSAGA GISに読み込みます。
変換に用いるのは、Projection – Proj.4 のProj.4 (Dialog, Grid)モジュールです。
モジュールを起動すると、変換元(Source)と変換後(Target)のCRSを指定するダイヤログが出てきます。
image
Source Projection Parameters の28 Parameters …をクリックすると、変換元のCRSの詳細を入力するダイヤログが現れます。
変換元のProjectionをlat/long(Geodetic)、DatamをWGS84と指定します。
image
OKを押すと、ひとつ前のダイヤログにもとるので、次にTarget Projection Parameterを指定します。今回はUTMに変換するので、UTMを指定します。
image
OKを押すと、再度元のダイヤログに戻ります。
image
プロジェクションの設定ができたため、OKを押すと、変換後のUTMゾーンを聞かれるため、該当するZONE 54を指定します。
image
OKを押します。
グリッドを描写する空間の設定が聞かれます。
image
OKを押すと、変換が開始されます。
image
ワークスペースに、新しいグリッドが作成されました。
image

2014年6月2日月曜日

SAGA GIS 3D View

前回作った陰影図をSAGA GISで3D表示してみます。
3D表示をするのは、3Dと書かれたアイコンをクリックするだけ。
image
DEMを指定するダイヤログが出てくるので、指定します。ほかのパラメータはデフォルトのままで大丈夫です。
image
すると、、、
image
あれ、失敗です。

2014年5月31日土曜日

Contour Map on SAGA GIS

SAGA GIS等高線図を作成しました。いつものASTER GDEM1を使います。

SAGA GISでのコンターマップの作成

等高線を引くためのモジュールは、Shapes – Grid / Contour Lines from Gridです。
image
設定項目は、
  • 標高データのグリッド
  • 最少標高
  • 最高標高
を指定します。最高標高と最低標高の指定は、特定の高さの範囲の等高線を引きたいときや、海底地形を含むグリッドデータで、海底のみのコンターを引きたいときとかに便利です。今回はASTER GDEMの画像一枚すべてを作成してみました。
できました。
image
ズームしてみるとこんな感じです。
image
国土地理院のウォッちずで、正解の地図を確認しようとしたところ、
平素より、地図閲覧サービス(ウォッちず)をご利用頂きありがとうございます。
ウォッちずは平成26年4月1日以降地図を更新しておらず、平成26年10月1日をめどにサイトを停止する予定です。
なお、最新の地図は「地理院地図」でご覧いただけます。
とのことです。
地理院地図は、ウォッちずで提供されていた1:25,000の地図のほか、基準点や土壌図、断層、火山情報等のさまざまな情報をオーバーレイできるように整備したサイトのようです。しかも、webサイトへの埋め込み機能があるようです。
上の地図は北岳周辺なので、地理院地図と比較してみました。
1:25,000の地図はさすがに地表の細かい崖まで書かれていますが、20万分の1程度の地図であれば、そこそこの再現率ではないでしょうか。


1 ASTER GDEMはMETI/NASAに帰属します。

SAGA GISで陰影図の作成

DEMから陰影図を作成します。DEMはASTER GDEM*1を利用しました。日本で一番ダウンロードされているだろうと思われる、富士山を含む地域のDEMです。

DEMの読み込み

まずはDEMをSAGA GISに読み込みます。
image
workspaceのDataタブにDEMデータをドラッグアンドドロップします。ASTEER GDEMをダウンロードした際に同梱されるnumファイルは、標高データを作成するために何枚の衛星画像を用いたかや、欠損値や異常値の補完に用いた画像に関するデータが書かれているため、今回は利用しません。
データツリーに追加されたDEMファイルをダブルクリックすると、ワークスペースのMapsタブにDEMが追加され、地図が表示されます。
image

陰影図の作成

読み込んだDEMにTerrarian Analysis – Lightning, Visibility 内のAnalytical Hillshadingモジュールを利用します。
image
入力としてDEMを指定す他はデフォルトのパラメータで、実行します。(上記画像参照)。
ワークスペースのデータタブにAnalytical Hillshadingのグリッドデータが追加されるため、ダブルクリックしてDEMと同じ地図に追加します。

色づけ

色づけしたいレイヤをMapsタブで選択します。まずはDEMから作業をするので、Analytical Hillshadingを、ダブルクリックして非表示にします。非表示レイヤはmapsタブ内では[ ]でくくられます。
DEMのレイヤを選択すると、右側のウィンドウ(Object Propery Window)のsettingタブでDEMの色を設定できるようになります。colorsをクリックして出てくる色設定画面から、Presetを選択、defoltを指定します。
image
Objet Property Windowに戻り、Applyを押すと、DEMに色が付きます。
image
Analytical Hillshadingを再度ダブルクリックして表示させ、colorsのTypeでShadeを選択し、Applyします。
image
色合いはあんまりよくないけれど、完成です。
*1:ASTER GDEMはMETI/NASAに帰属する

2014年5月25日日曜日

SAGA GIS

QGISをインストールしたら、SAGA GISも同時にインストールされていました。以前はなかった気がするので、スタンドアロンのインストーラではなく、ネットワークインストーラを利用したからでしょうか。

SAGA GIS起動画面

大学ではGRASSを教えてもらったのですが、GRASSはマップセットの設定とかがうまく理解できていないため、GUIで何とかなりそうなSAGA GISでまずはいろいろやってみようかと思います。

QGISはUIが多言語化されているし、書籍やネット上の情報もほかのフリーのGISソフトと比べて入手しやすいですが、地形解析のプラグインや3D viewの機能があまりよくありません。プラグインは2.0になってから対応するものが減ったのでしょうか。

QGISのメニューの中に、GRASSのマップセットを開くメニューがあるので、QGISの中でGRASSと連携して解析できるのだろうけれど、ひとまずこちらで。

とりあえず、以下を目標に調べてみます。

  • 鳥瞰図の作成
  • 水系図の作成
  • 特定の地点でのCatchment Areaの計算
  • 降水量を与えた時の流量の推定

河川流量は、どういった流出モデルやパラメータを使うかによって全然違うだろうけれど、どうせ正確な雨量データなんて入手できないので、桁が違わなければいいかなと考えています。