てくてくダイアリー

GISとか使ってました

フリーデータを使う(3)-3基盤地図情報の数値標高モデルをグリッドへ

2011-11-29 | ArcGIS

火曜日ってあっという間にくるのね。。。と思う今日この頃。

今回は先週シェープファイルにしたDEMのデータをグリッドにしてみようと思う。グリッドにすると、表示が速いし、傾斜角とか斜面の向きとか計算できるし。ただし、ここから先はSpatial Analystが必要だ。持ってない人ごめんなさい。

ポイントのシェープファイルからグリッドを作成するには、

  1. 単純にシェープファイルをラスタに変換する方法
    ArcToolbox>変換ツール>ラスタへ変換>ポイント→ラスタ(Point to Raster)
  2. ポイントシェープから補間をしてラスタに変換する方法
    ArcToolbox>Spatial Analystツール>内挿 ツールボックスに含まれるツール

の2つがある。1.の方法だと処理は速いんだけど、ラスタに値を割り当てる際、統計的な処理が行われてしまい、DEMには不向きだと思う。いや、表示だけならまぁいっかとも思うけど。

ここでいう統計的な処理というのは、ポイントからラスタに変換する際に、1つのセルの中に複数のポイントが入った場合、その平均をとるとか、合計をとるとか、という処理を指す。

今回は(約)5m間隔のポイントシェープができているのだが、1.の方法で30mのセルサイズのグリッドを作成するように指定すると、30mの中に複数のポイントが含まれることになる。この複数のポイントを合計したり、最も値の出現数が多かったりするものをそのセルの値として使って、グリッドを作る、ということになる。

今回の場合、平均値を出力するならまぁ悪くはないかもしれないけど、そのセルの真ん中から複数のポイントへの距離も考慮されずにそのセルの値にしちゃうのはうーん、って思わない?かな。。。

ついでにセルサイズが30mであれば大丈夫だけど、5mとか1mとかだと、そのセルに入るポイントがないという事態が発生し、ここには標高値は入らない。この場合斜めに白い線が入ったようなグリッドが作成される。それはこまるっしょ。

ということで、今回は2.の内挿のスプラインを使おうと思う。

スプラインを実行するには、「ArcToolbox>Spatial Analystツール>内挿>スプライン(Spline)」を実行する。

入力ポイントフィーチャには前回ポイントシェープに変換した基盤地図情報、で、Z値フィールドは「標高」になる。出力ラスタなどを適宜入力して、出力セルサイズは今回は処理が重いかもしれないけど5mにする。あと、オプションのスプラインの種類で「TENSION」を指定する(と大きな外れ値のないきれいな標高データができることが多い)。

もし文京区の形でグリッドを出力したい場合は「環境」ボタンをぽちっと押して、「処理範囲」と「ラスタ解析」の「マスク」を指定しておこう。四角いままでいいようなら、「環境」の設定は抜かしてくださいな。

余裕があったら、前回ダウンロードした基盤地図の文京区の範囲をポリゴンにしておいて、ここで指定するといいんだけど、そういえば少し前にe-Statのページから文京区の町丁目界のデータをダウンロードしたのでそれを使っちゃうことにする。ああ、データの測地系、座標系が同じってすばらしい。

まずは「処理範囲」の文字をクリックして、「範囲」のところで、「h1713105.shp」を指定する。

同様にして、ラスタ解析の「マスク」のところで「h1713105.shp」を指定する。

2つの設定が終わったら「環境設定」ウインドウの「OK」をクリックする。

で、スプライン(Spline)のウインドウでOKをクリックする。入力の指定は、例えば以下のような感じ。

で、しばししばしまつ。結構待つかも。(1分ぐらい待った)。

グリッドができあがるとこんな感じ。

ついでに文京区の形で切り出すとこんな感じ。

うんうん。きれいきれい。

しかし、ふと基盤地図情報のメタデータ(fmdid0-6.xml)を見てみると、今回ダウンロードしたのは数値地図5mメッシュ(標高)を0.2度間隔で読み直したデータだったらしい。それをまた5mに補間し直すって。。。何か分析に入る前に、ちょっとずつ誤差が出てきてしまうような気がする。

