วิธีหลีกเลี่ยงการสร้าง Shapefiles ที่เสียหายระหว่างการแก้ไข


15

ฉันมีหนึ่งในช่างเทคนิคระบบสารสนเทศภูมิศาสตร์ของฉันทำให้เป็นเส้นบางดิจิตอลใน QGIS ในรูปแบบ shapefile ฉันไม่รู้ว่าเขาทำมันได้อย่างไร (และเขาก็ไม่ได้) แต่อย่างใดรูปร่างของไฟล์ก็เสียหาย มันกำลังสร้างเส้นสุ่มหรือบางบรรทัดที่เขาสร้างจะหายไป ฉันเข้าสู่ ArcCatalogue เพื่อดูว่ามันเป็นอย่างไรใน ArcGIS และนี่คือสิ่งที่ฉันเห็น:

ป้อนคำอธิบายรูปภาพที่นี่

สังเกตุไอคอนเครื่องหมายคำถามที่ฉันควรเห็นไอคอนรูปร่าง 'เส้น' เห็นได้ชัดว่า ArcCatalogue ไม่สามารถอ่านไฟล์นี้ นอกจากนี้ไฟล์ dbf ตัวที่สองดูเหมือนจะถูกสร้างขึ้นโดยแนบไฟล์ '_packed' ไว้ที่ท้าย เมื่อฉันดูที่ shapefile โดยใช้ Windows explorer ฉันเห็นว่ามี. dbf สำหรับ shapefile 'M3_PRE_SMU_lines_10Apr13_SMC.dbf' แล้วดังนั้นฉันจึงไม่รู้ว่ารูปร่างแบบ _packed นี้มาจากที่ใดและฉันไม่สามารถหาสิ่งใดออนไลน์ได้ ที่พูดกับมัน

ฉันพยายามที่จะเพิ่มไฟล์นี้ลงใน ArcMap และฉันได้รับข้อผิดพลาดต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ข้อผิดพลาดคือการอธิบายตนเอง ... จำนวนรูปร่างไม่ตรงกับจำนวนเรคคอร์ด ฉันไม่รู้ว่าทำไมมันถึงเกิดขึ้น ดูเหมือนจะไม่มีอะไรออนไลน์ที่อธิบายว่าสิ่งนี้เกิดขึ้นใน QGIS ได้อย่างไร แต่ฉันเห็นเครื่องมือซ่อมแซมสองอย่าง ฉันซ่อมแซมตัวเองด้วยการเปิด QGIS เพิ่มเลเยอร์จากนั้นคลิกขวาที่เลเยอร์และ 'save as' shapefile อื่น ดังนั้นฉันจึงคิดหาวิธีแก้ไข แต่ฉันหวังว่าจะหาวิธีแก้ปัญหาที่จะหยุดสิ่งนี้ไม่ให้เกิดขึ้นตั้งแต่แรก ขอบคุณไมค์


1
ฉันใช้ QGIS มาหลายปีแล้วและไม่เคยเห็นปัญหานี้มาก่อน ลักษณะที่ปรากฏ "ขลัง" ของ. dbf ตัวอื่นแสดงให้เห็นว่า Shapefile ได้รับการดัดแปลงด้วยภายนอกของ QGIS หากคุณสามารถสร้างข้อผิดพลาดโดยใช้ QGIS เท่านั้นโปรดยื่นรายงานข้อผิดพลาด นั่นจะสำคัญมาก!
underdark

ฉันพยายามทำซ้ำปัญหาโดยไม่มีโชค สิ่งหนึ่งที่ฉันสังเกตเห็นคือไม่เหมือนกับใน ArcGIS ฉันไม่ได้รับข้อความล็อค schema เมื่อทำการแก้ไขใน QGIS (เช่นถ้ามีคนที่ล็อค schema บนรูปร่างไฟล์และคุณเริ่มแก้ไขไฟล์เดียวกัน ArcGIS จะโยนข้อผิดพลาดเมื่อบันทึก การแก้ไข QGIS ไม่ได้) ฉันคิดว่ามันประหยัดแปลกเมื่อคุณบันทึกรูปร่างไฟล์ที่ล็อคสคีมา ฉันไม่แน่ใจ 100% ว่านี่คือสาเหตุ แต่มีอะไรบางอย่างที่น่าสังเกต
Mike

