Recalculando a extensão completa da classe de recurso File Geodatabase?


19

Eu tenho uma classe de recurso em um geodatabase do arquivo Esri. Quando edito os recursos usando o editor no ArcMap e apago a maioria dos meus recursos, mantendo apenas os que estão no meio, o comando zoom na camada não funciona conforme o esperado. Em vez de aumentar o zoom na extensão dos recursos restantes na classe de recursos, a extensão será a anterior (contendo todos os recursos excluídos). Ao revisar os valores de extensão na caixa de diálogo de propriedades da classe de recurso, posso ver claramente os valores antigos. Portanto, a sessão de edição não parece alterar os valores completos da extensão.

Existe uma maneira de recalcular esses valores?

Tenho certeza de que esse problema deve ocorrer a todos que estão editando recursos no ArcMap ...


1
Infelizmente, o Arc: REBOX não foi traduzido como uma ferramenta do ArcGIS :-)
PolyGeo

Respostas:


6

A Esri agora possui uma ferramenta para isso na versão 10.4 (viva): Recalcule a Extensão da Classe de Recurso.

Eu estava enfrentando esse problema quando criava uma classe de recurso e escrevia geometria nela com o arcpy. Aparentemente, essas ferramentas não atualizam a extensão (provavelmente uma boa ideia por razões de desempenho).

Consegui redefinir a extensão na versão 10.2.2 com a sugestão da @Lou:

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

19

Clique com o botão direito do mouse na classe de recurso no ArcCatalog e vá para Propriedades. Na guia Extensão do recurso, clique em Recalcular. E voilà!

Estou usando o ArcGIS 10.2.1


6

A compactação do geodatabase arrumará seu índice espacial

"Se você adiciona e exclui dados com frequência, compacta seu arquivo ou geodatabase pessoal mensalmente. Você também deve compactar um geodatabase após qualquer alteração em grande escala. A compactação arruma o armazenamento reordenando os registros e eliminando o espaço não utilizado. Após a compactação, os dados em cada arquivo podem ser acessados ​​com mais eficiência. A compactação também reduz o tamanho de cada arquivo - é possível reduzir o tamanho de um geodatabase em metade ou mais ".

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

Compact (Gerenciamento de Dados)

"É recomendável compactar geodatabases pessoais quando eles tiverem mais de 250 MB. Se a entrada, exclusão ou edição geral de dados for freqüentemente realizada em um banco de dados, o banco de dados deve ser compactado regularmente para garantir o desempenho ideal".

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


4
Se você estiver fazendo exclusões massivas, isso é algo importante a ser feito (especialmente para bancos de dados geográficos maiores). Pessoalmente, não resolvi o problema de extensão com segurança, mas é definitivamente uma boa ideia.
Lou


5

A extensão GeoDatabase sempre se expande - nunca diminui automaticamente. A compactação e compactação otimiza apenas o armazenamento e a fragmentação, mas não a própria extensão. Eu tentaria recriar o índice espacial primeiro e ver se isso funciona.

Atualizar:

Como a reconstrução do índice espacial não funciona, tenho certeza de que o seguinte código VBA fará:

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

Você pode fazer isso em qualquer outra linguagem de programação suportada pela ESRI. O truque é obter um esquema e usar o método método IFeatureClassManage :: UpdateExtent .


Tentei recriar o índice espacial em um conjunto de dados de amostra e isso não ajudou no meu caso de teste. Fiquei sinceramente surpreso.
315 de Lou

Atualizando minha resposta com algum código então.
Ragi Yaser Burhum

Dessa forma, esse é o código ArcCatalog VBA.
Ragi Yaser Burhum

4

Não sei exatamente o que o causa nos bancos de dados de arquivos, mas sou capaz de replicá-los e é algo que já enfrentei antes. A única maneira de descobrir como contorná-lo é comprimir o geodatabase do arquivo. Isso resolverá o problema de extensão. Você precisará descompactá-lo quando terminar, porque não é possível editar um geodatabase de arquivo compactado.

Durante uma sessão de edição / ArcMap, quando você está realmente usando os dados, sempre é possível selecionar todos | zoom para selecionado como uma solução alternativa. Não é ótimo, mas eu o usei no meu fluxo de trabalho até chegar a um ponto de ruptura em que eu poderia fazer esse truque de comprimir / descomprimir.

Observe que a compactação não funcionará (pelo menos, não de maneira confiável). Ele reconstruirá seus índices, mas não achei confiável para corrigir problemas de extensão. Ainda é algo que você deve fazer de tempos em tempos. Eu apenas tentei novamente agora e não funcionou no meu conjunto de dados de amostra. YMMV.


Você também pode mover as classes de recursos para um novo geodatabase / shapefile, mas duvido que seja uma resposta aceitável. No entanto, na chance ímpar que faz parte do seu fluxo de trabalho (empacotando os dados para entrega), pode funcionar para você e não exigir etapas extras.
Lou

3

Se você deseja atualizar a extensão das classes de recursos em seu documento mxd, este pedaço de código pode ajudá-lo:

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.