Corrigindo shapefile corrompido?

10

Eu tenho um shapefile que eu estava trabalhando no ArcGIS Desktop 9.3 de alguma forma corrompido e isso me dá o erro "Número de formas não corresponde ao número de registros da tabela". O que eu gostaria é recuperar esse shapefile, pois ele possui muitas edições que outras revisões do arquivo não possuem.

Anteriormente, eu me recuperei desse erro usando ogr2gui, mas a ferramenta agora falha. Eu até tentei a versão da linha de comando ogr2ogr, mas ainda não tive sorte. Este script, Shapefile Repair Tool do site ArcScripts também não ajudou.

Alguma ideia? (exceto que eu paro de usar shapefiles)


Aqui está a saída do ogr2ogr (com base em uma sugestão nas respostas): insira a descrição da imagem aqui

Erick
fonte
1
Ele quase certamente foi corrompido porque sua tabela de atributos (um arquivo .dbf) estava sendo editada separadamente, criando uma inconsistência entre os registros de forma e os registros de atributo. Mesmo se você conseguir "consertar" o arquivo shapefile, verifique cuidadosamente se os atributos corretos estão associados às formas!
whuber
As mensagens de erro revelam muito. Esses números de pontos e partes indicam valores entre 2 ^ 30 e 2 ^ 32 (sem sinal), sugerindo fortemente uma sobrescrição física extensiva de cabeçalhos de registro no próprio arquivo .shp (porque nunca seriam contagens válidas). Portanto, é muito provável que os dados desses registros também tenham sido substituídos. Em suma, seus dados de forma provavelmente não existem mais, pelo menos em muitas partes do arquivo .shp e, portanto, não são recuperáveis ​​por software. Restaure a partir de seus backups e comece a partir daí.
whuber
1
@whuber. Obrigado. Claro que é o caso. Cada arquivo recuperado deste shapefile corrompido contém muito menos registros que o meu backup. Desde então, reverti para o backup.
Erick
Recomendação Brad Nesoms shapecheck.exe, corrigido meu arquivo de forma corrompido pela primeira vez! grande ferramenta

Respostas:

8

Uma opção, com a perda dos recursos corrompidos, poderia ser ogr2ogr convertendo seu shapefile para outro shapefile, com a opção -skipfailures:

ogr2ogr -skipfailures fixed_shapefile.shp corrupted_shapefile.shp

Para mais detalhes, veja esta postagem do blog PerryGeo:

http://www.perrygeo.net/wordpress/?p=132

capooti
fonte
Execute o comando (incluindo -f "ESRI Shapefile" que você deixou de fora). Obteve um relatório de erro no arquivo. [Não é possível postar a captura de tela aqui]. Isso tem a ver com as formas culpadas, eu acho. O formato é: ERRO 1: Arquivo .shp corrompido: Forma 2352, nPoints = 7, nEntitySize = 88.
Erick
você pode remover com segurança a opção -f: shapefile é o formato de saída padrão. Seria interessante, para novas pesquisas, se você pode anexar uma cópia do shapefile
capooti
Arquivo para pesquisa: eu teria enviado com prazer o arquivo, mas infelizmente os dados estão protegidos por direitos autorais. Obrigado mesmo assim.
Erick
@Erick, se você colocar a imagem em imgur.com posso postá-lo aqui (se ainda relevante)
DJQ
5

Eu uso esse. Sempre corrigiu esse problema para mim.

shapecheck.exe

Brad Nesom
fonte
Concordo com Brad, o ShapeCheck simplesmente funciona - corrige arquivos de forma independentes - trunca quando necessário.
Mapperz
@Mapperz. Executou a ferramenta, com vários truncados. Poderia realmente abrir o shapefile a partir de então! Mas agora ele contém menos registros do que o backup ao qual tenho que reverter. Se eu não tivesse backup, uma recuperação como essa teria sido. (Ferramenta de arquivamento para eventualidade) Obrigado.
Erick
4

A resposta oficial da Esri tem várias dicas, mas aponta para o utilitário de reparo shp que me salvou de ser demitido algumas vezes.

