重新计算文件地理数据库要素类的全部范围?


19

我在Esri文件地理数据库中有一个要素类。当我在ArcMap中使用编辑器编辑要素时,删除了大部分要素并仅将其保留在中间时,“缩放到图层”命令无法正常工作。不会缩放到要素类中剩余要素的范围,而是将范围设为前者(包含所有已删除的要素)。在要素类的属性对话框中查看范围值时,我可以清楚地看到旧值。因此,编辑会话似乎并未更改完整范围值。

有没有办法重新计算这些值?

我非常确定,每个在ArcMap中编辑地图项的人都会出现此问题。


1
不幸的是,Arc:REBOX没有被转换为ArcGIS工具:-)
PolyGeo

Answers:


6

Esri现在在10.4(hooray)中具有用于此目的的工具:重新计算要素类范围。

在创建要素类并使用arcpy将几何体写入其中时,我遇到了这个问题。显然,这些工具不会更新范围(出于性能原因,这可能是一个好主意)。

我已经成功使用@Lou的建议在10.2.2中重置了范围:

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

19

在ArcCatalog中右键单击要素类,然后转到属性。在“功能范围”选项卡中,单击“重新计算”。和瞧!

我正在使用ArcGIS 10.2.1


6

压缩地理数据库将整理您的空间索引

“如果经常添加和删除数据,则应该每月压缩文件或个人地理数据库。在进行大规模更改后,还应该压缩地理数据库。压缩通过重新排序记录和消除未使用的空间来整理存储空间。压缩之后,这样就可以更有效地访问每个文件中的数据。压缩还可以减小每个文件的大小-可以将地理数据库的大小减少一半或更多。”

http://help.arcgis.com/zh-CN/arcgisdesktop/10.0/help/index.html#/Compacting_file_and_personal_geodatabases/003n0000007t000000/

紧凑型(数据管理)

“建议压缩大小超过250 MB的个人地理数据库。如果经常在数据库上执行数据输入,删除或常规编辑,则应定期压缩数据库以确保最佳性能。”

http://help.arcgis.com/zh-CN/arcgisdesktop/10.0/help/index.html#//00170000000n000000


4
如果要进行大规模删除,这是一件很重要的事情(尤其是对于较大的地理数据库而言)。我个人还没有可靠地解决范围问题,但这绝对是一个好主意。
Lou


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支持的编程语言来执行此操作。诀窍是获取模式锁并使用IFeatureClassManage :: UpdateExtent方法。


我尝试在样本数据集上重新创建空间索引,但这对我的测试用例没有帮助。老实说我很惊讶。
2012年

然后用一些代码更新我的答案。
拉吉·亚瑟·伯洪

这样,这就是ArcCatalog VBA代码。
拉吉·亚瑟(Ragi Yaser Burhum)2012年

4

我不确切知道是什么原因导致了文件地理数据库的出现,但是我确实能够复制它,这是我以前遇到过的事情。我能够找出如何绕过它的唯一方法是压缩文件地理数据库。这将解决范围问题。完成后,您将需要解压缩它,因为您无法编辑压缩文件地理数据库。

在实际使用数据的编辑/ ArcMap会话期间,您始终可以选择所有| 放大到选定为解决方法。并不是很好,但是我一直在工作流程中使用它,直到达到可以进行压缩/解压缩技巧的临界点为止。

请注意,压缩将不起作用(至少不可靠)。它将重建您的索引,但是我发现它不适合解决范围问题。仍然是您不时应该做的事情。我现在再次尝试过,但是在我的样本数据集上不起作用。YMMV。


您也可以将要素类移动到新的地理数据库/ shapefile,但是我高度怀疑这是可以接受的答案。但是,在您的工作流程中(打包数据以进行交付),这很可能会为您工作,而无需采取额外步骤。
Lou

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.