ページ

2009年5月27日水曜日

成果

これまでいろいろとデータと格闘していたが,ようやく使えるデータがそろって
きた。

用意できたのは
水系網

地質

地形図2種類


地質年代図


と谷密度の5種類である。
谷密度は絵を描くのに時間がかかりすぎたから今回は省略。

あれっと,よく見ると地質年代図の岐阜県あたりにかなり大きな欠側値がある。
これはデータ処理中のエラーなので修正せねば!

あと残りは
気候図と土地利用図,道路密度図,斜面方位図,斜面傾斜図ぐらいかな〜。
地質図まわりはさらに修正する必要があるけど,それはまた今度で!

ではでは明日からモニ1000調査に行ってきま〜す!

2009年5月22日金曜日

しぇーぷふぁいる

いやはや...今日はまたGIS経験の少なさを露呈してしまった...

しかしシェープファイルってぇやつはとても扱いにくいもんなんやね〜
半日ほどシェープファイルにもてあそばれてしまったよ...
dbfまわりで終わりかと思ったら,まだ壁があるなんて...

有名なGISソフトを使っている方々には無縁の障壁かもしれないけれど,GRASS
ユーザーにとってはやっぱりシェープの壁ってあるのかなぁ...
おそらく,ただ単純に自分の知識と技術が乏しいだけだろうけど...

でも今日の収穫もあった(よし前向きに行こう)!
シェープファイルからラスタへの変換が成功した!
まぁその機能があるんだから当たり前だけど...

その他に問題はというと,"r.watershed"がうまく動かない!

いろいろとググってはみるけれど,よくわからん...
ただ単純に6.3を使っているからいけないのかもしれないけれど,でもよくわか
らん...

まぁこれも宿題ですね〜
無事解決したら報告しま〜す

2009年5月21日木曜日

悪戦苦闘

近頃,というか今日も引き続き,国土数値情報統一フォーマットの整形作業をし
ていた。

今日はこの前から引き続き流路のラインデータをいじっていたんだけど,この
データはもともと値のおかしいところがあるらしい。

なのでおーくを使って単純に整形しただけでは,GRASSにインポートすることが
できない。これは,データに記載されているノード数と実際の数が違っているた
め...

そのままでは,インポートするときにデータ形式が違うと怒られてしまう

なので,今日は半日かけて,エラーの値を確認しながら実際のノード数と記載さ
れているノード数を確認する作業をしていた。

データの数が膨大なのでエディタの動きも遅いし,つまらないし,ねむたくなる
し...

いろいろと耐えながら進めるとようやく終わった。
もしかしたらおーくのスクリプトを書くよりも時間がかかったかも。
データの値がおかしいところは10カ所ぐらいだったのでまだよかったような気
がする。

できあがりはこんな感じ!



また,明日も悪戦苦闘してみよう!

2009年5月20日水曜日

らいととらっぷ?

どうも毎日毎日,捕まえたくないのにむしをトラップしているような気がする...

というか確実にトラップしている!

なんのことかというと,今年の4月から所属が変わったのだが,その職場は駅か
ら離れたところにある。
バスで10分ぐらいかかるのだが,それが田舎なので運賃がかなり高い(ような
気がする)。だから,健康のために自転車で通っているわけだけど,その道中
で,特に夕方に猛スピード(そんなに早くないけど)で走っているとどうしても
むしを捕まえてしまう。

まぁ服装にも問題があるんだけど...
最近は白シャツを愛用している。なので,これってつまり,自転車で自分からラ
イトトラップしているようなもの。

おかげさまで,せっかくの白シャツが昨日は一部黄色くなっていた...
いやいやシミじゃなくて,明らかに液体っぽいものの色...

いや〜これってたまにはやっぱりトラップしてるんだろうね〜

こんなこと,体験しなきゃわからないこと(いままで自転車通勤したことがない
から)だけど,まあでも楽しいかも...

新たな発見を喜んでいる今日この頃です...

2009年5月19日火曜日

おーくがすごい

