แก้ไข shapefile ที่เสียหาย?


10

ฉันมีรูปร่างไฟล์ที่ฉันทำงานใน ArcGIS Desktop 9.3 ได้รับความเสียหายอย่างใดและมันทำให้ฉันข้อผิดพลาด "จำนวนรูปร่างไม่ตรงกับจำนวนของตารางบันทึก" สิ่งที่ฉันต้องการคือการกู้คืน shapefile นี้เพราะมันมีการแก้ไขมากมายที่การแก้ไขอื่น ๆ ของไฟล์ไม่มี

ก่อนหน้านี้ฉันกู้คืนจากข้อผิดพลาดนี้โดยใช้ogr2guiแต่ตอนนี้เครื่องมือเพิ่งเกิดปัญหา ฉันได้ลองรุ่นบรรทัดคำสั่งogr2ogr แล้วแต่ก็ยังไม่มีโชค สคริปต์เครื่องมือซ่อมแซม Shapefileจากเว็บไซต์ ArcScripts ไม่ได้ช่วยอะไรเช่นกัน

ความคิดใด ๆ (ยกเว้นว่าฉันหยุดใช้ shapefiles)


นี่คือผลลัพธ์จาก ogr2ogr (อ้างอิงจากคำแนะนำ aa ในคำตอบ): ป้อนคำอธิบายรูปภาพที่นี่


1
มันเกือบจะเสียหายอย่างแน่นอนเพราะตารางแอ็ตทริบิวต์ (ไฟล์. dbf) กำลังถูกแก้ไขแยกกันสร้างความไม่สอดคล้องกันระหว่างบันทึกรูปร่างและบันทึกแอตทริบิวต์ แม้ว่าคุณจะจัดการ "แก้ไข" รูปร่างไฟล์ให้แน่ใจว่าได้ทำการตรวจสอบอย่างระมัดระวังอีกครั้งว่าคุณลักษณะที่ถูกต้องเกี่ยวข้องกับรูปร่าง!
whuber

ข้อความแสดงข้อผิดพลาดเปิดเผยมาก จำนวนคะแนนและชิ้นส่วนเหล่านั้นบ่งชี้ค่าระหว่าง 2 ^ 30 และ 2 ^ 32 (ไม่ได้ลงนาม) ขอแนะนำให้เขียนทับฟิสิคัลส่วนหัวของเรคคอร์ดส่วนใหญ่ในไฟล์. shp ด้วยตัวเอง ดังนั้นจึงมีโอกาสสูงที่ข้อมูลในระเบียนเหล่านั้นจะถูกเขียนทับเช่นกัน กล่าวโดยสรุปข้อมูลรูปร่างของคุณอาจไม่มีอยู่อีกต่อไปอย่างน้อยในหลาย ๆ ส่วนของไฟล์. shp ดังนั้นซอฟต์แวร์จึงไม่สามารถกู้คืนได้ กู้คืนจากข้อมูลสำรองของคุณและเริ่มจากตรงนั้น
whuber

1
@whuber ขอบคุณ แน่นอนว่าเป็นกรณี แต่ละไฟล์ที่กู้คืนจาก shapefile ที่เสียหายนี้มีวิธีบันทึกน้อยกว่าข้อมูลสำรองของฉัน ฉันเปลี่ยนกลับเป็นข้อมูลสำรองตั้งแต่
Erick

Brad Nesoms แนะนำ shapecheck.exe แก้ไขไฟล์รูปร่างที่เสียหายของฉันเป็นครั้งแรก! เครื่องมือที่ยอดเยี่ยม

คำตอบ:


8

ตัวเลือกที่สูญเสียคุณสมบัติที่เสียหายอาจเป็นการใช้ ogr2ogr การแปลงรูปร่างไฟล์ของคุณเป็นรูปร่างไฟล์อื่นด้วยตัวเลือก -skipfailures:

ogr2ogr -skipfailures fixed_shapefile.shp corrupted_shapefile.shp

สำหรับรายละเอียดเพิ่มเติมดูที่โพสต์บล็อกนี้จากบล็อก PerryGeo:

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