ちゃんと分析をしたいなら数値地図を買って、point to rasterを出力セルサイズ5mで実行する方がよいかもしれない。数値地図は確実に5mメッシュであって、0.2度メッシュ=約5mメッシュじゃないということだ(と思う)から、Point to Rasterで統計的な処理が行われる心配もないわけだし。

まま、今週はこんなところで。。。


フリーデータを使う(3)-2基盤地図情報の数値標高モデルをArcGISへ

2011-11-22 | ArcGIS

さて一人で大感動のうちに表示したDEMデータだが、表示だけでは物足りない。データのドラッグ&ドロップに対応していなくてもいいから、ArcGISに持ち込みたい。そんなときには、DEMのデータをポイントシェープに出力することができる。

※ちなみに、ArcCatalogからArcMapにシェープファイルなどをドラッグ&ドロップして、マップにデータを追加することはできる。

データの変換も楽々で、基盤地図情報ビューアー・コンバーターで、「コンバート>標高メッシュをシェープファイルに出力」を選択し、出力先ファイルなどを指定して、OKすればよい。

ただし、何も考えずにシェープファイルに変換するとすんごい容量のポイントシェープができあがってしまうので、今回は文京区のあたりに絞ってポイントシェープに変換することにする。

実は基盤地図情報ビューアー・コンバーターでは、シェープファイルに変換する範囲を大まかに決めておくことができる。矩形やポリゴンで切り出す範囲を決めたり、今表示されているだいたいの範囲を切り出すこともできる。

ただ、切り出し範囲を決めるにせよ、表示されている範囲を切り出すにせよ、DEM上で文京区がどのあたりかがわからないと範囲を決定できない。というわけで、基盤地図情報から文京区のデータをダウンロードして、基盤地図情報ビューアー・コンバーターに表示し、だいたい文京区のあたりを表示しておいて、シェープファイルにデータを変換しようと思う。

データは前回と同じ、基盤地図情報のホームページから入手する。

今回は、基盤地図情報(縮尺レベル25000)のJPGISをクリックして、「東京都>行政区画の境界線および代表点」にチェックし、「選択して次へ」をクリックする。で、「FG-JPS-13-05-Z001.zip」をダウンロードし、展開しておく。

で、DEMが表示されている基盤地図情報ビューアー・コンバーターに「FG-JPS-13-AdmBdry25000-20110131-0001.xml」と「FG-JPS-13-AdmPt25000-20110131-0001.xml」をドラッグ&ドロップする。(展開したファイルを3つ全部追加しちゃってもいい)。

そうすると行政界(区の境界)と区の名前が表示される。

これで文京区を探して、だいたい文京区全体が表示されるようにしておく。以下の図のような感じ。

こんな風になったら、「コンバート>標高メッシュをシェープファイルに出力」を選択する。

直角座標系にした方が後々楽なので、チェックが入った状態にし、東京なので9系で、出力範囲は「(おおむね)現在表示されている要素のみを出力」を選択する。あと出力先ファイル名を指定する。

で、OKすると、シェープファイルへの変換が始まる。

変換後のシェープファイルをArcMapに追加すると、ポイントがぎっちりと表示される(結構時間がかかる)。このままだとちゃんと変換できてるんだろうかと不安になるのだが、例えば、指定間隔分類で5mずつに区切り(以下の画面はレイヤプロパティ>シンボルタブ内の「分類」ボタンを押すと開く)、

「シンボル」の文字上をクリックして「すべてのシンボルのプロパティ」を選択して。。。

シンボル選択ウインドウの「サイズ」をとても小さくして。。。(ここでは4)

標高のカラーランプを使って表示すると。。。

こんな風に表示される。

なかなかいい感じ♪左側というか西側の白いところは雪が積もるほど標高が高いわけではないけれど。

さて、後はグリッドに変換でもするか?そしたら3D表示もいいかも?

まま、今週はこの辺で。


フリーデータを使う(3)基盤地図情報の数値標高モデル

2011-11-15 | ArcGIS

いや、もうここで紹介するほどのこともないような、メジャーなデータだけど、ちょっとコンバートツールに感動したもので。。。

今回は東京都文京区のあたりのDEMデータをダウンロードして、コンバートツールで表示するところまでやってみようと思う。変換とか補間とかは次週以降ということで。

まずはデータのダウンロードは以下のページから。

