นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน

Our Shangri-La
Ico64
Kittisakdi Choomalee

ภาควิชาเวชศาสตร์ชุมชน คณะแพทยศาสตร์ มหาวิทยาลัยสงขลานครินทร์
Network
Members · Following: 0 · Followed: 16

อ่าน: 11593
ความเห็น: 0

ก้าวย่าง ทางเดิน ลืมเลือนคืนวัน ดั้นด้นไป: KML vs R ยกที่ ๑๑ - ลองของ

ลองให้มันรู้กันไป

หลังจากที่เสร็จเรื่องเสร็จราวไปแล้วกับการดึงค่า coordinates จากแฟ้มข้อมูล kml หรือแฟ้มข้อมูลของโปรแกรม Google Earth ด้วยโปรแกรม R

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

แต่ถึงจะอ้อมไปไกลก็ยังสำเร็จจนได้นะครับ

ค่ำๆ ของวันที่ ๓ เมษายน ๒๕๕๕ หลังจากกินอิ่มแล้ว แว๊บเข้ามาดูความเคลื่อนไหวในวงแชร์พบว่าแชร์หมุนติ้วๆ หายไปแล้ว รูปภาพต่างๆ กลับมาเป็นปกติอีกครั้ง

หลายคนโล่งอกโล่งใจไป

สำหรับคุณท้าวแชร์คงนอนหลับไม่กระสับกระส่ายเหมือน ๒ สัปดาห์ที่ผ่านมา

ผมกลับมานั่งเล่นๆ กับข้อมูล floodway ที่ดึงมาจากแฟ้มข้อมูล kml ต่อนะครับ

ไหนๆ ก็ไหนๆ แล้วลองเล่นดูอีกสักตั้ง

ผมลองจับข้อมูลจาก ๒ แหล่งมา plot รวมกัน

ข้อมูลแรกก็เป็นข้อมูล floodway ที่ดึงมาจากแฟ้มข้อมูล klml จาก อ. Smarn ที่ทิ้งไว้ให้ลองเล่นในวงแชร์ กับอีกข้อมูลหนึ่งเป็นข้อมูลที่ผมดึงค่า coordinates แผนที่ประเทศไทยมาจาก shape file ที่download มาจากเวป GADM กระบวนการทั้งหลายอ่านได้จากบันทึกนี้ครับ

เพื่อเป็นการรวบรัดตัดความนะครับ

ท่านผู้อ่านที่รักทั้งหลายคงจำกันได้ว่าผมเก็บข้อมูล coordinates floodway สายตะวันตกไว้ในวัตถุชื่อ test1.67.dat ในโปรแกรม R และข้อมูล coordinates floodway สายตะวันออกไว้ในวัตถุ test1.312.dat ในโปรแกรม R

ดังนั้นสิ่งที่ผมต้องทำเพิ่มก็คือดึงข้อมูลแผนที่ประเทศไทยเข้ามาเก็บไว้ในวัตถุใน (Work space ของ) โปรแกรม R (เดียวกัน) ด้วย

คงจำกันได้นะครับผมดึงข้อมูล coordinates แผนที่ประเทศไทยจาก shape file (Polygon) โดยใช้ฟังก์ชัน readShapeSpatial()

ผมไม่อธิบายเพิ่มเติมแล้วนะครับ ย้อนกลับไปอ่านได้จากบันทึกนี้ครับ

> TH.map <- readShapeSpatial("c:/Rworkplace/THA_adm/THA_adm0.shp")

หลังจากนั้นทำการ plot ข้อมูลแผนที่ประเทศไทยและ floodway ให้วางซ้อนกันเป็นชั้นๆ (layers)

> plot(TH.map)
> plot(test1.67.dat, col="blue", pch=16, type = "l", cex = 0.1, add=TRUE)
> plot(test1.312.dat, col="red", pch=16, type = "l", cex = 0.1, add=TRUE)

การ plot ต้อง plot ตามลำดับตามนี้นะครับ ให้ plot TH.map ที่เป็น layer หลังสุดก่อนจากนั้นทำการ plot layer ถัดมา ผมทดลองดูแล้วต้อง plot test1.67.dat ก่อน test1.312.dat โดยที่การ plot layer ถัดๆ มาต้องเพิ่มค่า add=TRUE ในการ plot ด้วย ไม่เช่นนั้นโปรแกรม R จะลบข้อมูลที่ plot ไว้เดิมทิ้งไป

