손상된 shapefile을 수정 하시겠습니까?


10

ArcGIS Desktop 9.3에서 작업하고있는 shapefile이 어떻게 든 손상되어 "모양 수가 테이블 레코드 수와 일치하지 않습니다."라는 오류가 발생합니다. 내가 원하는 것은이 shapefile을 복구하는 것입니다. 파일의 다른 개정판에는없는 많은 편집 내용이 있습니다.

이전에 ogr2gui를 사용 하여이 오류를 복구 했지만 이제 도구가 충돌합니다. 나는 심지어 명령 행 버전 ogr2ogr을 시도 했지만 여전히 운이 없다. ArcScripts 웹 사이트의 Shapefile Repair Tool 스크립트 는 도움이되지 않았습니다.

어떤 아이디어? (shapefile 사용을 중단 한 것을 제외하고)


다음은 ogr2ogr의 출력입니다 (답변의 제안에 따라). 여기에 이미지 설명을 입력하십시오


1
속성 테이블 (.dbf 파일)이 개별적으로 편집되어 쉐이프 레코드와 속성 레코드간에 불일치가 발생하여 거의 확실하게 손상되었습니다. 쉐이프 파일을 "수정"하더라도, 정확한 속성이 쉐이프와 연관되어 있는지주의 깊게 다시 확인하십시오!
whuber

오류 메시지는 많은 것을 보여줍니다. 해당 포인트와 부품 수는 2 ^ 30과 2 ^ 32 사이의 값 (서명되지 않음)을 나타내며 .shp 파일 자체의 레코드 헤더를 광범위하게 물리적으로 덮어 씁니다 (유효한 카운트가 아니기 때문에). 따라서 해당 레코드의 데이터도 덮어 써 졌을 가능성이 높습니다. 요컨대, 적어도 .shp 파일의 많은 부분에 쉐이프 데이터가 더 이상 존재하지 않으므로 소프트웨어로 복구 할 수 없습니다. 백업에서 복원하고 거기서부터 시작하십시오.
whuber

1
@whuber. 감사. 물론입니다. 이 손상된 shapefile에서 복구 된 각 파일에는 내 백업보다 레코드 수가 훨씬 적습니다. 이후 백업으로 되돌 렸습니다.
Erick

Brad Nesoms 추천 shapecheck.exe는 처음으로 손상된 모양 파일을 수정했습니다! 훌륭한 도구

답변:


8

손상된 기능이 손실 된 옵션은 oski2ogr을 사용하여 -skipfailures 옵션을 사용하여 shapefile을 다른 shapefile로 변환 할 수 있습니다.

ogr2ogr -skipfailures fixed_shapefile.shp corrupted_shapefile.shp

자세한 내용은 PerryGeo 블로그의이 블로그 게시물을 참조하십시오.

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


명령을 실행하십시오 (-f "ESRI Shapefile"포함). 파일에 오류가 발생했습니다. [스크린 샷을 게시 할 수 없습니다]. 그것은 내가 추측하는 범인의 형태와 관련이 있습니다. 형식은 다음과 같습니다. 오류 1 : 손상된 .shp 파일 : Shape 2352, nPoints = 7, nEntitySize = 88.
Erick

-f 옵션을 안전하게 제거 할 수 있습니다. shapefile은 기본 출력 형식입니다. shapefile의 사본을 첨부 할 수 있다면 추가 연구를 위해 흥미로울 것입니다.
capooti

연구용 파일 : 파일을 기꺼이 전달했지만 데이터에 저작권이 있습니다. 어쨌든 고마워
Erick

@Erick, imgur.com에 스크린 샷을 올리면 여기에 게시 할 수 있습니다 (아직 관련이있는 경우)
djq

5

나는 이것을 사용합니다. 그것은 항상 그 문제를 해결했습니다.

shapecheck.exe


Brad와 동의합니다. ShapeCheck는 작동합니다-독립형 수정 shapefile-필요할 때 잘립니다.
Mapperz

@Mapperz. 여러 개의 잘린 부분으로 도구를 실행하십시오. 그 후 쉐이프 파일을 실제로 열 수 있습니다! 그러나 이제 되돌려 야 할 백업보다 적은 레코드가 포함됩니다. 백업이 없다면 이와 같은 복구 였을 것입니다. (최종 보관 도구) 감사합니다.
Erick

링크가 끊어졌습니다. 여기에 하나를하고있다 : geonet.esri.com/servlet/JiveServlet/download/614216-1-160601/... 출처 : geonet.esri.com/thread/177037#comment-614216
씨 체

4

