てくてくダイアリー

GISとか使ってました

ArcToolboxのフォアグランド処理から復帰できない

2013-12-19 | ArcGIS

ArcToolboxで処理をするとき、デフォルトだとバックグランド処理がオンになっている。この状態だとArcMapなどの下のステータスバーに、「今このツール実行中…」的なメッセージが出て、処理が終わると、ポップアップメッセージのようなものが表示される。ArcToolboxの処理中もArcMapなりが操作できるので、便利といえば便利である。

ただ、ArcToolboxでエラーが出た場合は、エラーメッセージを確認するのにいちいち処理内容のログを開いてあげないといけないのが面倒っちい。そう思って、バックグランド処理をオフにし、ArcToolboxで処理実行中はArcGIS上の他の作業ができない状態で使っていた。

昨日もArcToolboxを使って(いまどき)e00ファイルをカバレッジに変換するという処理をしていた。e00ファイルを置いたフォルダのパスに日本語が入っていて、Pythonの文字コード関連のエラーが出るという悲しい事態に合いながらもなんとか変換が終わり、ArcToolboxが出した処理終了のメッセージの「閉じる」ボタンをクリックした。

いつも通り、メッセージのウインドウは閉じるんだけど、その後ArcMapで属性テーブルを開こうとしても、レイヤ表示のオンオフをしようとしても、ArcMapのウインドウのどこをクリックしても「ピーン」「ピーン」というエラー音がして、操作することができない。うう、どうやらArcToolboxからArcMapに制御が戻ってきていないらしいのだ。

いまどきカバレッジの処理なんかしたから、こんな変なエラーが出るのかなぁ。仕方なくタスクマネージャを起動して、ArcMapのプロセスをkillした。

今度はArcCatalogで同じ処理をすると、今度はちゃんとArcCatalogに制御が戻る。なぜた…。

その後ArcMapからArcToolboxを起動して、別の処理を実行しても、さっきと同じように制御が戻ってこない。

今使っているPCは元々別の人が使っていたものなのだが、その人はずっとArcToolboxをバックグランド処理のまま使っていたので、このようなエラーはなかったとのこと。

いや、でもその後フォアグランド処理にしてからもArcToolbox使って、特にエラーもなくできたと思うんだけどなぁ。最近あてたWindows Updateとかとの兼ね合いなんだろうか。一応、IE11にはあげずに使ってるんだけどなぁ。

と、悩みは尽きないのだが、とりあえずバックグランド処理を有効に戻そう。うむうむ。


GISのよいところ

2013-12-02 | ArcGIS

初めてGISを使う人向けに講習会などを開く場合、最初にまずGISを使うと何が便利なのか、そのメリットをお話しする。だってGISの定義から入ると(説明が)難しいんだもん。

これまで定番でお話をしてきたのは、以下の4つだった。

1.人間がやるより早く位置情報が検索できる。

例えば、日本地図から東京駅がどこにあるかを素早く検索できる。

2.距離とか面積とか(といった位置に関係する数値)が人間より早く測れる。

例えば、東京駅から新宿駅の直線距離は?とか、千代田区の面積は?というような数値を、人間が地図を使って計算するより早く取得できる。

3.複数の地図を重ね合わせることができる。

例えば、警察の持ってる(かもしれない)挙動不審者目撃地点マップと学校の持ってる(かもしれない)児童の家の位置とか通学路の地図を重ね合わせることができる。で、どこを重点的に警戒すべきかを判断することができる。

紙地図でこれをやろうとすると、地図を重ね合わせて透かして見る、とかまぁ方法はあるのだが、やっぱり2枚とか3枚の地図が限界ではないだろうか。ついでに別々の組織が持っている情報を、地図を使って一元化することができる(で、新しい発見があることもある)、というような説明を付け加えておく。

4.1~3の複合技ができる。

