เปรียบเทียบข้อมูลใน ArcGIS ระหว่าง field 2 field ใน Attribute Table เพื่อตรวจสอบอย่างง่าย
ได้รับคำถามจากผู้ร่วมงานคนหนึ่งว่า จะเปรียบเทียบข้อมูลใน ArcGISได้อย่างไรว่ามันตรงกัน โดยผู้สอบถามได้ให้ข้อมูลว่า มีชั้นข้อมูลแปลงที่ดินที่จะตรวจสอบว่าระวางแผนที่ยูทีเอ็ม (เช่น 5136IV 8618-14) ที่อยู่ใน Attribute Table ของ layer มันถูกต้องหรือไม่ เพราะมีความกังวลว่า รูปแปลงปรากฎอยู่ในตำแหน่งของระวางแผนที่หนึ่ง แต่เก็บข้อมูลใน Attribute เป็นอีกระวางแผนที่หนึ่ง จะเกิดจากความผิดพลาดในการบันทึกข้อมูลหรืออะไรก็ไม่ทราบ
ก็เลยถามกลับไปว่า แล้วมีอะไรเป็นตัวตรวจเช็คว่าระวางแผนที่ถูกหรือไม่ถูก เพราะถ้าไม่มีตัวตรวจเช็คก็ไม่สามารถช่วยอะไรได้ ก็ได้คำตอบมาว่า มีกริดระวางแผนที่ จะใช้เป็นตัวตรวจสอบความถูกต้องข้อมูลระวางแผนที่ของชั้นแปลงที่ดิน
ลองเอา Attribute table ของชั้นกริดระวางมาดูแล้ว เห็นว่า field ชื่อ R1000 แสดงข้อมูลระวางแผนที่ครบ (เช่น 5136IV861814) สามารถนำข้อมูลใน Field นี้มาเป็นหลักยึดว่าข้อมูลในชั้นแปลงที่ดินจะมีข้อมูลระวางแผนที่ตรงหรือไม่ ซึ่งถ้ายึดว่าข้อมูลระวางแผนที่ของแปลงที่ดินตรงหรือไม่ตรงกับข้อมูลในชั้นกริดระวางนี้ก็มีทางเปรียบเทียบกันได้ง่ายจึงแนะวิธีไปว่า ถ้าอย่างนั้นให้ join ข้อมูล โดยอาศัย Location ระหว่าง layer ของ แปลงที่ดิน กับ layer ของ กริดระวาง แล้วก็เปรียบเทียบข้อมูลใน Field ที่ join กันนั้นตรงกันหรือไม่
สรุป เราจะมี Layer ทั้งหมด 2 Layer คือ Grid (เป็นชั้นกริดระวางแผนที่) กับ ชั้น Target ซึ่งเป็นชั้นรูปแปลงที่ดิน
เปรียบเทียบข้อมูลใน ArcGIS
ก่อนอื่น จำต้องสร้าง field ที่จะใช้เป็นตัวเปรียบเทียบในชั้น Target ให้มีรูปแบบเดียวกันกับข้อมูลใน Field R1000 ของ Layer Grid โดยใช้ Field Calculator ในการเชื่อมข้อความจาก Rawang_C Rawang_M และ Sheet ของชั้น Tatget เข้าด้วยกันเพื่อจะได้นำไปใช้เทียบกับ Field R1000 ในชั้นกริด
เมื่อได้แล้ว จะ Join กัน โดยเลือกวิธีเป็น Join Data from another layer base on spatial location และเลือกว่า each polygon will be given the attribute… ดูตามรูปละกัน ขี้เกียจพิมพ์ ถ้าเลือกอันแรก (given a summery) มันจะเอาแค่สรุปมาให้ แต่ถ้าเลือกอันล่างอย่างที่ให้เลือกจะเอาข้อมูลในให้
ตั้งชื่อ layer ที่จะให้เป็น output ให้เรียบร้อย ในที่นี้จะตั้งชื่อ shapefile ใหม่ว่า Join ก็แล้วกัน
เมื่อได้ Layer ใหม่ (ที่ตั้งชื่อว่า Join) แล้ว ก็เพิ่ม field เข้าไป โดยในที่นี้จะให้ type เป็น Long Integer เมื่อได้ฟิลด์แล้วก็จัดการ Field calculator โดยเลือก parser เป็น Python
(ข้อมูลต่อไปนี้เอามาจากคำแนะนำของ ESRI ถ้าใครอยากอ่านต้นฉบับโปรดคลิกเข้าไปอ่านได้)
ติ๊กถูกที่ Show Codeblock ด้วย
ใส่โคดดังต่อไปนี้ที่ช่อง Pre-Logic Script Code box
def isSame(x, y):
fieldA = str(x)
fieldB = str(y)
if fieldA == fieldB:
return 1
else:
return 0
และใส่
isSame(!FieldA!, !FieldB!)
ในช่องด้านล่าง เปลี่ยนชื่อ FieldA FieldB ให้เป็นชื่อ Field ที่ต้องการเปลี่ยนเทียบ
ผลลัพธ์ก็จะออกมา สามารถใช้การ select เพื่อเลือก 0 (ไม่ตรงกัน) มาตรวจสอบอีกครั้ง
ปัญหาคือว่า พอตรวจสอบที่ไม่ตรง พบว่าบางอันที่เชื่อมข้อมูลเป็นช่องว่าง ไม่มีข้อมูลใดใดติดมา เหตุผลก็เพราะว่าเป็นแปลงที่ดินคาบเกี่ยว 2 ระวางหรือมากกว่า ทำให้ไม่ได้ดึงข้อมูลจากชั้น Grid มาด้วย
ถ้าแปลงที่คาบเกี่ยวมันมีไม่กี่แปลง (เลือกจาก field ที่เชื่อมมาตรงไหนว่าง) ซึ่งจากตัวอย่างมีแค่ 4 แปลงที่เกิดปัญหาคาบเกี่ยวระหว่างระวางแผนที่) ก็อาจจะตรวจสอบด้วยตัวเองไปเลย ไม่ต้องใช้การคำนวณอะไร
แต่ถ้ามีเป็นจำนวนมาก แนะนำว่า อาจจะต้อง แปลง polygon ให้เป็น point อยู่กึ่งกลางแปลง (Centroid) ก่อนที่จะไป join ข้อมูลระหว่าง layer น่าจะช่วยลดปัญหาไปได้มากทีเดียว
สำหรับการเปรียบเทียบข้อมูลใน ArcGIS ก็มีเพียงเท่านี้เอง
แนะนำให้อ่านเรื่อง การตรวจสอบ Invalid Geometry