เรียกใช้คำสั่ง (รวมถึง -f "ESRI Shapefile" ที่คุณทิ้งไว้) มีรายงานข้อผิดพลาดเกี่ยวกับไฟล์ [ไม่สามารถโพสต์ภาพหน้าจอที่นี่] มันเกี่ยวกับรูปร่างผู้ร้ายที่ฉันเดา รูปแบบคือ: ข้อผิดพลาด 1: ไฟล์. shp ที่เสียหาย: รูปร่าง 2352, nPoints = 7, nEntitySize = 88
Erick

คุณสามารถลบตัวเลือก -f ได้อย่างปลอดภัย: shapefile เป็นรูปแบบเอาต์พุตเริ่มต้น มันจะน่าสนใจสำหรับการวิจัยเพิ่มเติมหากคุณสามารถแนบสำเนาของไฟล์
รูปร่าง

ไฟล์สำหรับการวิจัย: ฉันจะส่งต่อไฟล์ด้วยความยินดี แต่น่าเสียดายที่ข้อมูลมีลิขสิทธิ์ ขอบคุณอยู่ดี
Erick

@ เคล็ดลับถ้าคุณใส่ภาพหน้าจอในimgur.comฉันสามารถโพสต์ไว้ที่นี่ (ถ้ายังเกี่ยวข้อง)
djq

5

ฉันใช้อันนี้ มันแก้ไขปัญหานั้นให้ฉันอยู่เสมอ

shapecheck.exe


ฉันเห็นด้วยกับ Brad, ShapeCheck ใช้งานได้ - การแก้ไขแบบสแตนด์อโลน shapefiles - ตัดเมื่อจำเป็น
Mapperz

@Mapperz เรียกใช้เครื่องมือด้วยการตัดให้สั้นลงหลายรายการ แน่นอนสามารถเปิด shapefile หลังจากนั้น! แต่ตอนนี้มันมีบันทึกน้อยกว่าการสำรองข้อมูลที่ฉันต้องเปลี่ยนกลับ ถ้าฉันไม่มีการสำรองข้อมูลการกู้คืนเช่นนี้จะเป็นเช่นนั้น (เครื่องมือเก็บถาวรสำหรับเหตุการณ์) ขอบคุณ
Erick

ลิงก์เสีย นี่คือการทำงานอย่างใดอย่างหนึ่ง: geonet.esri.com/servlet/JiveServlet/download/614216-1-160601/…ที่มา: geonet.esri.com/thread/177037#comment-614216
Mr. Che

4

คำตอบอย่างเป็นทางการจาก Esriมีจำนวนของเคล็ดลับ แต่คุณไปยังอาคารซ่อมแซมบราซึ่งได้บันทึกฉันโดนไล่ออกไม่กี่ครั้ง

มีอีกไม่กี่ที่ที่ฉันเคยได้ยิน แต่ไม่สามารถพูดได้ว่าฉันได้ลองแล้ว:


ขอบคุณ Simon แต่ข้อผูกมัดที่สำคัญของฉันคือฉันไม่สามารถให้ไฟล์เปิดสำหรับผู้เริ่มต้นดังนั้นคำแนะนำส่วนใหญ่จะไม่ทำงาน ได้ลองทุกอย่างใน Tip One ที่คุณแนะนำแล้ว ไม่มีอะไรทำงาน
Erick

2

ตกลงนี่เป็นเคล็ดลับอีกประการในการเพิ่มคำตอบที่ดีไว้ด้านบน