基盤地図情報ダウンロードサービス
http://fgd.gsi.go.jp/download/

#ちなみに近い将来、ユーザ登録制になるらしいですよ。と書いた先から、ユーザ登録制になってました。早い。。。しかし、なんでユーザ登録に年齢とか性別とかが必要なんだろう。。。50代男性はよくDEMをダウンロードしてます、とか?(笑)。

「利用者登録画面はこちら」でユーザ登録を済ませた後、上記ページから「利用者登録画面はこちら」をもう一度クリックし、IDとパスワードを入力する。もしかするとアンケートが表示されるかも。

で、開いたダウンロードページの「基盤地図情報数値標高モデル」のところで、JPGISかGMLかのリンクをクリックする。たぶんどっちでもいいんだけれど、今回はJPGISをクリック。

そうすると5mメッシュ、10mメッシュ、250mメッシュの選択肢が現れるので、その文字列の前の+をクリックして展開する。例えば5mメッシュの前の+をクリック。

するとデータの地域が選択できるので、今回は「東京埼玉地区」にチェックをして「選択して次へ」ボタンをクリックする。そうするとダウンロード画面に行くのだが、どのデータが文京区のあたりなんだがよくわからない(涙)

データの名称をみると「FG-JPS-5339-XX-DEM5A.zip」となっているのだが、このXXの部分が標準地域メッシュの2次メッシュの番号になっているらしい。

文京区のあたりの2次メッシュ番号を調べるには、同じく地理院さんのページで「基盤地図情報(縮尺レベル25000)閲覧用インデックスマップ」から調べていく。今回は東京都文京区なので、地図上から「東京」をクリックする。

さらに「20万分の1地勢図名:東京」というページで文京区のあるあたりをえいやっとクリックする。ちなみに「東京西部」の図郭がそれにあたる。そうすると「533945.png」という画像が開く。この画像名がわからないときは、URLの末尾を確認してくださいな。

このファイル名の下2桁(45)が数値標高モデルのデータのXXの部分と対応しているので、今回ダウンロードすべきはFG-JPS-5339-45-DEM5A.zipということがわかる。

あと、533945.pngを見ると文京区が画像の右端というか東にあって、文京区全域はここには含まれていないっぽい予感がする。このような時には、もう一度「20万分の1地勢図名:東京」のページで、「東京西部」の東隣の図郭をクリックする(東京首都です)。

そうするとこの2次メッシュは46ということがわかるので、もうひとつFG-JPS-5339-46-DEM5A.zipをダウンロードすればいいのだな、ということがわかる。

データをダウンロードしたら、展開しておく。

あと、データのコンバートツールも地理院さんのサイトからダウンロードしておく。上記ページの下の方に「基盤地図情報閲覧コンバートソフト(6.2MB zipファイル)」というリンクがあるのでここからダウンロードしておく。もう持っているよ、という人が多いと思うけれど、今年の10月4日に更新されたらしいので、もう一度ダウンロードしておくとよいかも。

コンバートソフトもダウンロードしたら展開しておく。

あとは、展開したファイルの中から「FGDV.exe」をダブルクリックして起動する。

さぁ、ここからが感動の瞬間だ!基盤地図情報と書かれた背景が水色の部分に、展開したDEMのデータ(例えば、FG-JPS-5339-45-99-dem5a-20090202.xml)をドラッグ&ドロップする。

そうすると、基盤地図情報ビューアー・コンバーター内に、ドラッグしたデータが表示されるのだ!ドラッグ&ドロップでデータが表示されるなんて!しかも配色が超きれい。結構かんどー。

さらに、複数のXMLファイルを一度にドラッグしても(ちょっと時間はかかるけど)OK!あっというまに2次メッシュ2図郭分のDEMを表示することができる。めちゃめちゃかんどー!


2次メッシュ2図郭分のDEM。
なんてうつくしー。
下町のあたりを拡大すると、細かな道まで見えてくる。

ああ、こんなことで感動するなんて、もしかしてArcユーザだからかなぁ。。。(苦笑)データの種類が決めうちで、だいたいの標高の範囲もわかっているからできることなんだろうけど。。。ほんとに簡単で、きれいな地図が表示されるんだもん。

一人で大感動したところで、今週はこれにて。。。


