¿Recalcular la extensión completa de la clase de entidad de Geodatabase de archivos?

19

Tengo una clase de características en una geodatabase de archivos Esri. Cuando edito las entidades usando el editor en ArcMap, y borro la mayoría de mis entidades y mantengo solo las del medio, el comando de zoom a capa no funciona como se esperaba. En lugar de hacer zoom en la extensión de las entidades que permanecen en la clase de entidad, la extensión será la anterior (que contiene todas las entidades eliminadas). Al revisar los valores de extensión en el cuadro de diálogo de propiedades para la clase de entidad, puedo ver claramente los valores anteriores. Por lo tanto, la sesión de edición no parece alterar los valores de extensión completa.

¿Hay alguna manera de recalcular estos valores?

Estoy bastante seguro de que este problema debería ocurrir a todos los que editan entidades en ArcMap ...

Offermann
fuente
1
Desafortunadamente Arc: REBOX no se tradujo como una herramienta ArcGIS :-)
PolyGeo

Respuestas:

6

Esri ahora tiene una herramienta para esto en 10.4 (hurra): Recalcular la extensión de la clase de entidad.

Me encontraba con este problema cuando estaba creando una clase de entidad y escribiendo geometría con arcpy. Aparentemente, esas herramientas no actualizan la extensión (probablemente una buena idea por razones de rendimiento).

He tenido éxito al restablecer la extensión en 10.2.2 con la sugerencia de @Lou:

arcpy.CompressFileGeodatabaseData_management(output_workspace)
arcpy.UncompressFileGeodatabaseData_management(output_workspace)
Precio Curtis
fuente
19

Haga clic con el botón derecho en la clase de entidad en ArcCatalog y vaya a Propiedades. En la pestaña Extensión de la función, haga clic en Recalcular. ¡Y voilá!

Estoy usando ArcGIS 10.2.1

Geoffroy Richer-Lalonde
fuente
6

Compactar la Geodatabase ordenará su índice espacial

"Si agrega y elimina datos con frecuencia, debe compactar su archivo o geodatabase personal mensualmente. También debe compactar una geodatabase después de cualquier cambio a gran escala. La compactación ordena el almacenamiento reordenando los registros y eliminando el espacio no utilizado. Después de compactar, se puede acceder a los datos de cada archivo de manera más eficiente. La compactación también reduce el tamaño de cada archivo: es posible reducir el tamaño de una geodatabase a la mitad o más ".

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

Compacto (gestión de datos)

"Se recomienda compactar geodatabases personales cuando superan los 250 MB. Si la entrada de datos, la eliminación o la edición general se realizan con frecuencia en una base de datos, la base de datos debe compactarse regularmente para garantizar un rendimiento óptimo".

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

Mapperz
fuente
44
Si está haciendo eliminaciones masivas, esto es algo importante (especialmente para geodatabases más grandes). Personalmente no lo he solucionado de manera confiable, pero definitivamente es una buena idea.
Lou
5

La extensión GeoDatabase siempre se expande, nunca se acorta automáticamente. La compactación y compresión solo optimiza el almacenamiento y la fragmentación, pero no la extensión en sí. Intentaría recrear el índice espacial primero y ver si eso funciona.

Actualizar:

Dado que la reconstrucción del índice espacial no funciona, estoy seguro de que el siguiente código VBA lo hará:

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

Puede hacerlo en cualquier otro lenguaje de programación compatible con ESRI. El truco consiste en obtener un esquema de bloqueo y utilizar el método IFeatureClassManage :: UpdateExtent .

Ragi Yaser Burhum
fuente
Intenté recrear el índice espacial en un conjunto de datos de muestra, y eso no ayudó en mi caso de prueba. Estaba sinceramente sorprendido.
Lou
Actualizando mi respuesta con algún código entonces.
Ragi Yaser Burhum
De esta manera, este es el código ArcCatalog VBA.
Ragi Yaser Burhum
4

No sé exactamente qué lo causa en las geodatabases de archivos, pero sí puedo replicarlo y es algo que he enfrentado antes. La única forma en que pude descubrir cómo evitarlo fue comprimiendo la geodatabase de archivos. Eso solucionará el problema de la extensión. Deberá descomprimirlo cuando haya terminado, porque no puede editar una geodatabase de archivos comprimidos.

Durante una sesión de edición / ArcMap cuando realmente está utilizando los datos, siempre puede seleccionar todo | acercar a seleccionado como una solución alternativa. No es genial, pero lo he usado en mi flujo de trabajo hasta que llegué a un punto de ruptura donde podría hacer ese truco de comprimir / descomprimir.

Tenga en cuenta que la compactación no funcionará (al menos, de manera no confiable). Reconstruirá sus índices, pero he encontrado que no es confiable para solucionar problemas de extensión. Todavía es algo que debes hacer de vez en cuando. Lo intenté de nuevo en este momento y no funcionó en mi conjunto de datos de muestra. YMMV.

Lou
fuente
También puede mover clases de entidad a una nueva geodatabase / shapefile, pero dudo mucho que sea una respuesta aceptable. Sin embargo, en caso de que sea parte de su flujo de trabajo (empaquetar los datos para la entrega), puede funcionar para usted y no requerir pasos adicionales.
Lou
3

Si desea actualizar el alcance de la clase de entidad en su documento mxd, este fragmento de código podría ayudarlo:

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
Radek M.
fuente