ArcObjects関連Tips


意外と重要なことはHelpに記載してあるが色々ある
VerUpで新しい記載がある場合もあるのでたまにはHelpを見ようという話。

とりあえず、抜粋してみる

Geodatabaseでよくある失敗の対策
http://resources.esri.com/help/9.3/ArcGISEngine/dotnet/09bd8059-f031-4b88-bac8-3b4b73dccb05.htm

・リサイクルの挙動を理解する
・FindFieldをループ内で呼び出す
・GetFeatureを連続的に呼ぶよりGetFeaturesを使う
・Comスコープに注意する

ArcObjectsを使う上での最良な手法
http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Best_practices_for_using_ArcObjects_in_NET/000100000mtr000000/

・COM参照の解放
・シングルトンの扱い (Activator経由でない場合、タイミングによってはインスタンス生成に失敗する)

編集操作
http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Editing_with_the_geodatabase_API/00010000010s000000/

ArcSDE (DBMS)を対象とする編集はIMultiuserWorkspaceEdit::StartMultiuserEditingが使用されるべき
ちなみに、IWorkspaceEditで編集開始した場合は、NonVersionでもA/Dテーブルにステートのゴミが残る。
また、編集オペレーションのUndo/RedoはArcGISの世界ではDBMSまで貫通している (都合無限[DBMSまかせ]のRedo/Undo)
つまり、NonVersionはコミットないしロールバック以外標準の手段なし

ファイルベースでは、EditSessionを張らない編集の方が速い
⇒ ロールバック不能な編集があり得ない場合ほぼ使えないがテンポラリのファイル作成等のみでは覚えていても良いかも
恐らくこの記述から、FileGeodatabaseやShapefileでもテンポラリテーブルが存在することが読み取れる。

ちなみにバージョニングで編集関連は色々あるので覚悟が必要かもしれない。
要件次第ではUndo/Redoは自分でやって回数制限した方がましかも

空間検索
http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Executing_spatial_queries/000100000240000000/

ISpatialFilter.GeometryField は指定すべき
可能であればSubFiledsやAddFieldで使用するカラムのみ指定すべき

複数ジオメトリでの検索時は、テンポラリの空間インデックス付与をすべき
ISpatialIndex

カテゴリー: 開発 タグ: パーマリンク