ファイルジオデータベースフィーチャクラスの全範囲を再計算しますか?


19

Esriファイルジオデータベースにフィーチャクラスがあります。ArcMapのエディターを使用してフィーチャを編集し、ほとんどのフィーチャを削除し、中間のフィーチャのみを保持すると、レイヤーへのズームコマンドが期待どおりに機能しません。フィーチャクラスに残っているフィーチャの範囲にズームする代わりに、その範囲は前のもの(削除されたすべてのフィーチャを含む)になります。フィーチャクラスのプロパティダイアログで範囲の値を確認すると、古い値がはっきりと見えます。そのため、編集セッションは完全なエクステント値を変更しないようです。

これらの値を再計算する方法はありますか?

この問題は、ArcMapでフィーチャを編集しているすべての人に発生するはずです...


1
残念ながらArc:REBOXはArcGISツールとして翻訳されませんでした:-)
PolyGeo

回答:


6

Esriには10.4でこのためのツールがあります(完全版):フィーチャクラス範囲の再計算。

フィーチャクラスを作成し、arcpyでジオメトリを書き込んでいたときに、この問題に遭遇しました。どうやら、これらのツールは範囲を更新しません(おそらくパフォーマンス上の理由で良い考えです)。

私は10.2.2で@Louの提案で範囲をリセットすることに成功しました:

arcpy.CompressFileGeodatabaseData_management(output_workspace)
arcpy.UncompressFileGeodatabaseData_management(output_workspace)

19

ArcCatalogでフィーチャクラスを右クリックし、[プロパティ]に移動します。[機能範囲]タブで、[再計算]をクリックします。そしてほら!

ArcGIS 10.2.1を使用しています


6

ジオデータベース圧縮すると、空間インデックスが整頓されます

「データを頻繁に追加および削除する場合は、ファイルまたはパーソナルジオデータベースを毎月圧縮する必要があります。大規模な変更後はジオデータベースも圧縮する必要があります。各ファイルのデータにさらに効率的にアクセスできます。圧縮により各ファイルのサイズも縮小されます。ジオデータベースのサイズを半分以上縮小できる可能性があります。」

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Compacting_file_and_personal_geodatabases/003n0000007t000000/

コンパクト(データ管理)

「パーソナルジオデータベースが250 MBを超える場合は、コンパクト化することをお勧めします。データベースでデータ入力、削除、または一般的な編集が頻繁に実行される場合、最適なパフォーマンスを確保するためにデータベースを定期的に圧縮する必要があります。」

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000000n000000


4
大規模な削除を行う場合、これは重要なことです(特に大規模なジオデータベースの場合)。個人的には、範囲の問題を確実に修正することはできませんでしたが、間違いなく良い考えです。
ルー


5

GeoDatabaseエクステントは常に拡大します-自動的に縮小することはありません。圧縮と圧縮は、ストレージと断片化のみを最適化し、エクステント自体は最適化しません。私がしようとするだろう最初の空間インデックスを再作成し、それはトリックを行うかどうかを確認します。

更新:

空間インデックスの再構築はトリックを行わないため、次のVBAコードは確実に動作します

Public Sub reCalcExt()
  Dim pGXApplication As IGxApplication
  Set pGXApplication = Application

  Dim pGxObject As IGxObject
  Set pGxObject = pGXApplication.SelectedObject

  If Not TypeOf pGxObject.InternalObjectName Is IFeatureClassName Then
    Exit Sub
  End If

  Dim pName As IName
  Set pName = pGxObject.InternalObjectName
  Dim pSchemaLock As ISchemaLock
  Set pSchemaLock = pName.Open

  pSchemaLock.ChangeSchemaLock esriExclusiveSchemaLock
  Dim pFeatureClassManage As IFeatureClassManage
  Set pFeatureClassManage = pSchemaLock
  pFeatureClassManage.UpdateExtent

  Exit Sub

ErrHandler:
  pSchemaLock.ChangeSchemaLock esriSharedSchemaLock
End Sub

これは、ESRIでサポートされている他のプログラミング言語で実行できます。秘Theは、スキーマロックを取得し、IFeatureClassManage :: UpdateExtentメソッドを使用することです。


サンプルデータセットの空間インデックスを再作成しようとしましたが、テストケースでは役に立ちませんでした。正直驚いた。
ルー

その後、いくつかのコードで私の答えを更新します。
ラギヤーサーバーフム

このように、これはArcCatalog VBAコードです。
ラギヤセルバーフム

4

ファイルジオデータベースで何が原因かは正確にはわかりませんが、実際に複製することができます。これは以前に直面したことです。バイパスする方法を見つけることができた唯一の方法は、ファイルジオデータベースを圧縮することです。これにより、範囲の問題が修正されます。圧縮ファイルジオデータベースは編集できないため、完了したら解凍する必要があります。

実際にデータを使用している編集/ ArcMapセッション中に、すべてを選択できます| 回避策として選択済みにズームします。それは素晴らしいことではありませんが、圧縮/解凍のトリックを実行できる限界点に到達するまで、ワークフローで使用しました。

圧縮は機能しません(少なくとも、信頼性が低い)。インデックスを再構築しますが、エクステントの問題を修正するには信頼性が低いことがわかりました。それは時々あなたが時々やるべきことです。今すぐ試しましたが、サンプルデータセットでは機能しませんでした。YMMV。


フィーチャクラスを新しいジオデータベース/シェープファイルに移動することもできますが、それが受け入れられる答えであることは非常に疑わしいです。ただし、ワークフローの一部である奇妙な可能性(配信用のデータのパッケージ化)が機能する場合があり、追加の手順は必要ありません。
ルー

3

mxdドキュメントのフィーチャクラスの範囲を更新する場合、次のコードチャンクが役立ちます。

Dim pLayer As ILayer
        Dim pEnumLayer As IEnumLayer
        Dim pFeatureLayer As IFeatureLayer
        Dim pFeatureClass As IFeatureClass
        Dim pFeatureClassManage As IFeatureClassManage


        pEnumLayer = pMap.Layers
        pLayer = pEnumLayer.Next

        Do Until pLayer Is Nothing
            If TypeOf pLayer Is FeatureLayer Then
                pFeatureLayer = pLayer
                pFeatureClass = pFeatureLayer.FeatureClass
                pFeatureClassManage = pFeatureClass
                pFeatureClassManage.UpdateExtent()
            End If
            pLayer = pEnumLayer.Next
        Loop
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.