先週に引き続き今週も国土交通省の国土数値情報統一フォーマットと格闘する
先週は,エクセルやらなにやらを駆使して"ちからわざで"土地分類メッシュから
シェープファイルを作成した
まぁあれはあれでなかなかよい結果だったのだが,今回もその続きである。

今日やりたいことは,国土数値情報統一フォーマットのラインデータからシェー
プファイルを作成するといもの。
こちらは前回よりも少し楽だったような気がする(まだ終わってないけれど)

おおまかな手順はここから

まずいつものとおり国土数値情報の統一フォーマットから目的のデータ,今回は
流路データ(W15-52L-48-01.0a)をダウンロードする。
これを解凍すると,htmファイルが2つとテキストファイルが1つ出てくる。
使うのはもちろんこのテキストファイル。

このテキストファイルには,頭から"ヘッダデータ","ノードデータ(行のはじ
めがN)","リンクデータ(行のはじめがL)","ラインデータ(行のはじめが
S)","台帳データ(行のはじめがDS)"の順に各1行単位でデータが格納されて
いる。

ここから必要なデータをとってきて加工すればよいのだ。
今回の場合,流路の線を書くだけならリンクデータ(行のはじめがL)の部分だ
けでできる。
ほかのデータの場合には必要に応じて,ラインデータも加工する必要があるかも...

というわけで,エディタでこのテキストファイルからリンクデータのみを切り出
して保存する。
データは次のような形で格納されている。

******************************

L 362336000003362336000004000002 0 000030
4455281 876147 4455207 875966 4455236 875914 4455287 875883 4455426
875933
4455441 875920 4455374 875862 4455377 875841 4455528 875856 4455570
875813
(中略)
4456704 875335 4456802 875215 4456826 875177 4456899 875134 4456924
875084
L 362336000005362337000006000003 0 000045
4459446 874186 4459352 874280 4459217 874364 4459208 874398 4459133
874428
4459020 874393 4458889 874369 4458641 874366 4458602 874405 4458658
874464
(以下省略)

******************************

どこに何が書かれているかは,データの中のhtmファイルを確認してください。

あとは,これをGRASSの
ベクトル型データのスタンダードフォーマット
に変換すればよいだけ。

いつものように力業でやってもよいのだが,前からおーく(awk)に興味があっ
たので,今回はこれを勉強してみることに!

おーくの取り扱いについては,web上にいろいろと出ているので,ここでは割愛
するけど,かなりいろいろできそうな気がする。
参考になったのはこちらのサイト

とりあえず試行錯誤をしながらスクリプトを書いていくと,次のような内容で無
事に変換することができた。

以下おーくファイル(link_awk)の内容
{
if($0 ~ /L /)
{
printf(FS);
printf("%d",1);
printf(FS);
printf("%d\n",1);
printf($1);
printf(FS);
printf("%d",$4);
printf(FS);
printf("%d\n",1)
}
else
{
printf(FS);
printf("%4.8f",$1/10/60/60);
printf(FS);
printf("%4.8f\n",$2/10/60/60);
printf(FS);
printf("%4.8f",$3/10/60/60);
printf(FS);
printf("%4.8f\n",$4/10/60/60);
printf(FS);
printf("%4.8f",$5/10/60/60);
printf(FS);
printf("%4.8f\n",$6/10/60/60);
printf(FS);
printf("%4.8f",$7/10/60/60);
printf(FS);
printf("%4.8f\n",$8/10/60/60);
printf(FS);
printf("%4.8f",$9/10/60/60);
printf(FS);
printf("%4.8f\n",$10/10/60/60)
}
}

あとは次のコマンドを実行すればよい


awk -f link_awk link_all.txt | awk '!/0.00000000/' > result.txt

ちなみに"linl_awk"は上のスクリプトを書いたファイル,"link_all.txt"はデー
タファイルからリンクデータだけを切り出したファイル。
結果は"result.txt"ファイルに格納される。

実行した結果がこちら

*************************************