ฉันยังมีข้อผิดพลาดนี้ครอบตัดขณะแก้ไขรูปร่าง งานของฉันคือการแก้ไขของฉันใน ArcMap เห็นได้ชัดว่านั่นไม่ใช่ทางออกที่แท้จริง - แต่ - คุณไม่ได้อยู่คนเดียวในการประสบกับข้อผิดพลาดประเภทนี้
เควิน

คุณพยายามเปลี่ยนชื่อไฟล์ ..._ SMC.dbf เป็น ..._ SMC.dbf.backup และ ..._ SMC_packed.dbf เป็น ... _ SMC.dbf หรือไม่
Matthias Kuhn

2
สวัสดีปัญหาเดียวกันกับ Dufur ไฟล์ที่สร้างในสภาพแวดล้อม q gis เท่านั้น มันเกิดขึ้นเมื่อฉันแก้ไขรูปร่างและในที่สุดก็ไปที่บันทึกแล้วหยุดแก้ไขดังนั้นเส้นจะหายไปและตารางแอตทริบิวต์ดูเหมือนว่าจะไม่มีข้อมูลใด ๆ หากพยายามโหลดรูปร่างอีกครั้งบน qgis จะดูว่างเปล่า ในโฟลเดอร์ไฟล์ es mario.shx ได้กลายเป็น mario_packed.shp ฉันพบว่าการลบคำที่บรรจุออกจากชื่อ (กลับมาเป็น mario.shx) รูปร่างได้รับการโหลดแล้วและดูเหมือนว่าจะใช้งานได้ นานแค่ไหน? ไม่ทราบว่าฉันกำลังบ้ากับสิ่งนี้
user27144

คำตอบ:


16

คำอธิบาย

OGR (ส่วนหนึ่งของ GDAL) เป็นห้องสมุดที่ใช้โดย QGIS เพื่อเข้าถึง shapefiles เมื่อ OGR ลบฟีเจอร์มันจะไม่ลบทันที แต่เพียงทำเครื่องหมายว่าฟีเจอร์นั้นถูกลบ นาน ๆ ครั้งคำสั่งที่เรียกว่าrepackจะถูกดำเนินการซึ่งจะสร้างไฟล์ใหม่ด้วยส่วนต่อท้าย _repack และคัดลอกคุณสมบัติทั้งหมดที่ไม่ได้ทำเครื่องหมายว่าถูกลบไปยังไฟล์ใหม่นี้ เมื่อเสร็จสิ้นแล้ว. dbf ดั้งเดิมจะถูกแทนที่ด้วย _repack.dbf จากนั้นทำสิ่งเดียวกันกับ shapefile: สร้างใหม่ (_packed.shp) คัดลอกคุณสมบัติที่ไม่ถูกลบทั้งหมดและในที่สุดก็แทนที่. shp เดิม

ดูเหมือนว่าอยู่ในกระบวนการนี้มีบางอย่างล้มเหลว (อาจผิดพลาดหรือไม่)

ภายในกระบวนการนี้รหัสคุณลักษณะเปลี่ยนไปดังนั้นฉันเดาว่า shp (เรขาคณิต) ที่คุณมีและ dbf (ตารางแอตทริบิวต์) ใช้รหัสคุณลักษณะที่แตกต่างกันสำหรับคุณสมบัติเดียวกันสิ่งที่นำไปสู่พฤติกรรมแปลก ๆ ที่คุณพบ ดูเหมือนว่าหนึ่งในสองไฟล์นั้นยังคงมี (ส่วนหนึ่งของ) คุณสมบัติที่ถูกลบในขณะที่อีกอันหนึ่งไม่มี

วิธีจัดการกับสิ่งนี้

อัปเดต, พ.ย. 2016: GDAL 2.2 มาพร้อมกับฟังก์ชั่นในตัวเพื่อเรียกหีบห่ออัตโนมัติเมื่อใดก็ตามที่ไฟล์ถูกเขียนลงดิสก์ ดังนั้นก่อนที่จะทำสิ่งใดให้ตรวจสอบรุ่น GDAL ใน QGIS เกี่ยวกับข้อความโต้ตอบและอัปเดต GDAL ของคุณ (มักจัดส่งเป็นส่วนหนึ่งของ QGIS) เป็นรุ่นล่าสุด

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

หากคุณพบปัญหานี้อีกครั้งคุณสามารถลองสร้างดัชนีเชิงพื้นที่บน shapefile ในกระบวนการนี้ QGIS จะเรียกrepackอีกครั้งบน Shapefile และอาจ "ซ่อมแซม" shp / dbf แต่นี่เป็นเพียงการเดาที่ยังไม่ผ่านการตรวจสอบ

