ArcMapはフィーチャデータを含むすべてのレイヤーのキャッシュを保持しているようで、レイヤーを更新したり変更を適用したりするたびに、このキャッシュを使用します。私が見つけたように、ArcMapが最初からレイヤーを描画する場合、このクエリをジオデータベースに送信します。
"featureClassName"からObjectId、Shapeを選択します[ここで "レイヤー定義クエリ式"]
編集モードでスナップを使用する場合、このキャッシュ内のフィーチャデータは、マウスの移動中のスナップ状態を決定するために使用されるようです。ArcMapが空間データをこのキャッシュ、ESRIシェイプ形式、またはWKBとしてどのように格納するのかわかりませんが、これらのフィーチャデータを取得する必要があります。
IFeatureClass::get_Feature
メソッドを使用する代わりに、そのキャッシュ(レイヤーキャッシュ)を使用してレイヤーのフィーチャデータを取得する方法はありますか?.....たぶん私の考えは正しくなく、レイヤーにキャッシュがありません(レイヤーのオプションであり、レイヤー描画の速度を向上させるキャッシュを意味するわけではありません)が、空間データはほぼ確実ですレイヤー(マップ)の一部はArcMapのメモリのどこかに保存され、ArcMapは編集操作中のスナップなどの操作にそれを使用します。ArcMapデータのこの部分にアクセスする方法はありますか(実際に存在する場合)?
キャッシュをセットアップしたくありArcMap cache.ISpatialCacheManager
ません。データを取得したいのですが、キャッシュから特定のデータを取得する方法がありません。私が何を言っているのかをもっと詳しく説明しましょう。
このコードをプログラム内に配置すると
//C#
IFeature ipF=ipMyFeatureClassObject.GetFeature(10);
ArcMapがジオデータベースに選択コマンドを発行するとします。
select * from MyFeatureClassTableName Where ObjectId=10
データの記録を返します。
編集モードでは、ArcMapはこのメソッドを使用して空間データを取得し、マップ上のフィーチャのスナップ状態を計算できません。このメソッドには時間がかかり、スナップ計算には高速データの取得が必要です。また、マウスはどこにでも移動できるためです。マップとスナップはすべてのズームで有効になっています。これらすべての目撃者は、空間データがメモリ内のどこかで利用可能でなければならないことを示しており、それにアクセスする方法を探しています。
これらすべての消費量が満たされない場合、ArcMapがジオデータベースから空間データをその場で取得するために使用する完璧な方法が必要です(たとえば、マップ範囲に基づいた4または6レベルの空間インデックスとマウス位置を使用してパーツのみを取得する)マウスの動きが非常に速いときの空間データのこの方法では、マウスの最小インデックス領域が変更されたときにのみジオデータベースにアクセスできます。
ArcObjectデータソース以外のデータソース用に「スケッチツール」や「編集ツール」などのツールを開発していて、ArcMapと並行してキャッシュを設定したくない場合は、ArcMapと同じデータを使用したいこのデータソースのメモリに格納します。
さて、皆さんはこれらが本当の前提であると思いますか?そうであれば、そのメモリ内のArcMap空間データにアクセスする方法はありますか?