備忘録
1.普通のGISデータを作る→一つの地名に対する情報が1行に入っている。年次のデータ(例えば各年次の人口)が列に入っている。この時列名に年次など時間を表す情報が入っているとよい
属性を結合している場合は、レイヤーをエクスポートしておく。(なんとなく)
2.データを転置する
ArcToolBox > データ管理ツール > フィールド > フィールドの転置
入力テーブル:1.でエクスポートしたフィーチャ―レイヤ
転置するフィールド:年次のデータが入った列
転置されたフィールド:転置するフィールド名を入れる出力データ中のフィールド名
例えば「年次」とか「時間」とか
値フィールド:転置するフィールドに入っている数値を入れる出力データ中のフィールド名
例えば「人口」とか
属性フィールド:時系列アニメーションをやりたい場合は、絶対に「Shape」フィールドをオンにする。忘れると単にテーブルが出力される。(トリッキー)
出力したいフィールドにチェックしておく。例えば地名とか。
3.出力されるフィーチャでは、なぜか人口などの数値フィールドが文字列になる。ので、数値フィールドを追加して、人口なら人口のデータをフィールド演算でコピーする
4.出力されたフィーチャをシンボル表示しておく。たとえば人口密度で等級色で表示する
5.レイヤープロパティの「時間」タブで「このレイヤーで時間を有効にする」をクリックしオンにする
時間の入ったフィールドを指定する。例えば「年次」とか。
時間の入ったフィールドの形式を指定する。レイヤーの時間範囲は「計算」をクリックする。そうすると時間ステップの間隔が自動的に変更されるので、適宜変更する。
6.ツールバーのタイムスライダーバーをオンにする(右から2番目、ウインドウに時計マークのアイコン)
7.タイムスライダーバーの再生マークをクリックすると時系列アニメーションが始まる。
8.表示される時間の間隔などなどを変更したいときは、タイムスライダーバーの左から2番目のプロパティで変更する。
以上、めもめも。
2025年04月06日
時系列データのメモ
posted by たかはし at 10:09| Comment(0)
| ArcGIS
2017年07月05日
ラベルに桁区切りを表示
この時期になると、サンディエゴでESRIのユーザ会が開かれる。サンディエゴはメキシコとの国境に近く、市の中心部から路面電車で国境付近まで行って、そこから歩いてメキシコに行くことができる。
ユーザ会のついでに一度だけ、メキシコまで足を延ばしたことがある。
メキシコとアメリカとの境は、それはもうはっきりとわかる。アメリカ側は建物が閑散と建っているのに対して、メキシコ側はぎっしりと建っているからだ。人が決めた境界がこんなにも住む人の生活の境界になってしまうんだ、国境が陸上にあるとその境目はこんなにもはっきりとしてしまうんだと、とても印象深かった。
さてさて、本題。こっちはやっと時系列アニメーションから離れようと思う。でも地価のデータは使う。
何回か前の記事で、凡例を桁区切りで表示する方法を説明したけど、今回はラベルに桁区切りを表示する方法を確認しておく。
ラベルの制御なので、地価のレイヤーからレイヤプロパティを開いて、「ラベル」タブを開く。で、ウインドウ真ん中へんにある、ラベルフィールドの部分で、地価の入ったフィールド名を指定する。以下の例では「LandPriceNum」というフィールドの値をラベリングする設定になっている。

(図をクリックすると拡大します)
で、その横にある「条件式」というボタンをクリックする。そうすると「ラベル条件式」というウインドウが開く。ここで、形式から「Python」を選んで、「高度な設定」をクリックする。

「高度な設定」をオンにすると、条件式のあたりが以下のようにちょっと変化する。

そうしたら、条件式を入力するところに以下のように入力する。
1行目は、「高度な設定」をオンにした直後と同じ文なのでそのまま流用して、2行目だけ書き換えてもよい。
で、念のため、「確認」ボタンをクリックしてみよう。以下のように、サンプルテキストが3桁で区切られて表示されたらOKだ。

条件式の確認ウィンドウで「OK」ボタンを、さらに、ラベル条件式ウィンドウで「OK」ボタンを、そしてレイヤプロパティウィンドウでも「OK」をクリックする。
そうすると、ラベルが桁区切りとともに、以下のように表示される。

(上の図では、ラベルのフォントを游ゴシック、11ptで表示している。)
こちらも数字がずらーっと並ぶよりは、まだ数値がわかりやすいと思う。
まま、今回はこれにてー。
(記事内の地価の地図は、国土交通省国土政策局「国土数値情報(地価公示データ)」をもとに、てくてくGISラボ たかはしが編集・加工)
ユーザ会のついでに一度だけ、メキシコまで足を延ばしたことがある。
メキシコとアメリカとの境は、それはもうはっきりとわかる。アメリカ側は建物が閑散と建っているのに対して、メキシコ側はぎっしりと建っているからだ。人が決めた境界がこんなにも住む人の生活の境界になってしまうんだ、国境が陸上にあるとその境目はこんなにもはっきりとしてしまうんだと、とても印象深かった。
さてさて、本題。こっちはやっと時系列アニメーションから離れようと思う。でも地価のデータは使う。
何回か前の記事で、凡例を桁区切りで表示する方法を説明したけど、今回はラベルに桁区切りを表示する方法を確認しておく。
ラベルの制御なので、地価のレイヤーからレイヤプロパティを開いて、「ラベル」タブを開く。で、ウインドウ真ん中へんにある、ラベルフィールドの部分で、地価の入ったフィールド名を指定する。以下の例では「LandPriceNum」というフィールドの値をラベリングする設定になっている。

(図をクリックすると拡大します)
で、その横にある「条件式」というボタンをクリックする。そうすると「ラベル条件式」というウインドウが開く。ここで、形式から「Python」を選んで、「高度な設定」をクリックする。

「高度な設定」をオンにすると、条件式のあたりが以下のようにちょっと変化する。

そうしたら、条件式を入力するところに以下のように入力する。
def FindLabel ([LandPriceNum]):
return "{:,}".format(long([LandPriceNum]))
1行目は、「高度な設定」をオンにした直後と同じ文なのでそのまま流用して、2行目だけ書き換えてもよい。
で、念のため、「確認」ボタンをクリックしてみよう。以下のように、サンプルテキストが3桁で区切られて表示されたらOKだ。

条件式の確認ウィンドウで「OK」ボタンを、さらに、ラベル条件式ウィンドウで「OK」ボタンを、そしてレイヤプロパティウィンドウでも「OK」をクリックする。
そうすると、ラベルが桁区切りとともに、以下のように表示される。

(上の図では、ラベルのフォントを游ゴシック、11ptで表示している。)
こちらも数字がずらーっと並ぶよりは、まだ数値がわかりやすいと思う。
まま、今回はこれにてー。
(記事内の地価の地図は、国土交通省国土政策局「国土数値情報(地価公示データ)」をもとに、てくてくGISラボ たかはしが編集・加工)
posted by たかはし at 11:00| Comment(0)
| ArcGIS
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でコードを保存する場合))
これを実行すると、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を実行してみた。
ではでは〜。
でも、地価の値に興味がある人なら、ある時点でアニメーションを止めたくなると思う。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