ดังกล่าวโดย @rhm และในความคิดเห็นที่มันอาจจะยังช่วยในการเปลี่ยนชื่อ{} xyz _packed. {ต่อ}ไฟล์{xyz}. {ต่อ} หากไฟล์ที่แพ็คได้ถูกเขียนขึ้นอย่างสมบูรณ์แล้วและเป็นเพียงการเปลี่ยนชื่อซึ่งล้มเหลวก็เป็นสิ่งที่ถูกต้องที่จะทำตามขั้นตอนนี้ด้วยตนเอง อย่างไรก็ตามหากไฟล์ _packed ยังไม่ได้เขียนอย่างสมบูรณ์คุณอาจขาดข้อมูลจากส่วนต่างๆของคุณสมบัติของคุณ ดังนั้นก่อนที่คุณจะลองทำสำเนาสำรองของไฟล์ที่เกี่ยวข้องทั้งหมด

ข้อมูลความเป็นมาเกี่ยวกับเวลาที่เรียกว่า repack

ระหว่างQGIS 2.0 และ 2.8 repack ถูกเรียกเมื่อใดก็ตามที่เลเยอร์ถูกยกเลิกการโหลด (ออกจาก QGIS โหลดโครงการอื่น ... ) หากมีการลบสถานที่หรือมีการเปลี่ยนแปลงรูปทรงเรขาคณิตไฟล์. shp และ. dbf พร้อมระเบียนที่ทำเครื่องหมายว่าถูกลบจะปรากฏขึ้น

การเริ่มต้นด้วยการบรรจุหีบห่อQGIS 2.10จะถูกเรียกเมื่อใดก็ตามที่เลเยอร์ถูกบันทึกหลังจากการดำเนินการที่มีศักยภาพในการเพิ่มการตั้งค่าสถานะที่ถูกลบไปยังระเบียน ดังนั้นตอนนี้ไฟล์ควรจะอยู่ในสถานะมีสติเสมอที่จะประมวลผลโดยแอปพลิเคชันอื่น


1

เรื่องนี้เกิดขึ้นกับฉันใน QGIS ฉันจัดการเพื่อแก้ไขปัญหาโดยการลบ '_packed' จากชื่อไฟล์เนื่องจากมีคนแนะนำไว้ในส่วนความคิดเห็นด้านบน


1

อาจเป็นปัญหาของไฟล์ดัชนี. shx ที่ใช้งานไม่ได้อีก ควรเก็บประเภทรูปทรงเรขาคณิตไว้ในส่วนหัว. shp และ. shx หากไม่ตรงกันซอฟต์แวร์จะสร้างข้อผิดพลาด

ดูเหมือนว่า QGIS จะไม่เข้มงวดมากในไฟล์ดัชนีที่ไม่สมบูรณ์และสามารถสร้างขึ้นมาใหม่ได้Save As...ในขณะที่ ARCGIS ยืนยันในไฟล์ดัชนีที่ถูกต้องและสร้าง dbf ที่บรรจุ (ตารางแอตทริบิวต์) สำหรับคุณลักษณะที่สามารถพบได้ผ่านส่วนที่ถูกต้องของ ไฟล์ดัชนีหรืออาจจะไม่ใช้ดัชนี


1

การปรากฏตัวของคุณสมบัติที่ถูกลบและ / หรือพฤติกรรมแปลก ๆ ของเชปไฟล์จากคุณลักษณะถูกลบใน QGIS เป็นปัญหาที่รู้จักเห็นนี้รายงานข้อผิดพลาด 11007และคำถามที่เกี่ยวข้องนี้ - รูปหลายเหลี่ยมที่ถูกลบดูเหมือนจะกลับไปใช้รุ่นเก่า เช่นเดียวกับ ArcGIS ที่มีปัญหากับ shapefiles ดังกล่าวเมื่อบันทึกใน QGIS เป็นไฟล์ MapInfo TAB พวกเขาจะทำให้ปลั๊กอิน MapInfo RouteFinder เกิดความผิดพลาดเว้นแต่ว่าตารางจะบรรจุใน MapInfo ก่อนที่จะโหลด RouteFinder การใช้ Universal Translator เพื่อแปลงรูปร่างที่เสียหายใน MapInfo ล้มเหลว

ตามที่คุณพบปัญหาสามารถแก้ไขได้ด้วยการทำ 'บันทึกเป็น' ใน QGIS

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