Como evitar a criação de Shapefiles corrompidos durante a edição?

15

Eu tenho um dos meus técnicos em GIS digitalizando algumas linhas no QGIS no formato shapefile. Não sei como ele fez isso (e nem ele), mas de alguma forma o shapefile ficou corrompido. Estava criando linhas aleatórias ou algumas das linhas que ele criou simplesmente desapareceriam. Entrei no ArcCatalogue para ver como ficava no ArcGIS e foi isso que vi:

insira a descrição da imagem aqui

Observe o ícone do ponto de interrogação, onde eu devo ver o ícone 'linha' do shapefile. Obviamente, o ArcCatalogue não pode ler este arquivo. Além disso, um segundo arquivo dbf parecia ter sido criado com o '_packed' anexado ao final. Quando olho para o shapefile usando o Windows Explorer, vejo que já existe. que fala com isso.

Tentei adicionar este arquivo ao ArcMap e recebi o seguinte erro:

insira a descrição da imagem aqui

O erro é bastante auto-explicativo ... o número de formas não corresponde ao número de registros. Só não sei por que isso está ocorrendo. Parece não haver nada on-line que explique como isso está ocorrendo no QGIS, mas vejo algumas ferramentas de reparo. Eu mesmo consertei isso apenas abrindo o QGIS, adicionando a camada e, em seguida, clicando com o botão direito na camada e 'salvando como' outro shapefile. Então, imaginei uma solução, mas espero encontrar uma solução que impeça que isso ocorra em primeiro lugar. Obrigado Mike

Mike
fonte
1
Uso o QGIS há anos e nunca vi esse problema antes. A aparência "mágica" de outro .dbf sugere que o Shapefile foi violado fora do QGIS. Se você pode reproduzir o erro usando apenas o QGIS, envie um relatório de erro. Isso seria muito importante!
Underdark
Eu tenho tentado replicar o problema sem sorte. Uma coisa que notei é que, diferentemente do ArcGIS, não recebo uma mensagem de bloqueio de esquema ao editar no QGIS (ou seja, se alguém tiver um bloqueio de esquema no shapefile e você começar a editar o mesmo, o ArcGIS emitirá um erro ao salvar O QGIS não)) Eu acho que ele salva de maneira estranha quando você salva um shapefile com o esquema bloqueado. Não tenho 100% de certeza de que essa é a causa, mas algo digno de nota.
22613 Mike
Também ocorreu esse erro durante a edição de shapefiles. Minha solução foi apenas fazer minha edição no ArcMap. Obviamente, essa não é uma solução real - mas - você não está sozinho ao experimentar esse tipo de erro.
Kevin
Você tentou renomear o arquivo ..._ SMC.dbf para ..._ SMC.dbf.backup e o ..._ SMC_packed.dbf para ..._ SMC.dbf?
Matthias Kuhn
2
oi mesmo problema com Dufur. Arquivos criados apenas no ambiente q gis. Isso acontece quando estou editando a forma e finalmente vou salvar e parar de editar, então as linhas desaparecem e a tabela de atributos parece não ter dados. se tentar carregar novamente a forma no qgis, ela parecerá vazia. Na pasta o arquivo es. mario.shx se tornou um mario_packed.shp. Descobri que, ao excluir a palavra compactada do nome (está de volta mario.shx), a forma agora está carregada e parece estar funcionando. Quão mais? não sabe que eu estou ficando louco com este
user27144

Respostas:

16

Explicação

OGR (parte do GDAL) é a biblioteca usada pelo QGIS para acessar os shapefiles. Quando o OGR exclui recursos, ele não os exclui imediatamente, mas apenas marca os recursos como excluídos. De vez em quando, um comando chamado repack é executado, o que cria um novo arquivo com o sufixo _repack e copia todos os recursos que não estão marcados como excluídos para esse novo arquivo. Depois de concluído, o .dbf original é substituído pelo _repack.dbf. Ele faz o mesmo com o shapefile: crie um novo (_packed.shp), copie todos os recursos não excluídos e, eventualmente, substitua o .shp original.