คนที่ดุร้ายกว่านี้ส่วนใหญ่จะช่วยบางครั้งก็ทำไม่ได้และในขณะที่มันอาจเป็นเพียงขั้นตอนแรกในการแก้ไขปัญหา (แทนที่จะเป็นวิธีแก้ปัญหาให้ตัวเองซึ่งไม่ใช่บ่อยครั้ง) มันสามารถช่วยได้ พาคุณไปยังตำแหน่งที่คุณสามารถเปิด shapefile กรณีส่วนใหญ่คุณจะยังต้องทำการซ่อมแซมด้วยตนเองเพิ่มเติมใน ArcMap หลังจากเปิดไฟล์รูปร่าง (คุณสมบัติที่เสียหายหรือไม่?

  1. คัดลอกรูปร่างไฟล์ลงในโฟลเดอร์ว่างใหม่ นำ SHP, SHX และ DBF ติดตัวไปด้วย ทิ้งไฟล์อื่นทั้งหมดไว้ข้างหลังและใช่ที่มี prj

  2. (Windows): คลิกขวาที่ไฟล์ SHX และเลือก "Properties" เพื่อเปิดคุณสมบัติไฟล์

  3. ในแท็บ "ทั่วไป" ให้ดูที่ขนาดไฟล์ EXACT ของไฟล์ SHX นี้ลงไปที่ไบต์ ดูคุณสมบัติ "ขนาด" ไม่ใช่คุณสมบัติ "ขนาดบนดิสก์"

  4. ใช้ขนาดไฟล์นั้นเป็นไบต์และลบ 100 ไบต์ (ส่วนหัว) จากส่วนที่เหลือให้หารด้วย 8 (ขนาดของแต่ละคำว่า "word") ผลลัพธ์ให้จำนวนคุณลักษณะรูปร่างภายในส่วน SHP ของ Shapefile

  5. เปิด DBF ในซอฟต์แวร์บางตัวที่จะอนุญาตให้คุณแก้ไข DBF และบันทึกกลับเป็น DBF เพิ่มหรือลบระเบียนเพื่อให้แถวใน DBF ตรงกับจำนวนคุณลักษณะรูปร่างใน SHP ที่คุณคำนวณในขั้นตอนที่ # 4 (หากคุณใช้ Excel รุ่นเก่าโปรดทราบว่าแถว # 1 มีชื่อเขตข้อมูลดังนั้นหากคุณมี 1,000 รายการจะมี 1,001 แถวในแผ่นงานตั้งแต่แถวข้อมูลแถวแรก คือ Row # 2.) หากต้องการให้จำนวนแถวตรงกับที่คุณต้องการลบแถวและแถวเหล่านั้นมีข้อมูลจริงที่คุณต้องการเก็บไว้เพียงบันทึกแถวนั้นลงใน DBF ใหม่และคุณสามารถอ่านสิ่งนั้นกลับ ในภายหลังเมื่อคุณถึงจุดที่ทุกอย่างเปิดขึ้นอีกครั้งใน ArcMap

  6. เมื่อคุณใช้ขั้นตอนด้านบนเพื่อจับคู่จำนวนฟีเจอร์ใน SHP กับจำนวนแถวใน DBF แล้วให้ลองเปิด shapefile อีกครั้งใน ArcMap


1

คุณสามารถลองนับจำนวนรูปร่างลงในไฟล์. shp ของคุณด้วยogrinfo (ไม่แน่ใจว่าจะใช้งานได้):

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

หากคุณสามารถนับจำนวนรูปร่างคุณสามารถเปิดไฟล์. dbfของคุณกับสำนักงานเปิดเพื่อให้เสร็จสมบูรณ์ (หรือลบแถวเพิ่มเติม)


ขอบคุณสำหรับคำแนะนำ แต่ฉันไม่ใช่เครื่องมือของ GDAL อย่างแน่นอน หรือ 'มาก' sql literate เครื่องมือเรียกใช้ที่พยายามใช้งานพร้อมพารามิเตอร์ที่คุณให้มา "ไม่สามารถเปิดการนับแหล่งข้อมูล (*)"
Erick

คุณสามารถคัดลอก / วางบรรทัดคำสั่งได้หรือไม่
simo

ฉันสามารถ แต่ยังคงมีข้อผิดพลาดเดียวกัน แต่โซลูชันของ @capooti ดูเหมือนว่าจะสร้างผลลัพธ์บางอย่าง / ระบุรูปร่างผู้ร้าย
Erick

1

ฉันโชคดีที่ได้ลบไฟล์ดัชนี (.idx และ. shx) ซึ่ง GIS ของคุณจะสร้างใหม่เมื่อเชื่อมต่อใหม่


พยายามอย่างนี้ไม่สำเร็จ ขอบคุณที่แนะนำ
Erick

0

หาก Shapefile ของคุณเป็นเลเยอร์จุดและมีค่าฟิลด์ XY คุณสามารถรันเครื่องมือ Make XY Event Layer เพื่อสร้างเลเยอร์อื่นจาก Shapefile ที่เสียหาย


มันเป็นไฟล์ถนน (polylines) แต่จะเก็บคำใบ้ของคุณไว้ในใจสำหรับสถานการณ์จุด ขอบคุณ
Erick
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.