L 6 1
123.74916667 24.35216667
123.75330556 24.34763889
123.75830556 24.34677778
123.76108333 24.34375000
123.76058333 24.34113889
123.75816667 24.33741667
1 1
L 6 1
123.87350000 24.35269444
123.87419444 24.35313889
123.87577778 24.35419444
123.87600000 24.35475000
123.87730556 24.35597222
123.87891667 24.35680556
1 1

(以下省略)
*************************************

実際の処理は1分ぐらいでおわる!

おぉ〜感動!!

世の中には便利なものがいっぱいあるね〜

次はもっとややこしいことに挑戦しよう。

2009年5月17日日曜日

山梨のとある山の中

ついに実習のシーズンが始まった!
今年は回数が減って年6回しかない。
今年は,教室での講義がないから気は楽だけど,その分学生との距離も遠くなっ
たので,うまく盛り上げられるかが心配...

昨日と今日で第1回目の実習。
内容はおきまりで特に問題はなかった。

実習中は時折雨・風が強く,散歩(調査)ができなくはないけど,あまり気が進
まないような天気だった。

肝心の植物はというと,開花している種数は例年とたいして変わらないと思うけ
ど,量は明らかに少ない気がする。やっぱり昨年は当たり年だったのかな〜

咲いていた花はこんな感じ
ズミ
ウワミズザクラ
ミヤマザクラ
コマユミ
ツリバナ
カマツカ
オオツクバネウツギ
ツクバネウツギ
ムラサキケマン
フタリシズカ
タチツボスミレ
エゾノタチツボスミレ?
ヤマツツジ
ホソエカエデ
ムラサキサギゴケ
カキドオシ
オドリコソウ
シバヤナギ
バッコヤナギ
....

今度は写真を撮ってこよう!

2009年5月15日金曜日

DBFふぁいる

またまたはまってしまった
今回は,丸丸2日間も...
GISってやつは難しいのね〜

何につまずいたかというと,シェープファイルのdbfの取り扱いについてである。
こいつがなかなかくせ者で,いろんなところに落とし穴がある...
まあGIS初心者&なるべくフリーソフト(i.e. GRASS & QGIS)で解析しようとし
てるんだからしょうがないか...

まあぼちぼち勉強するとして,ここ2日間の記録を書いておこう。

やりたいことは国土数値情報の統一フォーマット(ふるいでーた)をシェープ
ファイルに変換すること!!

国土数値情報の統一フォーマットはただのテキストファイルだから,それを(ち
からわざで)加工すればシェープファイルに変換することができる。

ちなみにMANDARAを利用すると,いくつかのメッシュデータ(斜面方位・傾斜,
土地利用 etc.)については変換することができるらしい。それ以外には,MMTM.TVの2種類のコンバーターを利用すれば変
換できるらしい。ただしこちらは有償(各5,000円)! 評価版あり!

実際,ちからわざで変換してみた感想だけど,ちからわざではそれなりに時間が
かかるから,時間をとるかお金を取るかは難しいところ...

でもなるべくお金は使いたくないし!
まぁ数こなせば,少しは処理手順もこなれて早くなるでしょ


ということでここから実際の手順

まず,国土数値情報統一フォーマットのメッシュデータをダウンロード
今回の場合(土地分類メッシュ G05-54M-48-010.zip)解答すると,htmlファイ
ルが2つとデータファイル(txt)が出てくる。
データはすべてテキストファイルに入っているので,これを加工すればよい!

まずエディタでデータファイルのヘッダデータ(1行目)を削除して保存

次にデータファイルをエクセルで読み込むのだが,エクセル(2003以前)は最大
行数(約63000行)が決まっているので,行数が多いと全部読み込んでくれな
い。2007を使うともっと多くの行数を扱うことができる(たしか100万行ぐら
い)のだが,残念なことにdbf形式で保存することができない...

そこでデータファイルをエクセル2003に取り込むために,いくつかに分割する

コマンドラインから

split -l 50000 "データファイル名" #50000行づつに分割