Poucos outros que eu ouvi falar, mas não posso dizer que tentei:

Simon
fonte
Obrigado Simon. Mas o meu maior problema é que não consigo abrir o arquivo para iniciantes, para que a maioria das sugestões não funcione. Acabei de experimentar tudo na Dica Um que você sugeriu. Nada funcionou.
Erick
2

Ok, aqui está outro truque para adicionar à pilha de boas respostas acima.

Essa é uma força um pouco mais bruta, na maioria das vezes ajuda, às vezes não ajuda, e embora seja provavelmente apenas o primeiro passo para corrigir o problema (em vez de uma solução em si mesma, o que geralmente não é), pode ajudar levá-lo para onde você pode abrir o shapefile. Na maioria dos casos, você ainda precisará fazer mais reparos manuais no ArcMap após a abertura do shapefile (recursos corrompidos ?, atributos ausentes? Atributos desalinhados? Etc.)

  1. Copie o shapefile para uma nova pasta vazia. Leve apenas SHP, SHX e DBF com você. Deixe todos os outros arquivos para trás e sim, que inclui o prj.

  2. (Windows): clique com o botão direito do mouse no arquivo SHX e selecione "Propriedades" para abrir as propriedades do arquivo.

  3. Na guia "Geral", verifique o tamanho exato do arquivo SHX até o byte. Observe a propriedade "Tamanho" e não a propriedade "Tamanho no disco".

  4. Pegue esse tamanho de arquivo em bytes e subtraia 100 bytes (o cabeçalho). Do restante, divida por 8 (o tamanho de cada "palavra"). O resultado fornece o número de recursos de forma dentro da parte SHP do shapefile.

  5. Abra o DBF em algum software que permita editar o DBF e salvá-lo novamente como um DBF. Adicione ou remova registros para fazer com que as linhas no DBF correspondam ao número de recursos de forma no SHP que você calculou na etapa 4. (Se você estiver usando uma versão mais antiga do Excel, lembre-se de que a Linha 1 contém os nomes dos campos; portanto, se você estiver procurando por 1.000 registros, isso acabará sendo 1.001 linhas na planilha desde a primeira linha de dados é a linha nº 2.) Se, para fazer com que o número de linhas corresponda, você precisa excluir as linhas e essas linhas contêm dados reais, você deve mantê-las, salve-as em um novo DBF e poderá lê-las novamente mais tarde, quando você chegar ao ponto em que tudo se abre novamente no ArcMap.

  6. Depois de usar as etapas acima para combinar o número de recursos no SHP com o número de linhas no DBF, tente abrir o shapefile novamente no ArcMap.

JimBarry
fonte
1

Você pode tentar contar o número de formas nos arquivos .shp com ogrinfo (não tenho certeza de que funcionará):

 ogrinfo -sql 'select count(*) from myshp' myshp.shp

Se você puder contar o número de formas, poderá abrir o arquivo .dbf com o office aberto para concluí-lo (ou remover linhas extras)

simo
fonte
Obrigado pela sugestão, mas não sou exatamente um profissional das ferramentas GDAL. ou alfabetizado 'muito' sql. Tentei executar a ferramenta com os parâmetros que você forneceu, mas obteve um erro relacionado à ferramenta. "Incapaz de abrir a contagem de fontes de dados (*)".
Erick
você pode copiar / colar a linha de comando?
simo
Eu posso, mas ainda o mesmo erro. Mas a solução do @capooti parece ter produzido alguns resultados / formas culpadas identificadas.
Erick
1

Tive alguma sorte em excluir os arquivos de índice (.idx e .shx), que o seu GIS regenerará quando reconectado.

Nate
fonte
Tentei isso sem sucesso. Obrigado por sugerir.
Erick
0

Se o seu shapefile fosse uma camada de pontos e tivesse valores de campo XY, você poderia executar a ferramenta Make XY Event Layer para criar outra camada do shapefile corrompido dbf.

artwork21
fonte
É um arquivo de estradas (polilinhas). Mas mantenha sua dica em mente para um cenário de pontos. Obrigado.
Erick