【arcpy】断面図の書き方、とエラー
ArcGISのarcpyで断面線を作成するには stack_Profile()を使用する。
このジオプロツールを使用すれば、断面の標高と始点からの距離をテーブルに出すこともできるし、断面図を作成できる(※1)。必要なデータはDEMと断面線だけ。
もちろん、複数の線にも対応している。テーブルにはIDフィールドもあり、線ごとのIDが保存される。複数の断面図データをいっぺんに取ることも可能。
<<注意点>>
ただし、注意点が三つある。
1. 断面線がDEMの外から始まっている場合、出力テーブルの距離は始点ではなく、DEMに断面線が入ってきた所からの距離になる。
2. 入力データのDEMが複数にまたがる場合、統合(※2)した方がいい。複数のDEMにまたがる断面線があると、断面図データはDEMごとに作成される。そのため【注意点1】が原因で、距離の起点が複数存在することになる。よってめちゃくちゃなグラフとなる。
3. 出力テーブル名を"table"にすると、失敗する。どう失敗するのかというと、全部の断面図データを取得できなくなってしまう。まるまるゴソッと無いIDもあるし、一部のデータが抜けることもある。なぜかは分からない。
そこだけ注意して使わなきゃいけない。
※1 GUI上では断面図を作成できるけど、arcpyになるとうまくいっていない(研究中)。とりあえず、matplotlibを使用している。matplotlibは非常に優秀!!
ここら辺を参考にした↓
※2 統合にはジオプロツール “新規ラスタにモザイク” が使える。
arcpy.MosaicToNewRaster_management
【ArcPy】フォーカル統計がとっても便利(あと加重ファイルを使う時のエラーについて)
ArcGISのフォーカル統計を使えば、ラスタの近傍統計解析ができる。
近傍統計解析ができれば、周囲の平均をとったり、周囲の得点を集計して真ん中の得点にする、ってことが楽にできる。
特にこの関数(ツール)のよいところが、neighborhoodパラメータを指定すれば柔軟性の高い近傍統計解析ができること。
例えばNbrIrregularやNbrWeightでカーネルファイルを指定すれば、ガウシアンフィルタリングといった平滑処理が容易にできる。
それはもう自由自在。
※ガウシアンフィルタリングなどについてはこちら↓
(平滑化(移動平均、ガウシアン)フィルタ 画像処理ソリューション)
(http://www.riken.jp/brict/Yoshizawa/Lectures/Kyuusyu/Lectures2011_04.pdf)
ここで一つだけ注意事項。
neighborhoodパラメータにNbrWeightを指定する時、カーネルファイルのパスは、ユニコード文字列は使えない。
つまり、何らかの文字コードの文字列でなければいけない。
ユニコード文字列を指定していると、エラーが返ってくるので注意。
(試していないが、NbrIrregularでも同じか...?)
【Numpy】インデックスに浮動小数点が使える
実はnumpyのインデックス指定は、float型(浮動小数点)も使えました! ってお話。
自動で型変換してくれていました。。。
こんな時はエラーを返してほしいよね…。
まぁ、変数管理のできていなかった俺が悪いんだけど。
以下、詳細
numpyはインデックス指定でデータを取り出せる。
import numpy
array = numpy.arange(9).reshape([3,3])
print(array)
>> numpy.array([[0,1,2]
,[3,4,5]
,[6,7,8]])
print(array[1,2])
>> 5
こんな感じ。
リストでも
list = [0,1,2,3,4,5]
print(list[2])
>> 2
って機能が あるけど、それと同じような使い方ができる。
で、リストの場合、
list[2.3]
みたいにするとエラーが出る。インデックスにfloat型は指定できませんと。
でも、numpyの場合…
array[2.3] ・・・ (1)
array[2] ・・・ (2)
array[int(2.3)] ・・・ (3)
とすると、インデックスは自動で型変換がされる。つまり、(1)と(2)と(3)の結果は同じ!!!
小数点は切り捨てられる。
今回は、このために期待した結果が出ず、悩んでしまった・・・。
【Arcpy】ラスタのSpatial analysys演算エラー(メモ)
ラスタをSpatial analysysのツールを使って演算しようとすると、エラーになる。
エラー例)
・テーブルが見つかりません。と言われる。
・(python上で)import文の箇所で、"ASCII codec can't encode ...."と言われる。
などなど…
調べてみても、 原因がよく分からない・・・
≫いろいろこねくり回した結果
直接の原因ではないけど、ジオデータベースに格納されたラスタを入力データとしていたためと分かった。このラスタをTIFFに変換して、入力データとした。そうしたところ、処理が正常に回るようになった。
≫原因
三つ考えられる。
・ジオデータベースのラスタ作成時に何かしらの失敗をした
・ラスタを作成する際に必要なプロパティ(か何かの設定)がなかった
・ジオデータベースのラスタは対応していない(これは考えにくいが)
ひとまずの解決を見るまで、かなり時間がかかってしまった。。。
【登山】磐梯山
先日、磐梯山に行ってきた。
素晴らしい山だった。
何が良かったのか?
荒々しい磐梯山、赤く染まる磐梯山、浅葱色の絨毯、深い森が見れたからだと思う。
一つのルートでここまで景色が変わるところは、そうはない。
もし自分の百名山を決めるなら、ここは必ずランクインするだろう。
自己顕示したいが、秘密にしておきたい気もするので、ここに書く。
○ルート
裏磐梯スキー場>>土石流跡>>櫛ヶ峰と磐梯山のコル>>山頂>>中ノ湯>>銅沼(あかぬま)>>裏磐梯スキー場
○危険地
土石流跡のあたりが迷いやすい。印はついているので大丈夫だけど。
土石流後の急斜面は、登る分には危険ではない。下っても危なくはないが大変。時間はかかる。
○記録
朝(というか昼)の磐梯山 猪苗代湖より。雲がかぶっているが、中山峠抜けて見えたこの景色にハイテンション
最初の森 昔山体崩壊が起きたらしい。その後回復した森か?木が細い
開けてくると、ロックガーデンのような景観。そして、シラタマ祭。歩いているだけでシップ臭がする。
これで酒作れば、自家製アイラできないかなぁ。あるいは自家製ルートビアとか。そういうの好き。
土石流の掃流跡? 人の手を加えたように真っ直ぐで、きれいにえぐれている。
土石流跡。 迷いやすい。
土石流跡が終わると、こんな森の急斜面。 ほんと辛い。首が痛くなるほど見上げる位置に人がいたのは久しぶりだ。
振り返れば桧原湖。 今まさに歩いているところが崩壊し、流れ流れてあそこまで到達した。崩壊土砂が桧原湖をつくり、桧原村が埋まった。
お隣の山、櫛ヶ峰。南八甲田にも櫛ヶ峰があるが、どんな由来なのか?
砂礫地の花
急傾斜を抜ければ、そこは浅葱色の絨毯。風が吹き抜ける。
画像じゃよくわからないな…。
崖錐?のカーブは美しい。 習字の右払いと同じ。
山頂直下の紅葉。ちょっと早いか!?
山頂の三角点。わざわざ復活させた模様。
降りてきて、振り返れば磐梯山
中ノ湯側の森林はブナ林(?)時々大きな木もあった(気がする)
銅沼と書いて、"あかぬま"と読む。
赤って、それ鉄じゃね? 銅は緑じゃなかったか
【arcpy】saモジュールのConメソッドでの、NumPyの使用はダメ
背景>>
先日、こんなようなコードを書いた。
import, numpy,arcpy
np = numpy.arange(9).reshape([3,3])
raster2 = arcpy.sa.Con(raster1 > 10, np[2,2], float(u"NaN"))
するとRuntimeだかジオプロセシングエラー999999だかが出て、原因不明で落ちる。
原因>>
Conメソッドの式中に、NumPyを書いたのが原因だった。
二次元配列にするとすんなり実行可能に…。
どうやらConメソッド内ではNumPyに対応していない模様(考えてみれば当然だな)
調べてはいないけど、おそらく他のメソッド(あるいは他のモジュール?)でも対応していないと思われる。
そんなに必要な機能ではなかったから、最初から直書きでやればよかったと後悔…
NumPy覚えたてだからなんか使ってみたくなったんだな、きっと。