จากนั้นทำการบันทึกรูปที่ได้จากการ plot ซ้อนกันจากเมนูที่ R Graphic Device โดยผมเลือกบันทึกแฟ้มข้อมูลเป็นแฟ้มข้อมูลชนิด png

หน้าตาที่ plot ได้เป็นแบบนี้ครับ

ดูๆแล้วผมไม่ค่อยพอใจกับการบันทึกรูปภาพโดยวิธีนี้เนื่องเพราะรูปที่ได้มีความละเอียดน้อยมาก ขนาดของรูปมีขนาดเพียง 5KB เท่านั้น และมีส่วนที่เป็นกรอบขาวๆด้านข้างมากเกินไป

ผมเลยนั่งเล่นๆต่อครับ

อีกอย่าง ข้อมูล floodway ทีได้มานั้นเป็นข้อมูลที่เป็นจุด (Points) ดังนั้นเวลาสั่ง plot จะได้เป็นจุดแทนที่จะเป็นเส้นแนว floodway (แม้จะระบุให้เป็น line แล้วก็ตาม (type="l"))

ส่วน cex=0.1 ก็ให้ตัวอักษรที่ใช้ plot มีขนาดเล็ก หรือจุดสีแดง/ สีน้ำเงินของ floodway ไม่มีขนาดใหญ่จนเกินไป

ผมลองบันทึกแฟ้มข้อมูลเป็นแบบ meta file โปรแกรม R มีให้เลือกบันทึกเพียงสกุลเดียวคือ .emf ขนาดของแฟ้มข้อมูลค่อนข้างใหญ่คือมีขนาดประมาณ 3.2MB คงใหญ่ไปสำหรับการใช้งานทั่วๆ ไปที่ไม่ใช่ใช้เป็นต้นฉบับสำหรับงานกราฟฟิค/ publishing อื่นๆ

อย่างแรกผมลองหาทางเปลี่ยนจาก dot หรือ point ให้เป็น line หรือต้องการให้วาดเป็นเส้น floodway แทนที่จะวาดเป็นจุดๆ ตามค่าพิกัด

ในที่สุดผมก็พบว่าแทนที่จะใช้ plot() ก็ให้ใช้ lines() แทนใน layer ของ floodway

คำสั่งที่ใช้ในการ plot จะเป็น

> plot(TH.map)
> lines(test1.67.dat@coords, col="blue")
> lines(test1.312.dat@coords, col="red")

คงจำกันได้นะครับว่า test1.67.dat@cords และ test1.312.dat@cords นั้นเป็นการดึงเอาข้อมูลพิกัด X Y จาก slot coordinates ในวัตถุ test1.67.dat และ test1.312.dat (ที่มี class เป็น SpatialPointsDataFrame) ตามลำดับ

ถ้าใส่เฉพาะ lines(test1.312.dat, col="red") หรือ lines(test1.312.dat, col="red") แบบนี้ไม่ได้ครับจะมีข้อความแสดงความผิดพลาดมาแทน

> lines(test1.312.dat, col="red")
Error in as.double(y) :
  cannot coerce type 'S4' to vector of type 'double'

S4 นี่คือ S version 4 method ข้ามๆ ไปนะครับ

floodway ทั้งสองสายก็จะถูกลากเป็นเส้นแล้วครับ

อย่างที่ ๒ ที่หาทางคือต้องการบันทึกรูปที่วาดได้จากการ plot floodway กับแผนที่ประเทศไทยให้อยู่ในรูปแบบที่ควบคุมคุณภาพได้

เอาไว้มาเล่าให้ฟังอีกรอบนะครับ

เราเอง

ปล. แชร์ยังเฟือนเหมียนเดิมครับ ว่าจะอัพรูปใส่บันทึกซะหน่อยดันหมุนติ้วๆ เช่นเดิม เลยต้องใช้การอ้างอิงแบบที่เขียนไว้ในบันทึกก่อนหน้านี้ครับ

หมวดหมู่บันทึก: บริการวิชาการ
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 04 เมษายน 2555 00:10 แก้ไข: 04 เมษายน 2555 15:53 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ: Ico24 DaDa, Ico24 ServiceMan, และ 4 คนอื่น.
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

ไม่มีความเห็น

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 3.215.182.36
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