例えば、1.の機能で賃貸物件の地図から家賃10万円以下の物件の地図を作る。2.の機能で大学から400m、コンビニから500mの地図を作る。3.の機能で、1.と2.の地図を重ね合わせて条件に合う物件を検索する、ということができる。

で、数年前からは、これらに加えて、ネット上で地図掲示板のようなものを使って、複数人と位置をキーにして情報が共有できる、というのを5番目に挙げていた。

例えば、ポストをひたすらマッピング(http://postmap.org/map)みたいなサイトを紹介して、身近のポスト情報を共有している例などを説明したりする。

とまぁ、そんな説明をしていたのだが、最近もう一つ、思いつくところがあった。情報の全部見せに近い、ができるところである。

今作業しているインドのデータは、対象の地域にだいたい2000ぐらいの町や村がある。で、そこに村ごとの人口やら面積やらのデータがあるのだが、これを数値で説明しようとすると、平均値とか中央値とか、最大値とか最小値とかを使うことになる。2000の村の情報が1つの数値で代表されるわけだから、すっきりわかりやすいし、他の地域との比較も簡単である。

でも、2000の中の値のばらつきはわからない。分散とかを示してもいいけど、例えばヒストグラムなんかを書くと、今度はばらつきがわかるようになってくる。

ここで、地図で、例えば村ごとの人口密度を示せば、村の点をすごーく小さく表示すれば、まぁ全体の分布が見えてくる。村の密度が高いところだと、点が重なりそうになってしまうけど、まぁどの村の情報もすべて地図にできているので、情報の全部見せだよなー、こういうのは平均値とかとは違うよなーと思うのである。

2000村の人口密度の数値を全部見ても、なにかぱっとわかることは少ないと思うのだが、地図になってるとどこに密度の高い村がかたまっているとか、同じ配色で作った別の地域の地図があれば、その色合いでもってどっちの方が密度が高いとか低いとか、そんな話もできる場合もあると思う。

しかし、実は地図にするときに人口密度が高い、低いでもって村をクラス分けしてあげて配色して地図にしているので、数値そのものを地図にできているわけではない。だから、全部見せ、とは言い切れなくて、全部見せに近い、ができているのだと思う。

すごいじゃんGIS。

まぁ、全部見せに近い、をしている分、情報の代表性にはちと欠けてしまうという問題点はあるにせよ。

そして、すべては必要な地図データがコンピュータに入っていることが前提の「よいところ」なのではあるが。


現象が再現できた

2013-10-22 | ArcGIS

GISの質問にもいろいろ種類があったりするのだが、困るのは再現性が必ずしもない、バグのようなものに絡む質問だ。

先日もエクセルのファイルをArcGISで読み込もうとすると「レコードがない」とかなんとかいうエラーが出る、という質問が先生からあった。

しかし私が同じOS、同じArcGISのバージョンで使っていてもそのようなエラーは出ない。エクセルのファイルはどれを読み込もうとしてもだめらしく、先生のほうでは困り果てているとのことだった。

エラーメッセージをぐぐってみると他にも同じような現象は発生しているらしいことはわかった。しかし必ずこれをやると解決する、というものは出ていない。

それでもどうにかしないといけないので、いくつかある解決策の中でも手っ取り早そうな、.xls形式で保存する、という方法を試してもらったら、うまく読み込むことができたという。よかったよかった。

それから少しして、今度は出先にいるときに別の先生から問い合わせが入った。エクセルにあるデータとシェープファイルを組み合わせて(私が)至急データ処理をすることになり、ノートPCで作業を開始した。ほんとに至急の話だったので、若干あせりつつ作業をしていたのだが、そこで「レコードがない」とかなんとかいうエラーが発生。

わーい、先生と同じエラーが出た出たー。これで検証できる!!!

いやっ、今急いでるし、喜んでる場合じゃないから、と自分で突っ込みを入れつつもやっぱり嬉しくなってしまう。

現象が再現できると一歩前進したような気がして、喜んでしまうのは、なんかのサガだろうか。

その後、その現象はまだ根本的な解決策を試せていない。これじゃ、いかんいかん。


DEMから谷線

2013-06-11 | ArcGIS

SRTM(スペースシャトルの取得した標高データ)から、谷線を計算する処理をやっているのだが、何度やっても同じ間違いをくりかえすので、自分用にメモ。

1.SRTMのデータをダウンロードする。

http://www2.jpl.nasa.gov/srtm/

この中の「SRTM V2 released」という項目の中にダウンロードサイトへのリンクがある。今回は扱いが簡単なSRTM30のデータをダウンロード。

2.~.DEMファイルの拡張子をBILにする

3.ArcGISに読み込む

4.投影法を変換する。

元々はWGS84系なので、UTMなんかにする。インドのコロマンデル海岸あたりだと、44系のことが多い。

5.クリップする

ダウンロードしたままだとデータがやけに大きいので(インドだとインド亜大陸全体が入る)、谷線の分析に影響がない範囲でクリップする。今回は、緯度で言うと18度ぐらい以南でクリップをかける。

ついでに、海が入っていると谷線を計算するときにいまいちな結果になることもあるので、海岸線でクリップをする。

4.と5.は順番が入れ替わっても大丈夫。

6.とんでもなく大きな値がある場合はSetNullしておく

標高が6万メートルを超えるようなところは、ArcToolbox>Spatial Analyst>マップ代数演算>ラスタ演算でSetNullしておく。

SetNullではTrueのところにNULLを入れる。例えば、こんな感じ。

SetNull("InDem"> 60000, "InDem")

標高が60000より大きいところはNULLが入って、それ以外のところ(条件式がFalseのところ=60000より小さいところ)に元の標高DEMの値が入る。

7.ArcToolboxのSpatial Analyst>水文解析のツールを使って、谷線を計算する。

Fill、FlowDirection、FlowAccumulationの順で実行。

いつも、投影法を変換するのを忘れて、最後まで処理してしまう。データが大きいだけに、やり直すショックがちょっと大きいのだ。モデルにしておいても、なんだか落ちることが多いし(涙)。


Win7のXPモードでのArcGIS10のライセンス借用はknown limit

2012-09-13 | ArcGIS

なんだか、主語の長いタイトルだけど、言いたいことはそのまんま。

「Windows7上で動作するXPモードにArcGIS10をインストールした場合、ライセンスを借用すると動かないのは仕様。」

うう、悲しい。ArcGIS9.3.1だと動くみたいなので、ArcGIS10の仕様ということか。借用しなければXPモードでも動くんだけれどなぁ。

ちなみに関連する記事はこちら。

Cannot acquire license when connected via Remote Desktop
http://forums.arcgis.com/threads/15241-cannot-acquire-license-when-connected-via-remote-desktop

ここの上から2つめの回答(ESRIの人だと思う)で、これはknown limitですよ、と書かれている。最初の質問の中では9.3.1だとこのエラーは発生しない、と書かれているのが、先ほど書いた「9.3.1なら動くみたい」の根拠である。

ついでに、ESRIJの方からも情報がでている。

Windows Terminal Server(WTS)および Citrix XenApp のサポートについて
http://www.esrij.com/products/arcgis/environment_topics/citrix.html

(ただしここには明白に、ライセンス借用は動かない、とは書いていない。単独使用ライセンスが動かない、との記述はある)

XPモードというの自体、この月曜日ぐらいに知った言葉でまったく詳しくないのだが、XPモードはリモートデスクトッププロトコルを利用するらしい。で、これらの記事が関連すると想像したのである。どちらも、古い記事なので、もう少し新しい情報はないものか、とも思うわけだが、とりあえず見つけられていない。

しかし、原因というか、known limitであるとわかったところで、動かないことに変わりはないんだよなぁ(涙)。

そもそも、Win7でArcGISが起動してくれないのが問題なわけで、ここで動いてくれればXPモードに逃げる必要もなかったわけなんだけど。

元々の問題であるWin7でArcMapが落ちるというのも、(ほぼ)何も言わずに落ちてくれるのという困った現象で。とある会社のUltrabookにArcGISをインストールし、ArcMapを起動しようとしても、ドキュメントを読み込むあたりで、なぜかふっと落ちるのだ。ArcMapは動作を停止しました、とかいうメッセージとともに。

しかしそれ以外、うんともすんとも言ってくれない。ArcCatalogでも同様の現象が起こる。一応、ESRIのサイトなど検索してみたが、回避策にはたどり着くことができず、XPモードインストールに流れてみたのだ。

同じUltrabook上で、Win7だとArcMapが落ちるけど(起動しないけど)、XPモードだライセンス借用さえしなければ起動するというのも、不思議の1つである。ちなみに、この会社のUltrabookでこの現象を目にするのは、これで2台目だ。Ultrabookは使う人から未来らしいが、なかなか未来にいけない。

なお悪いことに、このUltrabookは私のではなく、他の人のなのだ。自分のPCなら好きに検証しちゃうんだけどなぁ。

ふっ。なんか、無力。


SRTM3のデータ

2012-09-12 | ArcGIS

SRTM3のデータ(.hgt)って、ArcGISでそのまま読めるんですねー。

QuickStartというSRTM3のドキュメントを読んだら、signed two byte integersなんて書いてあったんで、これはArcGISじゃよめなそうと思ってしまい、勝手にブルーになってましたよ。

ちなみにSRTM3のデータはだいたい90mとか100mメッシュぐらいで、WGS84、高さはメートルらしい(メモメモ)。

隣のデータとの境が1ピクセル分だけ重なるようにできているらしい。そういうわけで、1201×1201セルという何とも中途半端なようなぴったしのようなセル数である。いくつかの標高データを1つにまとめるときにはちょっと注意が必要か?

いやぁ、書いておかないと確実に忘れる自信があったもので。


ともかく読み込む

2012-08-22 | ArcGIS

地図の画像を取り扱っていると、とんでもなく容量やサイズが大きいものに出会ったりする。

こういう大きい地図画像になってしまうのは、地図自体が、A2とかA1とかという大きいサイズという理由が一つ。

あと、紙地図の代替として保存し続けることを考えてスキャンされているので、解像度が高めであるということもある。ついでに地図に何が描かれているかわからなくなっては困るので、非圧縮のTIFだったりすることが多い。

先日手に入れた地図の画像も非圧縮TIF、400DPI、だいたい15000ピクセル四方の画像だった。もちろんカラー画像だ。ともかく重い。容量を確認すると1ギガ近くある。

まずWindowsのフォトギャラリーとかだと、10000ピクセルを超えるあたりから、読み込めなくなってくる。画像が壊れてます、とか言われてしまうのだ。 それで普段使っているIrfanViewを使ってみたが、さすがに1ギガ近くある画像だと、メモリに画像が割り当てできません、という趣旨のメッセージが返ってくる。そりゃそうだよなぁ。エディットできる状態で表示するんだろうし。

さて、困った。何を使えばこの画像を表示できるんだろう。なんとなくPCを再起動して、メモリを使い放題の状態にしてみる。その後、画像をエディットするソフトをいくつか試したが、うまく開かない。PCのメモリ自体はまだ半分ぐらいしか使ってないんだけどな。

そこで、思いついた。こういうときにはArcGIS結構いいんじゃない?いつもは画像を読み込むと、ちりちりと上から表示してくれて、遅い~とうなることも多いが、その実直さ?がこういうときにはいい気がする。

で、ArcMapにこの画像を追加したら、少し時間はかかるものの、きちんと描画してくれた。拡大しても大丈夫。う~ん、きれいで鮮明な地図画像だ。うつくしー。

しかし、このまんまじゃちょっと扱いにくいので、(データ>エクスポートで)さくっとJPGに変換し、通常の作業にはJPGを使うことにする。

ArcGISでの画像の取り扱いは前時代的な処理なのかもしれないけど、このともかく読みこむっていう姿勢も、たまには悪くないもんである。


フォルダ名にえんえん

2012-07-26 | ArcGIS

今日はArcGISでプログラムする人なら、誰でも知っているであろうお話。

昨日ふとArcGISで特定のフォルダにあるシェープファイル名をリストしたくなった。というか、する必要があった。

普段ならDOS窓開いて、*.shpと打つのだが、後々の処理を考えて、ここはひとつArcGISの中でPythonを使ってリストしてみようと思った。

ヘルプによれば、ListFeatureClasses()を使えば、シェープファイルのリストができそうである。ArcGISのヘルプにはサンプルのコードも載っているので、それをテキストエディタにコピペして、作業するフォルダだけを変更し、Pythonを動かしてみた。なんだ、Python、けっこうちょちょいのぱー?

ところが、エラーメッセージこそでないものの、シェープファイル名がリストアップされてこない。なぜに?全然ちょちょいのぱーとはいかない。

自慢じゃないが、Pythonのコードなんて私はほとんど書かない。それなのに、たまにプログラミングをしてみると、たいていちゃんと動かない。たまにやるんだから、もっとこう友好的に初心者に優しく動いてくれてもいいのに。なぜ動かないんだろう。

そうか、たまにやるからか。きっとプログラミングは一見さんお断りなのだ。

しかし、いじけていても仕方がない。気を取り直して、別のマシンで同様の操作をして実行してみた。

するとシェープファイル名がリストされてくる。それこそなぜに?余計に疑問が深まる。このマシンは一見さんOKなのか?

よく、ArcMapでレイヤのコピペすると、データソースのパスがうまく認識できないのと同じ現象だろうか。いやいや、フルパスでフォルダを設定しているのに、それはないだろう。

何回かいろんなフォルダのシェープファイルをリストを試みていくと、リストできるときとできないときがある。ということは、やっぱりフォルダの問題なのだろう。

んじゃあということで、arcpy.env.workspaceで設定したワークスペースを、ListEnvironments()でworkspaceに何が設定されているかを確認する。そうしたら、フォルダ名の一部がしかくく文字化けしているではないか。

この文字化けしているのは、findataという名前のフォルダだった。フォルダの区切り文字である¥マークとfの組み合わせで特殊な文字として認識されてしまうらしい。

果たして、Pythonのドキュメントを見てみると、\fとか\aとか\bとかには特別な意味があるらしい。\tだとタブ、\nだと改行を示すのと同じような感じだろうか。

とすると、フォルダ名がfとかaとかbとかで始まらない方がいいということになる。いや、しかし、それじゃあ、あんまりにもArcGISというかPythonが使いにくすぎる。で、よくよく、Pythonのドキュメントを見ると、¥マークを二つ並べるとバックスラッシュになることが判明。

これからは、Pythonでフォルダ名を設定するときは、C:\\home\\data\\findataというように、全部\\で区切ることにする。まったくえんえん。


ダブルアジャスト

2012-07-12 | ArcGIS

今使っているインドの地図は、座標系が設定されていないもの、あるいは設定されていても間違っているもの(涙)が多い。形状を入力してくれただけでも、ありがたいんだけど、それを正しい位置に置くのもそれなりの作業量となる。

座標系が間違っている場合は、正しい座標系を設定し、それをWGS84に変換し、既存の地図と重ねてみたりする。いや、旧日本測地系をWGS84に変換するなら楽だけど、Everest 1830だか、1956だか、1962だかをWGS84にするには、その変換式とパラメターから探さねばならない。

作業の道のりが長すぎて笑っちゃうって、最近多いなぁ。

で、座標系の設定間違いみたいな、ある意味系統的に間違っているものは、まだ直す意欲がわく。でも、形状自体ゆがんでるんですね、というような地図だったり、どんな座標系で示そうが位置が間違っているんですね、というような場合には、奥の手で地図の形状を編集することになる。具体的には、地図をえいやっと拡大、縮小、移動をしたり、アジャストをかけたりするのだ。

先日も、必要にかられ、誰が入力したんだがわからないデータのアジャスト作業をしていた。1つは行政界が入っていて、その他には道路とか、水域とかのデータが入力されている。

Googlemapの示すインド国内の位置がどこまで正しいのか、これも検証のしようがないのだが、これしか頼りようがないので、ともかくGooglemapから地図とか衛星画像を持ってきて、それをジオリファレンスしアジャストのリンクを作成する際の参考とする。

アジャストの基準にする行政界の地図は2通りの表示で示したかったので、同じシェープファイルを2つのレイヤとして読み込んで(2回読み込んで)、作業を行う。

で、アジャストをするとなぜかうまくデータがゆがんでくれない。この行政界の角は、衛星画像のここと一致するっていうリンクを作ったのに、設定したよりも下に移動してしまう。アジャストの方法がアフィンじゃだめかと思い、ラバーシートにしてもうまくいかない。

んんんん~、いつもながら、GIS使いながらうなってしまう。なんかのバグ?

ところが、一緒にアジャストした他のデータ(道路とか水域とか)を見てみると、うまくアジャストできているっぽい。なぜ行政界だけずれる???

そこでよぉーくよぉーく考えてみると、アジャストの対象レイヤの選択のところで、1つのシェープファイルから読み込んだ2つのレイヤをどちらも対象としていたことに気がついた。

同じシェープファイルを2回読み込んで、別のレイヤになっていると、そのシェープファイルに2回アジャストが実行されるらしきことが判明した。ふふふ。

そうかそうか。アジャストの処理はレイヤを対象に行われるのであって、データに対して行われる訳ではないんだなぁ…。こりゃうっかりだったなぁ…。バグってたのは自分だったなぁ…(フェードアウト)。

 


比例シンボルのサイズ

2012-06-21 | ArcGIS

違うレイヤ間で比例シンボルのサイズを統一したい!ということはないだろうか。例えば国勢調査のデータで、5歳未満人口の比例シンボルの地図と、5歳から10歳までの人口の比例シンボルの地図で、双方の地図で1cmの円の示す人口が同じになるようにしたい、というような場合だ。

そんなときに役立ちそうなのが、以下の記事だ。

How ArcMap calculates proportional symbol sizes
http://forums.esri.com/Thread.asp?c=93&f=1730&t=213906

英語だし、数式だし、うげげって思うかもしれないんだけど、肝心なのはFor example以下のところだ。

レイヤAのシンボルの最小値が2(ポイント)で表示されていて、その属性値の最小値が10だったとする。このレイヤAの比例シンボル表示と同じ大きさで属性値の最小値が20のレイヤBを表示したいときは、レイヤBの比例シンボルの最小値はいくつに設定すればいいか、という式である。

答えはレイヤBの最小値20をレイヤAの最小値10で割った値(つまり2)の平方根(つまり1.414ぐらい)に2(ポイント)をかければよいらしい(結果は記事にあるとおり2.83)。

最近比例シンボルの地図をたくさん作っているところだったので、ちょっと嬉しい記事発見だった。

ちなみに、この記事の末尾にある参考文献のTanimura Sさんは、保健医療関係のGISの第一人者であらせられる谷村先生だ(と思う)。こういう記事の中でさらりと文章が引用されてるなんて、世の中にひろーくひろーく役立っている感じがしてかっこいなーと思うのであった。

あ、あとこの記事で引用されている論文の現在のURLは以下の通り。

Proportional Symbol Mapping in R
http://www.jstatsoft.org/v15/i05/paper