Number of shapes does not match the number of table records. คำเตือนข้อผิดพลาดที่เกิดขึ้นเมื่อนำเชพไฟล์มาเปิดใน ArcGIS เป็นข้อผิดพลาดที่เกิดขึ้นได้ บล็อกนี้จะอธิบายว่าข้อผิดพลาดนี้เกิดจากอะไร และจัดการแก้ปัญหานี้อย่างไร
อาจจะมีบางครั้งบางหน เวลาที่นำเชพไฟล์มาเปิดใน ArcGIS แล้วเปิดไม่ได้ จะมีหน้าต่างขึ้นมาบอกว่า Fail to add data ตามด้วยชื่อเชพไฟล์นั้น แล้วก็มีข้อผิดพลาดตามมายาวเหยียดว่า
Number of shapes does not match the number of table records.
เนื้อหาโดยรวม :)
Number of shapes does not match the number of table records คืออะไร
แปลเป็นภาษาไทยคร่าว ๆ ก็คือ จำนวนของรูปร่างไม่เท่ากับจำนวนของแถวในตาราง
ฟีเจอร์ (feature หรือ รูปร่าง – จะเป็นจุด เส้น หรือ โพลีกอนก็ตาม) ที่อยู่ในไฟล์ .shp ไม่ตรงกับจำนวนเรกคอร์ดหรือแถวในตารางแอตทริบิวต์ ซึ่งเก็บไว้ในไฟล์ .dbf
อย่างที่เคยได้อธิบายไปแล้วในเรื่อง Shapefile ว่าเชพไฟล์นี้ เวลาใช้งานจริงจะต้องมีอย่างน้อย 3 ไฟล์ประกอบกัน
- .shp จะเก็บ ฟีเจอร์ หรือ พวกรูปร่าง geometry ต่าง ๆ ไม่ว่าจะเป็นจุด เส้น หรือ รูปโพลีกอน (รูปพื้นที่ปิด)
- .dbf จะเก็บข้อมูลแอตทริบิวต์ที่เกี่ยวเนื่องกับจุด เส้น หรือ รูปพื้นที่ปิดที่อยู่ใน .shp
- .shx จะเป็นอินเด็กซ์หรือดัชนี เหมือนสำเนาขนาดย่อมของ .shp เพื่อให้เข้าถึงได้ง่ายกว่าเร็วกว่า
และ .shp กับ .dbf จะมีความสัมพันธ์กันแบบ 1 ต่อ 1 หมายความว่า ฟีเจอร์ (โพลีกอน หรือ จุด หรือ เส้น) จาก .shp 1 ฟีเจอร์ จะต้องสัมพันธ์กับ ข้อมูลจาก dBase 1 แถว หรือ 1 เร็กคอร์ดที่อยู่ในไฟล์ .dbf
เช่น ใน .shp มี 100 จุด ข้อมูลใน .dbf ก็ต้องมีจำนวนแอตทริบิวต์ 100 แถวเช่นเดียวกัน
เมื่อใดก็ตามที่จำนวนฟีเจอร์ไม่เท่ากับจำนวนแถวในแอตทริบิวต์ ก็จะเกิดข้อผิดพลาด Number of shapes does not match the number of table records ขึ้นมา
ทำไมจึงเกิดข้อผิดพลาดนี้?
ArcGIS ปิดตัวกะทันหัน: อาจจะเป็นเพราะระหว่างที่ทำงานอยู่แล้วไฟดับ แล้วไม่ได้ต่อเครื่องสำรองไฟไว้ หรือ ระหว่างการทำงานประมวลผลหนักเกินไป แล้วซอฟต์แวร์เกิดไม่ตอบสนอง (Not Responding) ก็เลยบังคับปิด ArcGIS ไป หรืออาจจะเป็นความผิดพลาดอะไรสักอย่างทำให้ ArcGIS ปิดตัวกะทันหัน
การที่ ArcGIS ปิดตัวกะทันหันก่อนจบกระบวนการนี้เป็นสาเหตุหลักของปัญหานี้
การแก้ไขไฟล์ dbf: ด้วยความที่ตารางแอตทริบิวต์ของเชพไฟล์ เก็บไว้ในไฟล์ .dbf จึงมีหลายท่านรู้สึกว่าการนำไฟล์นี้ไปแก้ไขใน dbf editor อื่น ๆ (เช่น Microsoft Access) เพื่อความสะดวก แต่ถ้าหากว่าแก้ไขแบบไม่ระมัดระวัง เกิดลบฟิลด์ที่จำเป็น หรือ ลบแถวไปโดยไม่ตั้งใจก็จะทำให้เกิดปัญหานี้ได้เช่นกัน
ส่วนสาเหตุอื่น ไม่ค่อยพบเท่าไหร่ อย่างเช่นการใช้ซอฟต์แวร์หรือโค้ดอื่นในการสร้างเชพไฟล์ อาจจะมีปัญหาเรื่องความสมบูรณ์ของข้อมูล อาจจะทำให้เกิด geometry เป็น null แต่มีข้อมูลแอตทริบิวต์ ก็อาจจะเป็นสาเหตุ
ทางแก้ปัญหา
เมื่อรู้สาเหตุของปัญหาแล้ว ทางแก้ปัญหาก็มีเพียงทางเดียว คือต้องทำให้จำนวนข้อมูลใน .shp กับใน .dbf เท่ากัน
ซึ่ง ถ้าหากว่าเกิดขึ้นเพราะ ArcGIS. ปิดตัวกะทันหัน ส่วนใหญ่เพียงแค่นำ .dbf ไปเปิดในซอฟต์แวร์อื่น (เช่นMicrosoft Access) แล้วลบแถวสุดท้ายออก ส่วนใหญ่วิธีนี้จะได้ผล แต่ก็ไม่ร้อยเปอร์เซ็นต์ และบางครั้งอาจจะต้องทำมากกว่า 1 ครั้งกว่าจะสำเร็จ
และบางครั้งอาจจะยุ่งยาก สำหรับคนทั่วไปที่ไม่รู้วิธีตรวจสอบข้อมูล
แต่ก็มีอยู่ 2 วิธี ที่เชื่อว่าทำได้แน่นอน เพราะมันง่ายมาก
QGIS
วิธีที่ง่ายที่สุด และหลายท่านคิดไม่ถึง นั่นคือปัญหาของเชพไฟล์ ซึ่งเป็นไฟล์ของ ESRI หรือฝั่ง ArcGIS โดยตรง แต่ใช้ ArcGIS แก้ไขตรง ๆ ไม่ได้ สามารถนำมาแก้ไขใน QGIS ได้!
ขั้นแรก ให้เปิดไฟล์ที่มีปัญหาใน QGIS ซึ่งจะเปิดได้เหมือนปกติ แต่เมื่อลองทำงาน ลาก ๆ ไปสักพัก จะรู้สึกว่ามีอะไรผิดปกติ เช่นเส้นหายไป
ลองเปิดแอตทริบิวต์เทเบิลดู บริเวณมุมบนด้านซ้ายมือ จะบอกว่ามีจำนวนฟีเจอร์เท่าไหร่ โดนกรองไว้ (Filtered) ไว้เท่าไหร่ ซึ่งเราเพิ่งเปิดมายังไม่ได้ทำอะไรกับเชพไฟล์ทั้งสิ้น การขึ้นข้อมูลไม่เท่ากันแบบนี้คือเชพไฟล์มีปัญหาแน่นอน
สิ่งที่เราต้องทำคือการใช้เครื่องมือ Fix Geometries เครื่องมือนี้อยู่ใน Processing Toolbox
ถ้าไม่เจอหน้าต่าง Processing Toolbox ให้ไปที่เมนู Processing ด้านบนแล้วเลือก Toolbox
ให้ค้นหา fix geometries
เลือกชั้นข้อมูลที่ต้องการ ถ้าหากว่ามีชั้นเดียวจะใส่ให้โดยอัตโนมัติอยู่แล้ว
อย่าลืมเลือก Method เป็น Structure
จะเลือกให้บันทึกเป็นเชพไฟล์ใหม่เลยก็ได้ หรือจะปล่อยเป็นเลเยอร์ชั่วคราวก่อนค่อยไปบันทึกเป็นเชพไฟล์ภายหลังก็ได้
กด RUN
เพียงเท่านี้ก็เรียบร้อยแล้ว
โปรดสังเกตว่าตารางแอตทริบิวต์ของเลเยอร์ที่ได้จากการ Fix Geometries นี้จะ มีจำนวนฟีเจอร์และฟิลเตอร์เท่ากันแล้ว
หมายเหตุ: เวลาที่บอกว่าใช้ Fix Geometries นี้ บางท่านอาจจะคิดว่าใน ArcGIS ก็มีเครื่องมือ Repair Geometry ซึ่งใช้งานได้เหมือนกัน
จากการทดสอบพบว่า Repair Geometry ใน ArcGIS รวมถึง Repair Shapefile ใน QGIS ไม่สามารถแก้ไขปัญหานี้ได้
Andrew Williamson’s ShapeChecker
อีกวิธีหนึ่งที่ใช้ได้ผลมาโดยตลอด นั่นคือ ใช้ซอฟต์แวร์ที่ชื่อ ShapeChecker ของคุณ แอนดริว วิลเลียมสัน (Andrew Williamson)
ต้องบอกก่อนว่า ซอฟต์แวร์ตัวนี้ เก่าแก่โบราณ และไม่ได้มีการอัปเดตมานานแล้ว อัปเดตครั้งล่าสุดคือปีค.ศ. 1999 แต่ก็ยังใช้งานได้อยู่ในปัจจุบัน
โดยส่วนตัว ใช้งานมาตั้งแต่ประมาณ ArcView 3 หรือ ArcMap 8 แต่ปัจจุบันก็ยังใช้งานได้ดีอยู่เหมือนเดิม
ดาวน์โหลดได้ที่ https://downloads.esri.com/Support/downloads/other_/AS13733.zip หรือ https://www.oocities.org/siliconvalley/haven/2295/
วิธีการไม่ยาก เพียงแค่ดาวน์โหลดไฟล์นี้มาจะเป็น zip file ให้นำไฟล์ออกจาก zip
ดับเบิลคลิกเปิด ShapeChecker ขึ้นมา
กดปุ่มแรก “shapefile” เพื่อเลือกเชพไฟล์ที่มีปัญหา
ปุ่มสอง “Read Header” จะกดหรือไม่กดก็ได้ เป็นข้อมูลทั่วไปของเชพไฟล์นั้น
ปุ่มสาม “Build Shx” ปุ่มนี้จะเป็นการอ่าน geometry ของเชปไฟล์นั้น ถ้าหากว่าเชปไฟล์ท่านมีปัญหาเรื่อง index เฉย ๆ แต่ข้อมูลครบแล้ว ปุ่มนี้อาจจะแก้ปัญหาของท่านได้เลย ไม่ต้องกดปุ่มถัดไป (เท่าที่สังเกตส่วนตัว คิดว่ามีผลแบบเดียวกับการกด repair geometry ใน ArcGIS)
ปุ่มสี่ “Check DBF” ปุ่มนี้ต้องกด มันคือหัวใจของซอฟต์แวร์นี้เลย ถึงจะใช้ชื่อว่า Check DBF แต่จริง ๆ คือการจัดการให้ข้อมูลของ .shp กับ .dbf เท่ากัน
เอาง่าย ๆ ไม่ต้องคิดอะไรมาก วิธีการใช้งานก็เพียงแค กดเลือกเชพไฟล์ที่ต้องการ แล้วก็คลิกไปทีละปุ่มจนจบ ซึ่งต้องบอกว่า ShapeChecker เป็นซอฟต์แวร์ที่ช่วยแก้ปัญหาเรื่องนี้ได้ดีมาก
สรุป
ลองเอาผลลัพธ์จากการแก้ไขด้วย 2 วิธีที่แนะนำนี้อาจจะให้ได้ผลลัพธ์ต่างกันเล็กน้อย
สำหรับเชฟไฟล์ที่เป็นปัญหาครั้งนี้ เกิดจากมีจำนวนโพลีกอนใน .shp จำนวน 1,712 โพลีกอน แต่มีข้อมูลแอตทริบิวต์เพียงแค่ 1,708 แถว
เมื่อจำนวนฟีเจอร์ไม่เท่ากับจำนวนแถวในตารางแอตทริบิวต์ จึงนำไฟล์มาเปิดใน ArcGIS ไม่ได้ เกิดปัญหา Number of shapes does not match the number of table records.
ซึ่งมันแสดงผลให้เห็นเวลานำเชพไฟล์นี้มาเปิดใน QGIS เมื่อเปิด แอตทริบิวต์เทเบิล จะขึ้นว่า มี ฟีเจอร์ 1,712 แต่กรองไว้แสดงผลเพียง 1,708 นั่นก็เป็นการบอกได้ว่ามีความผิดพลาด ซึ่งเมื่อเลือกวิธี Fix Geometries ก็จะตัดฟีเจอร์ที่ไม่มีข้อมูลแอตทริบิวต์ไป ผลลัพธ์จึงเหลือเพียง 1,708
ส่วน ShapeChecker จะจัดการกับ .dbf คือจัดการกับข้อมูลตารางแอตทริบิวต์เป็นหลัก ดังนั้นเมื่อพบว่ามีฟีเจอร์ 1,712 แต่มีข้อมูลใน dbf เพียงแค่ 1,708 ก็จะเพิ่มแถวว่าง ๆ ในตารางแอตทริบิวต์ให้มีจำนวนแถว 1,712 เท่ากับฟีเจอร์
โดยส่วนตัวจะแนะนำให้ใช้ ShapeChecker เพราะถ้าหากว่าท่านไม่มีความจำเป็นต้องใช้ QGIS ในชีวิตประจำวัน การที่ต้องดาวน์โหลดไฟล์ QGIS ซึ่งมีขนาดไฟล์ใหญ่พอสมควร ร่วม 2 GB และยังต้องมาติดตั้งซอฟต์แวร์อีกต่างหาก ในขณะที่ ShapeChecker มีขนาดไฟล์เล็กมาก และเพียงแค่ดับเบิลคลิกก็ใช้งานได้เลย
อย่างไรก็ตาม ShapeChecker นี้ไม่ได้อัปเดตมาตั้งแต่ปีค.ศ. 1999 ถึงแม้ว่าทุกวันนี้จะยังใช้งานได้ดีกับวินโดวส์ 11 แต่ในอนาคตข้างหน้าก็ไม่มีอะไรเป็นเครื่องรับประกันว่าจะใช้งานได้ จึงนำเสนอวิธีแก้ด้วย QGIS ไว้ด้วยกัน
หวังว่าจะเป็นประโยชน์สำหรับท่านที่กำลังเจอปัญหานี้
อ้างอิง Number of shapes does not match number of table records