2017年06月28日

時系列アニメーションをPDFに

前回は地価の時系列データを使って描いた地図を、動画ファイルに出力する方法を確認した。

でも、地価の値に興味がある人なら、ある時点でアニメーションを止めたくなると思う。ArcGISを持っていればもちろんタイムスライダーバーをその時点で止めればいいわけだけど、プレゼンのように、みんなの前で何か見せる時は、あらかじめ作っておいた地図を見せる方がトラブルも少なく安心だ。

そういうわけで、今回は各年の地図をPDFに出力する方法を確認する。

まず手作業でやるなら、タイムスライダーを1年ずらして、ファイル>エクスポートでPDFにエクスポートして、これを30年分…という方法だろうか。作業に入る前から、遠い目になってしまいそうだ。第一、PDFを作ってから、ちょっと地価のポイントの色を変えたいんだよねーとなると、また一からエクスポートのし直しだ。まぁ30年ぐらいならやらないこともないけどね…。(この妥協が悲劇を生むことが多い)。

もし頑張ればPythonを実行できる、という人なら、スクリプト作るといいと思う。

私はすんごく頑張らないとPythonのコードを書くことができない。ということで、以下のArcGISのマニュアルに出ているコードを参照してみた。

DataFrameTime ― Help | ArcGIS for Desktop
http://desktop.arcgis.com/ja/arcmap/10.3/analyze/arcpy-mapping/dataframetime-class.htm#C_GUID-31BD4516-B656-43D6-800F-C4FADE9D4062

コードのサンプルのところのexample 1のところに出ているコードを使った。以下にこのコードをベースに、ほんとにちょっとだけ書き換えたものをコメント付きで載せておく。