Esri공식 답변 에는 여러 가지 팁이 있지만 shp 복구 유틸리티 를 사용하면 몇 번 해고 당할 수 있습니다.

내가 들어 봤지만 시도한 것을 말할 수없는 다른 사람은 거의 없습니다.


고마워 사이먼 그러나 내 주요 장애는 초보자를 위해 파일을 열 수 없으므로 대부분의 제안이 효과가 없다는 것입니다. 제안한 Tip One에서 모든 것을 시도했습니다. 아무것도 효과가 없었습니다.
Erick

2

좋아, 위의 좋은 답변 더미에 추가하는 또 다른 트릭이 있습니다.

이것은 좀 더 무차별적인 힘이며, 대부분 도움이되고 때로는 도움이되지 않으며, 문제를 해결하기위한 첫 번째 단계 일 뿐이지 만 (자체 해결 방법이 아니라) 종종 도움이 될 수 있습니다. shapefile을 열 수있는 곳으로 이동하십시오. 대부분의 경우 쉐이프 파일이 열린 후에도 ArcMap에서 더 많은 수동 복구를 수행해야합니다 (손상된 특징, 누락 된 속성, 정렬되지 않은 속성 등).

  1. shapefile을 비어있는 새 폴더로 복사하십시오. SHP, SHX 및 DBF 만 가지고 가십시오. 다른 모든 파일은 그대로 두십시오 (예 : prj 포함).

  2. (Windows) : SHX 파일을 마우스 오른쪽 버튼으로 클릭하고 "속성"을 선택하여 파일 속성을 엽니 다.

  3. "일반"탭에서이 SHX 파일의 정확한 파일 크기를 바이트 단위로 확인하십시오. "디스크의 크기"속성이 아니라 "크기"속성을 확인하십시오.

  4. 해당 파일 크기를 바이트 단위로 취하고 100 바이트 (헤더)를 뺍니다. 나머지 중 8 (각 "단어"의 크기)로 나눕니다. 결과는 쉐이프 파일의 SHP 부분에있는 여러 가지 쉐이프 피처를 제공합니다.

  5. DBF를 편집하고 DBF로 다시 저장할 수있는 일부 소프트웨어에서 DBF를여십시오. DBF의 행이 4 단계에서 계산 한 SHP의 모양 피처 수와 일치하도록 레코드를 추가하거나 제거하십시오. (이전 버전의 Excel을 사용하는 경우 행 # 1에 필드 이름이 포함되어 있으므로 1,000 개의 레코드를 사용하려는 경우 첫 번째 데이터 행 이후 시트에서 1,001 행이됩니다. 행 수를 일치시키기 위해 행을 삭제하는 데 필요한 행과 실제 데이터가있는 행을 유지하려면 새 DBF에 저장 한 후 다시 읽을 수 있습니다. 나중에 ArcMap에서 모든 것이 다시 열리는 지점에 도달하면.

  6. 위의 단계를 사용하여 SHP의 피처 수와 DBF의 행 수를 일치 시키면 ArcMap에서 쉐이프 파일을 다시 열어보십시오.


1

ogrinfo 를 사용하여 .shp 파일의 모양 수를 계산할 수 있습니다 (잘 모르겠습니다).

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

셰이프 수를 계산할 수 있으면 열린 사무실에서 .dbf 파일을 열어 완성하거나 추가 행을 제거 할 수 있습니다.


제안 해 주셔서 감사하지만 저는 GDAL 도구 전문가가 아닙니다. 또는 '매우'SQL 문맹. 제공 한 매개 변수로 도구 실행을 시도했지만 도구 관련 오류가 발생했습니다. "데이터 소스 수 (*)를 열 수 없습니다".
Erick

명령 행을 복사 / 붙여 넣기 할 수 있습니까?
simo

여전히 같은 오류가 있습니다. 그러나 @capooti의 솔루션은 일부 결과 / 식별 된 범인 모양을 생성 한 것으로 보입니다.
Erick

1

인덱스 파일 (.idx 및 .shx)을 삭제하면 운이 좋았습니다. 다시 연결하면 GIS가 재생성됩니다.


성공하지 않고 이것을 시도했다. 제안 해 주셔서 감사합니다.
Erick

0

모양 파일이 점 레이어이고 XY 필드 값이있는 경우 XY 이벤트 레이어 만들기 도구를 실행하여 손상된 모양 파일 dbf에서 다른 레이어를 만들 수 있습니다.


도로 (폴리 라인) 파일입니다. 그러나 포인트 시나리오에 대한 힌트를 명심하십시오. 감사.
Erick
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.