フリーデータを使う(3)GADM

2011-11-08 | ArcGIS

今回は海外もののデータのご紹介。

海外物のデータというとDCWとか(ふるっ)衛星画像ものとかがあるけど、やっぱり何となく行政界をゲットしたい。私がインドのデータを探していたときに、最初に教えてもらったのがこのGADMのデータだ。

GADM database of Global Administrative Areas
http://www.gadm.org/

全世界のデータを一挙にダウンロードもできるようだが、結構巨大なファイルらしいので、国毎のダウンロードがオススメ。以下のページから国毎のデータをダウンロードできる。

Download by country
http://www.gadm.org/country

「Country」のところで国名を指定して、ダウンロードするフォーマット(デフォルトでShapefile)を選んで、OKをクリックする。

そうするとダウンロードできる地図の画像のページに移動し、そこで「Download」をクリックするとそのデータをダウンロードできる。かなりお手軽にデータを入手できる。

ちなみに利用はアカデミックユース、非商用ユースのみ。再配布、コマーシャルユースは要許可だ。

さてこのデータ、どの程度の細かさまで入力されているか、だが、インドの場合だと、だいたいディストリクト~タルク(サブディストリクト)レベルまで入力されている。面積が小さいタルクの場合は、ディストリクトかいくつかのタルクがまとめられた行政界が入力されている。(まぁつまり厳密なタルクが入力されているわけではない、ということだ。)

日本の場合だと、国境、都道府県界(47ポリゴン)、おそらく市区町村界(1811ポリゴン)の3つのポリゴンシェープが入手できる。ただし、横浜市とか川崎市は1つのポリゴンになっているようだ。

欲を言えば、政令指定都市内の区の境界もほしいよなー(インドならタルクは全部入っててくれるとありがたいなー)と思ってしまうところだが、日本のように地図が入手しやすい国ならともかく、地図が手元に全くない海外を対象にしていると、まずはあってありがたいデータである。

測地系はWGS84なので、ランドサットのデータ(こっちもWGS84)と重ね合わせるとぴたっとくるので、ちょっとうれしかったりする。意味もなく行政界毎に植生指数とか求めてみたりしたくなってしまう。

今回は文章ばっかりですが。。。これにてー。


フリーデータを使う(2)e-Statの統計データのフィールド定義

2011-11-01 | ArcGIS

先週は、ネタはあったんだけど、元気がなくて(体調が悪くて)ブログの更新ができなかった。。。更新チェックしにきてくれた人、ごめんなさいです。ネタがつきないのはもちろんすばらしいけど、健康ってほんとにすばらしい。

さて、今回は先々週使ったe-Statの統計データに含まれているKEY_CODEというフィールドのお話。

シェープファイルの方のKEYCODEフィールドはテキストフィールドとして読み込まれるのだが、統計データの方では数値型のフィールドとして読み込まれてしまう。このままだと結合ができないので、統計データの数値型フィールドをテキストフィールドとして読み込みたい。

数値型フィールドを文字型として読み込むなら、

  1. 文字型フィールドを一個作って数値型フィールドの内容をコピーする

    しかしその前にテキストファイルをDBFかなにかにエクスポートせねばなるまい。それも確かに悪くはない。

    あるいは元のCSVをEXCELか何かでよんで、セルの書式設定をすればよいのだろうか。最初の行のKEYCODEのところに何か文字を入れても素敵かもしれない。(ArcGISは最初の5行だか、20行だかのデータを呼んで数値型か文字型かを判断するらしいので)

  2. schima.ini内にフィールド定義を書き込む

の2種類ぐらいの方法があるだろうか。今回は何となくスマートに見える2番目の方法を説明する。

このschima.ini、ArcGISに一度統計データを読み込むと自動的に作成される。前回の統計データを読み込んだ直後のschima.iniの中身は以下のような感じだ。

[tblT000051C13105.txt]
Format=CSVDelimited

この後ろに、何かいろいろ書き足すと、テキストファイル(CSVとか)のフィールド定義(どの列が数値型とか文字型とかを指定すること)をすることができる。

詳しくはESRIJのブログに書いてあったのでそちらを見てくださいな。

テキスト ファイルのフィールドを定義する方法
http://blog.esrij.com/arcgisblog/2010/06/schemaini-301f.html