分割されたファイルをエクセルで読みこむ。
データが1列に読み込まれるので,データの区切り位置(ウィザード)でコード
ごとに分割する
マニュアルによると土地分類メッシュは1行が31文字で記述されていて,

文字数 内容
1-3 レイヤーコード
4-5 メッシュの大きさ
6-9 1次メッシュコード
10-11 2次メッシュコード
12-13 3次メッシュコード
14-16 地形分類(主分類2桁+副分類1桁)
17-21 表層地質(岩石区分2桁+かたさ1桁+時代1桁+断層1桁)
22-24 土壌(土壌統計2桁+付加記号1桁)
25-27 図葉コード(都道府県コード2桁+年紀区分1桁) ※年紀区分は北海道の
み,その他はブランク
28-30 資料年紀
31 縮尺

となっている。

今回,メッシュコードを3次で区分するから,分割は3,2,8,2,1,2,
1,1,1,2,1,2,1,3,1桁になる。
ファイル名をdb.xlsとして保存!ちなみにデータシート名はdb,db(1)〜db(7)ま
での8枚!dbが南でdb(7)にかけて北の順で並ぶ!

そしたら次は,シェープファイルの素材となるファイルを入手する!
都道府県別の3次メッシュコードのシェープファイル素材は,地域地盤環境研究所 村上貴志氏のページで入手するこ
とができる。

適当なところに解答して,でてきたdbfファイルを加工する。

まずdbfファイルをエクセル2003などで開き,名前の定義を必要な範囲に変更す
る(詳しくはこちら)。

そしたらあとはエクセルのif & vlookup関数で,データベースからdbfファイル
にデータを書き込む。今回は,北海道以外の都道府県のdbfファイルにデータを
書き込むので,ついでにマクロも組んだ。

ちなみにif & vlookup関数は次のように書いた