Parece que em algum lugar deste processo, algo falhou (talvez um acidente?).

Nesse processo, os IDs dos recursos mudam, então eu acho que o shp (geometria) que você possui e o dbf (tabela de atributos) usam IDs de recursos diferentes para os mesmos recursos, o que leva ao comportamento estranho que você experimenta. Parece que um dos dois arquivos ainda contém (parte dos) os recursos excluídos, enquanto o outro não.

Como lidar com isso

Atualização, novembro de 2016: O GDAL 2.2 é fornecido com a funcionalidade integrada para chamar a reembalagem automaticamente sempre que o arquivo é gravado no disco. Portanto, antes de fazer qualquer outra coisa: verifique a versão GDAL no QGIS sobre o diálogo e atualize sua versão do GDAL (geralmente enviada como parte do QGIS) para uma versão recente.

Provavelmente, não há muito o que você possa fazer além de fazer backups regulares para não perder mais dados do que pode suportar (você está fazendo isso de qualquer maneira, certo? 😉). E se você encontrar uma maneira de reproduzir isso (melhor com um conjunto de dados de amostra), crie um relatório de erro .

Se você enfrentar esse problema novamente, também poderá tentar criar um índice espacial no shapefile. Nesse processo, o QGIS chamará reembalar novamente no shapefile e poderá "reparar" o shp / dbf. Mas este é apenas um palpite não verificado.

Como mencionado por @rhm e nos comentários, também pode ajudar a renomear o arquivo {xyz} _packed. {Ext} para {xyz}. {Ext} . Se o arquivo compactado já foi completamente gravado e foi apenas a renomeação que falhou, é absolutamente válido executar esta etapa manualmente. No entanto, se o arquivo _packed não tiver sido completamente gravado, você poderá estar perdendo informações de partes de seus recursos. Portanto, antes de tentar fazer cópias de backup de todos os arquivos envolvidos.

Informações básicas sobre quando a reembalagem é chamada

Entre o QGIS 2.0 e 2.8, a reembalagem é chamada sempre que a camada é descarregada (saia do QGIS, carregue um projeto diferente ...). Se um recurso foi excluído ou uma geometria alterada, os arquivos .shp e .dbf com registros marcados como excluídos estão presentes.

A partir do QGIS 2.10, a reembalagem é chamada sempre que a camada é salva após uma operação com potencial para adicionar o sinalizador excluído aos registros. Portanto, os arquivos agora devem estar sempre em um estado saudável para serem processados ​​por outros aplicativos.

Matthias Kuhn
fonte
1

Isso aconteceu comigo no QGIS. Consegui resolver o problema simplesmente excluindo '_packed' do nome do arquivo, como alguém sugeriu na seção de comentários acima.

rhm
fonte
1

Talvez este seja outro problema de um arquivo de índice .shx quebrado. O tipo de geometria deve ser armazenado nos cabeçalhos .shp e .shx. Se não corresponderem, o software irá gerar um erro.

Parece que o QGIS não é muito rigoroso em arquivos de índice quebrados e pode recriá-lo Save As..., enquanto o ARCGIS insiste em um arquivo de índice correto e cria um dbf (tabela de atributos) compactado para os recursos que podem ser encontrados nas partes corretas do arquivo de índice, ou talvez sem usar o índice.

AndreJ
fonte
1

A reaparição de recursos excluídos e / ou o comportamento ímpar de arquivos shapefiles dos quais os recursos foram excluídos no QGIS é um bug conhecido. Consulte este relatório de bug 11007 e esta pergunta relacionada - Polígonos excluídos parecem reverter para versões mais antigas . Além de o ArcGIS ter problemas com esses shapefiles, quando salvos no QGIS como arquivos MapInfo TAB, eles causam uma falha no plug-in MapInfo RouteFinder, a menos que as tabelas sejam compactadas primeiro no MapInfo antes de carregar o RouteFinder. A execução do Universal Translator para converter esses shapefiles corrompidos no MapInfo falha.

Como você descobriu, o problema pode ser resolvido com um 'salvar como' no QGIS.

SpatialSuccess
fonte