(コメントでは日本語を使っていて、コードに日本語を使うための処理をしていないので、削除しないと動かないと思う。#で始まる行は削除してくださいな。あるいは、# coding: cp932をコードの先頭にいれてくださいな。(SJISでコードを保存する場合))

import arcpy
import os

### mxd名をフルパスで指定 パスの区切りは円マーク2つ ###
mxd = arcpy.mapping.MapDocument("C:\\home\\gisdata\\d01_tokchika_anime.mxd")

# df にMapLayersというデータフレームを代入
# 上記.mxdの地価データを読みこんだデータフレーム名もMapLayersに変更して
# .mxdを保存しておくこと
df = arcpy.mapping.ListDataFrames(mxd, "MapLayers")[0]

# df.time.currentTimeにMapLayersデータフレームの開始時間を代入
# 開始時間はタイムスライダーのオプション内で設定した時間だと思う
df.time.currentTime = df.time.startTime

# df.time.currentTimeが終了時間以下の時、while文内を実行
while df.time.currentTime <= df.time.endTime:
# 時間文字列は例えば2008-12-29 02:19:59となる。
# これをハイフンで区切り、最初の文字列(つまり2008)に
# yearと.pdfをつけてファイル名とする
fileName = "year" + str(df.time.currentTime).split("-")[0] + ".pdf"

print df.time.currentTime

# fileNameに出力先のフルパスを追加する
fileName = os.path.join("C:\\home\\gisdata\\pdfs\\", fileName)

# mxdからfileNameにPDFを出力する
arcpy.mapping.ExportToPDF(mxd, fileName)

# df.time.currentTimeに時間間隔分をプラス
# 時間間隔もタイムスライダーのオプション内で指定されている数値だと思う
df.time.currentTime = df.time.currentTime + df.time.timeStepInterval
del mxd

これを実行すると、C:\home\gisdata\pdfs\の中に、year1983.pdfといったファイルが出力される。それらを1つのPDFにまとめたのが、以下のPDFだ。
若干容量が大きいので、ダウンロードにはご注意を。(15.3MB)

国土数値情報 地価公示データから作った東京23区の地価の地図
tokchika1983-2015.pdf


この方法だと.aviに出力したものよりはきれいじゃないかなー。AcrobatでPDFを表示している場合は、ページレベルにズームで表示(「表示>ズーム>ページレベルにズーム」を選択)すると、1ページ全体がぴったりとAcrobatの中に表示される。ここで、マウスのホイールをくるくる回すとアニメーション的表示ができる。

ところで、PDFを1つにまとめる際、私がよく使っているのは、CubePDFPageというフリーソフトだ。
PDFページ結合・分割フリーソフト
http://www.cube-soft.jp/cubepdfpage/

全部の年じゃなくて、5年おきの地図だけ必要ならそれだけをCubePDFPageにドラッグしてあげて、PDFを作成するなんてこともできる。うーん便利。

ちなみに、mxdをPDFに出力するarcpy.mapping.ExportToPDFでは、「PDF」の部分をPNGやらJPGに変えるとそれらのファイルに出力することもできる(詳細はマニュアルを見てくださいな)。動画にしたいならこれらの画像からArcGISの外で何かツールを使ってアニメーションにすると、きれいにできると思う。

今回は頑張ってPythonを実行してみた。
ではでは〜。
posted by たかはし at 11:00| Comment(0) | ArcGIS

2017年06月21日

時系列アニメーションを動画ファイルに出力

あれっ、アニメーションはもう終わったはずじゃぁと思った人もいるかもしれない。今回は、アニメーションを動画ファイルに出力する方法をメモしておく。

アニメーション表示についての記事では、これまで以下のような内容を説明した。
(1)アニメーション表示用のデータの取得
国土数値情報の地価データのダウンロード

(2)アニメーション表示用データの構造と作成
地価データからアニメーション表示用のデータを作成

(3)アニメーション表示
レイヤプロパティ>時間タブでの設定とタイムスライダーの利用

(4)アニメーション表示に時間を示すテキスト追加
タイムスライダーのオプション設定

そして、アニメーション表示の設定がされたデータを使って以下を説明した。
凡例に各年のフィーチャ数を表示
凡例の数値に桁区切りを表示
値が大きなフィーチャを最後に表示

今回はこれで表示される地図を動画ファイル(.aviとか)に出力する。

出力前にもうひと手間。現在地価は自然分類で表示されているが、これを手動で分類値を決める。えーっと手順は…レイヤプロパティのシンボルタブで、範囲の数字を入力して変更していく。

変更後の数値だけど、よくやるのは自然分類のクラス分けを参考にして決める方法である。自然分類でクラス数が5(サンプル数の上限が10,000)だと、区切りの数値は以下のようになっている。

i17052121.png

これを大まかに参考にしつつ、キリがよくわかりやすいかなぁと思われる数値を選ぶ。例えば以下のような感じ。

i17052122.png

もちろん、使っているデータの分野でポピュラーな値の区切り方があるようならそれに従うとよい。

ラベルのところの文字もクリックすれば自分で書き換えられるので、最大値と最小値は凡例に出さない、というようなこともできる。

i17052123.png

これなら、クラス分けの数値もちょっとは人間にわかりやすいかもしれない。

さて、やっといよいよ動画ファイルへの出力だ。操作は簡単、タイムスライダーの「ビデオにエクスポート」アイコンをクリックする。

i17052124.png

で、出力ファイル名を聞かれるので、何か指定する。

次に、出力ファイルの圧縮形式を指定する画面が表示される。動画の圧縮とか詳しくないんだけど、私の環境では「Microsoft Video1」だと、コーデックがないとかのエラーも出ずに出力できた。OKをクリックするとエクスポートが始まる(けど、結構時間がかかるしPCのファンがぐーんと回り始める)。

i17052125.png

出力結果は結構な容量のファイルになる。圧縮の度合いとかを調整するといいかもしれない。私が出力したのが以下のファイル。圧縮の品質は50にしている。いえ、見るほどの美しい地図じゃないですよ、残念ながら。5MB強あるのでネットがナローな環境ではダウンロードにご注意を。



動画では、画面のイメージがそのままアニメーション化されてしまう。このビデオにエクスポートを起動した時点で、ArcMapの表示がデータビューならデータビューが、レイアウトビューならそれがアニメーション化される。年によってちこちこ変わる凡例も出力したいのなら、レイアウトビューにしておこう。

あと、レイアウトビューで選択したテキストも水色の枠もそのまま表示されてしまう。がっくり。用紙とか余白の範囲を示す線も出力されちゃうので、あんまりエクセレントではないかも…。こんだけいろいろ操作して、最後がこれだとちょっと悲しいかも…。

実際に、プレゼントとかで使う場合で、○○年の地図でアニメーションを止める、という必要がなければ、この.aviファイルを使うのもまぁ悪くはないかもしれない。

うーん、でもこれだとなぁ、かなり不納得…。次回でもうちょっとなんとかしよう。今回はこれにて。


(記事内の地価の地図は、国土交通省国土政策局「国土数値情報(地価公示データ)」をもとに、てくてくGISラボ たかはしが編集・加工)

posted by たかはし at 11:00| Comment(0) | ArcGIS

2017年06月14日

値が大きなフィーチャを最後に表示

もう6月かー。6月といえば、水無月。水無月といえば和菓子の水無月。お店によっては5月ぐらいから売っているので、厄払いにかこつけて何度も食べてしまう。梅雨は好きじゃないけど、水無月が食べられるのが嬉しいかな。

さて、まだまだ続く、地価のデータの表示だ。今回は同じレイヤ内のフィーチャの表示順序を変更する。具体的には、地価の値が高い点が地図上で最後に表示されるようにしてみようと思う。

ArcMapで数値分類を使ってデータを表示すると、デフォルトでは値が大きいクラスのフィーチャを先に表示し、その上に値が小さいフィーチャを重ねて表示する。地価のデータであれば、地価が高い点が最初に表示されて、低い点は最後に表示される。

この表示順序だと、値の高い点が低い点の下になってしまい見えにくい時がある。そんな時は、フィーチャの表示順序を変更する。

地価のデータのレイヤプロパティ>シンボルタブを開く。で、OKとかキャンセルボタンの上あたりに「高度な設定」というボタンがある。これをクリックして「シンボルレベル」を選択する。

i17052101.png
(図をクリックすると拡大します)

すると、「シンボルレベル」というウィンドウが開く。

i17052102.png

(上図のような表示ではなくて、ジョインとかマージとか書かれたウィンドウが開いたら、「高度な表示に切り替え」をクリックする。)

シンボルとかレイヤー名と書かれた表の一番右の列(- 1 -と書かれた列)の数値が、どうやら各クラスの表示順序を指定しているらしい。上の図の例だと、値が一番大きい赤い点を0番目(1番最初)に表示して、値が一番小さい濃い青の点は、4番目に表示する、という指定になっている。

この数値を変えるには、まずウィンドウの上の方にある「下記で指定したシンボルレベルでレイヤーを描画」というチェックボックスをクリックしてオンにする。

すると、一番右の列の数値を入力できるようになる。ここで、上から順に1、2、…5となるように変更しよう。(変更したい数値のあたりをクリックして半角で数字を入力すればよい。)以下のようになったら、OKをクリック、さらに、レイヤープロパティウィンドウでもOKをクリックする。

i17052103.png

すると以下のように地価のレイヤが表示される。

<シンボルレベル変更後>
i17052104.png

参考までに、デフォルトの表示順序での状態も挙げておく。

<シンボルレベル変更前>
i17052105.png

変更後の方が都心周辺にある、濃い青以外の点が少し見えやすくなっている気がするんだけど。

ちなみに、フィーチャ数が多いデータでシンボルレベルを使うと、表示がもったりと遅くなることがある。私が経験したのは、1万本ぐらいあるラインのレイヤを5クラスに分けて、今回同様、値が大きいラインを最後に表示するように設定した時だった。

地図の見栄えを試行錯誤している最中は、シンボルレベルを設定しない方が、表示が遅くてイライラしないで済むかもしれない。配色とかサイズとかがある程度決まったところで、試すといいかも。

今回はこれにて〜。

(記事内の地価の地図は、国土交通省国土政策局「国土数値情報(地価公示データ)」をもとに、てくてくGISラボ たかはしが編集・加工)
posted by たかはし at 11:00| Comment(0) | ArcGIS