皆さんにはこの資料に一度は目を通していただくとして、今回はもうちょっと手抜きな方法を。

一度ArcGISに追加したデータのテーブルをテキストファイルにエクスポートすると、同じschima.iniにエクスポートした結果のテーブルのフィールド定義が自動的に追加される。

例えば、前回使ったシェープファイル「h17ka13105」の属性テーブルをテキストにエクスポートすると、以下のような情報がschima.iniに追加される。

[Export_Output.txt]
ColNameHeader=True
CharacterSet=932
Format=CSVDelimited
Col1=FID_ Integer
Col2=AREA Float
Col3=PERIMETER Float

<中略>

Col38=KCODE1 Char Width 7
Col39=KEY_CODE Char Width 11
NumberDigits=6

このCol39の情報を、統計データ(tblT000051C13105.txt)のCol1の情報として指定すると、統計データをArcMapに追加したときに、見事KEY_CODEフィールドが文字型として読み込まれるようになる。

ただし、一列目だけ(Col1だけ)のフィールド定義をschima.iniに書き込むと、それより後ろというか右側の列にはむなしく<ぬる>が入る結果となる(実際にやって、非常に寂しい思いをした)。

今回の場合tblT000051C13105.txtには全部で71列のデータが入っている。これを手動でフィールド定義を書き込むのはすごくいや(笑)なので、ちょっと手を抜く方法を考えてみた。

  1. 「h17ka13105」シェープの属性テーブルをテキストにエクスポートしておく。(先ほど説明したとおり)

  2. tblT000051C13105.txtをArcMapに追加する(このときはKEY_CODEは数値型として読み込まれる)

  3. 2.のテーブルをテキストファイルにエクスポートする。例えばtblT000051C13105_test.txtにエクスポートする。(これで、schima.iniにtblT000051C13105_test.txtのフィールド定義が自動的に追加される。素敵。)

  4. schima.iniをテキストエディタで開き、以下の編集をする

    • 以下の行を削除
      [tblT000051C13105.txt]
      Format=CSVDelimited

    • [tblT000051C13105_test.txt]を[tblT000051C13105.txt]に変更(_test部分を削除)

    • Col1についての情報を編集
      「Col1=KEY_CODE Float」となっているところを「Col1=KEY_CODE Char Width 11」と変更

      シェープファイルの属性テーブルをエクスポートしたテキストファイルに関するschima.iniの下から2行目Col39の行をコピーして使うと楽。

これでschima.iniが以下のようになるはず。太字のところが重要ー。

[Export_Output.txt]
ColNameHeader=True
CharacterSet=932
Format=CSVDelimited
Col1=FID_ Integer
Col2=AREA Float
Col3=PERIMETER Float
Col4=H17KA13_ Integer
<中略>
Col38=KCODE1 Char Width 7
Col39=KEY_CODE Char Width 11
NumberDigits=6
[tblT000051C13105.txt]
ColNameHeader=True
CharacterSet=932
Format=CSVDelimited
Col1=KEY_CODE Char Width 11
Col2=HYOSYO Integer
Col3=HTKSYU Char Width 255
Col4=CITYNAME Char Width 255
Col5=NAME Char Width 255
Col6=T000051001 Integer
<中略>
Col71=T000051066 Integer
NumberDigits=6

[Export_Output.txt](シェープファイルの属性テーブルをエクスポートしたテキストファイル)についての情報はいらないので、削除しても構わない(あっても構わないけど)。

で、念のため、ここでArcMapを一度終了させて、再度起動しよう。

で、もう一度tblT000051C13105.txtをArcMapに追加すると。。。

めでたくKEY_CODEが左寄せで表示される(ちなみに文字型は左寄せ、数値型は右寄せらしい)。

これでシェープファイルとの結合もばっちりできる。

文京区とか1つの市区町村で地図化する際にはあまり問題にならないかもしれないが、NAMEフィールドで結合すると同じ地名があったときに、間違って結合が行われてしまう可能性がある。

ある程度まとまった市区町村単位で町丁目別の地図を作りたい場合は、今回のようにKEY_CODEをキーに結合する方が確実だと思う。

なんだか結局あんまりスマートじゃないような気もするけど。。。まぁこんなやり方もあるということで。