てつふみはブログ

プログラミングなどの失敗記録

メモ

システムドライブを入れているHDDを交換する方法

Cドライブの入ったHDDやSSDを交換する方法メモ

 

システムイメージの作成方法

121ware.com > サービス&サポート > Q&A > Q&A番号 015953

 

古いシステムイメージは削除できないか?

Windows8.1のシステムイメージバックアップの削除について - マイクロソフト コミュニティ

 

ファイル履歴(管理)とはなんじゃらほい

Windows 8: ファイル履歴について

 

クローンするならこれ

ASCII.jp:Windowsを起動したままでOK! HDDからSSDに換装して爆速化 (1/2)|何倍も速度アップ! 最新周辺機器換装特集

点群データ処理に関するソフトまとめ【まだ、まとまっていない】

オープンソース or フリーウェア

 アイダホ州立大学のページ

  LiDAR Tools | Idaho LiDAR Consortium

 

 ポイントクラウドライブラリ

http://derivecv.tumblr.com/post/10198738207

 

 

○おまけ

アジア航測 >> 何か専用ビューアー

中日本航空 >> Mierrun

 

【メモ】エラーはどう返すべきか?

TODO管理するツールを作ったとする。

テキストボックスなどにやる事や締め切りを記述して保存ボタンを押すとデータベースに登録されるようなツール

保存するとき、入力内容のエラーチェックをすべきだと思うが、その結果はどのように返すべきか?

①エラーチェッククラスに結果を出力するプロパティを作成する。

private ErrorCheck ec = new ErrorCheck(textbox1.text);

if (ec.Result == "ERROR")

{

        label1.text="テキストボックス1の入力は不正です。";

        //もしくは label1.text = ec.Message

}

②エラーチェック関数でエラーなしであればスルー、あれば例外を発生させる。

try

{

        namespace.ErrorCheck.Check(textbox1.text);

}

catch ( textCheckErrorException )

{

        label1.text="テキストボックス1の入力は不正です。";

        //もしくは label1.text = textCheckErrorException .argv[1]

}

 

どちらのやり方がいいのだろうか?

見た感じは①の方がスマートに見える。

②の方は例外をキャッチするためにもっさりしているが、クラスが多層構造になっても耐えうるように見える。ただしテキストチェックとかのエラーをこういう風に返すのはあまり見ない気もする。

いまいち、この使い分け、例外の考え方が分からないなと思った。

Tkinterのwidgetから値を取得する方法

GUIツールを作る際、入力した値を取り込みたい場合がある。

そんな時どうすればいいか?

 

○entry widgetの場合

self.<entry>.get()

・・・引数なし。

 

○text widgetの場合

sel.<text>.get(<index_start>,<index_end>=None)

・・・どこからどこまで取得したいかを指定する。

 

※indexとは

・ドキュメント中のカーソル位置を指定する値

・行番号と左からの文字数を"."(ドット)で区切った値

・<行番号>.<文字数>

・”1.0”で1行目の1文字目左にカーソルがある状態

・”999.999”が999行目の1000文字目左にカーソルがある状態

 ・0行目がどういう位置づけなのかはよくわからない(指定しても特にエラーは起きない)

【arcpy】レイヤのデータソースを変更する


mappingモジュールを用い、レイヤオブジェクトのデータソースを変更しようとした。
データソースをSDEファイルのデータに変更しようとしたらエラーが出たのでメモ。

レイヤのデータソースを変更するには、LayerオブジェクトのreplaceDataSourceを用いる。

■使い方

ly.replaceDataSource([ワークスペースのパス],[ワークスペースの種類],[データセット名(省略可)],[ワークスペースパスが存在するか(省略可、デフォルトtrue)])

 

■ジオデータベースへ変更する場合

ly.replaceDataSource(gdbFilePath,u"FILEGDB_WORKSPACE",datasetName,True)

 これは成功した。ただし、実行時にジオデータベースのデータがないとエラーになる。 

ly.replaceDataSource(gdbFilePath,u"FILEGDB_WORKSPACE",datasetName,False)

 最後にFalseをつけると、実行時にジオデータベースのデータがなくてもエラーにならない。


■SDEファイルへ変更する場合

ly.replaceDataSource(sdeFilePath,u"SDE_WORKSPACE",datasetName,True)

これは成功。

私はデータソースを変更後にSDEへデータをコピーしたかったので、下記のコードを書いてみた。

 

ly.replaceDataSource(sdeFilePath,u"SDE_WORKSPACE",datasetName,False)

 

しかし、これではデータソースが変なパスになってしまった。
sdeFilePath\datasetNameとただくっつけただけのパス。

原因は分からず仕舞い。結局、データを先に用意する必要がありそう。
データを後に用意できて、かつデータソースをSDEへ変更できるような方策はないだろうか?

 

■おまけ:Layerオブジェクトの取り出し方

Layerオブジェクトの取り出し方は以下の通り。

mxd=arcpy.mapping.MapDocument(mxdPath)
ly=arcpy.mapping.ListLayers(mxd)[0]

MapDocumentオブジェクトを作り、ListLayer関数でLayerオブジェクトのリストを得る。

追記

 

※参考

ArcGIS ヘルプ 10.1

arcpy arcInfoのライセンス名


arcpy.CheckProductを実行した際、

arcpy.CheckProduct("arcInfo")

と旧名で指定するとエラーが返る。

arcpy.CheckProduct("arcAdvanced")

と新名で指定しないと通らない。

ちなみに、standord(arcEditor)、basic(arcview)は旧名で指定しないと通らない。

python 処理を中断する方法


○処理の一時中断

timeモジュールのsleep関数を用いる。

import time
time.sleep(100)

で処理が一時停止し、100秒後に再開される。


○処理の入力待ち

組み込み関数のraw_input関数を用いる。

raw_input("何か入力してください >>")

で、何か入力するまで処理が中断される。入力した値はraw_input関数の返り値となる。