=if($A2>65431720,vlookup($A2,'[db.xls]db
(7)'!$C$1:$O$50001,2,FALSE),if($A2>63396678,vlookup($A2,'[db.xls]db
(6)'!$C$1:$O$50001,2,FALSE),if($A2>57406784,vlookup($A2,'[db.xls]db
(5)'!$C$1:$O$50001,2,FALSE),if($A2>54403127,vlookup($A2,'[db.xls]db
(4)'!$C$1:$O$50001,2,FALSE),if($A2>53365634,vlookup($A2,'[db.xls]db
(3)'!$C$1:$O$50001,2,FALSE),if($A2>52330567,vlookup($A2,'[db.xls]db
(2)'!$C$1:$O$50001,2,FALSE),if($A2>50321146,vlookup($A2,'[db.xls]db
(1)'!$C$1:$O$50001,2,FALSE),vlookup($A2,'[db.xls]db'!$C$1:$O$50001,2,FALSE))))))))

ちなみにA2のセルにはdbf元ファイルの3次メッシュコードが入っている。
vlookupの参照桁数(?:2と書いてあるところ)は,データ要素が2〜9まであるの
で,順次ずらしていく。

参考までにマクロもここに置いておく。

あとはマクロを走らせればいい

振り返ってみると,メッシュデータは割と簡単だったかも!

次は流域のラインデータが待っているのでちょっと戦ってみよう

ここまでの手順は次のサイトを参考にしました。

2009年5月13日水曜日

お引っ越し

今日は朝からブログのお引っ越し作業!

これまで使っていたブログを閉鎖して,こちらへ移す作業をしていました。
あまり数がないから,そんなに時間がかからなかったのが寂しい...

まあこれからですね〜!

今日はこれから大学です

2009年5月12日火曜日

久々の投稿

久々にブログを更新。なかなか続かないのは性格のせいだけれども...
ランニングもまたしかり...


最近取り組んでいることは,論文のためのデータ解析!!と新しい仕事のためのデータ整備!!
でもって今日もその続き!!

今日はGRASSのGISDBに,産総研の20万分の1の地質図(シェープファイル,ラスタファイル),国土地理院の国土数値情報の土地利用細分メッシュ(シェープファイル),道路密度(シェープファイル)をインポート!


以下,シェープファイルをインポートするおまじない!!

v.external --o dsn="データのあるディレクトリ" layer="インポートするファイル名" output="その後のファイル名"

ここでちょっとはまる!
上書き指定は"--o"とのこと。最初"-o"としていたので,怒られました!

こちらはラスタファイルのおまじない!!

r.in.gdal input="インポートするファイル名" output="その後のファイル名"

まあこちらは今更問題もなく!

おきまりのことだけど画像をインポートすると,R,G,Bに分解される!
そのため必要に応じて画像を結合しないといけない!

ここはつぎのおまじないで

r.composite --o red="赤色ファイル(ファイル末尾に.red)" green="緑色ファイル(ファイル末尾に.green)" blue="青色ファイル(ファイル末尾に.blue)" level=32 output="その後のファイル名"

時間がかかるけど,何事もなく終わる。


とりあえずシェルスクリプトなどのメモを置いておく
地質図シェープファイル
地質図ラスタファイル
国土数値情報土地利用細分メッシュ
国土数値情報道路密度
RGBの結合作業



でも最近,GRASSにおけるベクターファイルの扱いに苦労している!!
特に,dbfファイルまわりで!!
実によくわからん!
QGIS経由では簡単なのに,直接GRASSからではうまくいかない...
この辺は早急に勉強しなければ...

あともう一点困っていること(悩んでいることは),DEMデータの取り扱いについて。
なにやら演算をしないといけないのだけど,その下準備をどうするか...
もう少しない知恵を絞ろう!

2009年5月4日月曜日

投影法の変換

投影法にはいろいろな種類がある。
web上にもフリーのデータが多く配信されているが,これらを使うには自分の投影法に変換しなければならない。
そこでGRASSでの投影法の変換方法について。
コマンドは,ラスターデータなら"r.proj",ベクターデータなら"v.proj"
マニュアルはこちらこちら

まずはラスターデータの変換方法から

以下マニュアルより引用
r.proj [-ln] [input=name] location=string [mapset=string] [dbase=string] [output=name] [method=string] [memory=integer] [resolution=float] [--overwrite] [--verbose] [--quiet]

パラメータの指定方法
input: インポートするファイル名
location: インポートするファイルがあるロケーション名
mapset: 同じくインポートするファイルがあるマップセット名
dbase: ロケーションのあるディレクトリ
output: 変換後のファイル名。省略すると元のファイル名が使用される。
method: 補完法。nearestかbilinear,cubicを選択。デフォルトはnearest。


そしてベクターデータの変換方法。こちらはラスターよりパラメータが少ない。

以下マニュアルより引用
v.proj [-lz] [input=name] location=string [mapset=string] [dbase=string] [output=name] [--overwrite] [--verbose] [--quiet]

パラメータの指定方法
input: インポートするファイル名
location: インポートするファイルがあるロケーション名
mapset: 同じくインポートするファイルがあるマップセット名
dbase: ロケーションのあるディレクトリ
output: 変換後のファイル名。省略すると元のファイル名が使用される。

以上

実際には,input,location,mapsetだけを指定すればたいてい変換できる。

グリッドをつくる

GRASSでグリッドを作ってみる。
コマンドは"v.mkgrid"
マニュアルはこちら

以下GRASSマニュアルより
v.mkgrid [-q] map=name grid=rows,columns [position=string] [coor=x,y] [box=width,height] [angle=float] [--overwrite] [--verbose] [--quiet]


パラメーターの指定方法:
map: 新しいファイル名
grid: 縦・横のグリッドの数を指定。ちなみに"rows"は南北,"colums"は東西方向のこと。
position: regionかcoorを選択。デフォルトはregion。regionではregion全体にグリッドを作成。coorはregion内の一部にグリッドを作成。
coor: positionでcoorを指定した場合には原点(左下)の座標(x,y)を指定。
box: グリッドのサイズ(幅と高さ)
angle: グリッドの角度を時計回りで指定。デフォルトは0度。

これで完成