ข้อสังเกตการนำเข้า Shapefile ผ่าน pgAdmin III ร่วมกับการสร้าง SLD ผ่านโปรแกรม uDig

ปัญหาที่พบจากการใช้งาน postgreSQL/PostGIS ร่วมกับไฟล์ SLD (Styled Layer Descriptor) ที่สร้างจากโปรแกรม uDig บน GeoServer ก็คือ ชื่อฟิลด์ไม่เหมือนกัน (ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) และ GeoServer แจ้ง Error ขึ้นมา ทำให้ชั้นข้อมูล (Layers) ไม่สามารถสร้างเป็น WMS ได้

Error

การแก้ไขปัญหาก็มีนิดเดียวคือ เปลี่ยนชื่อฟิลด์ใน SLD ที่ Styles ให้เหมือนกับฟิลด์ของ Layers ก็เสร็จแล้ว

ฟิลด์ของ Layers
Layers Fields

ฟิลด์ใน SLD
SLD Fields

แต่สิ่งที่อยากจะมานำเสนอไม่ได้มีเฉพาะวิธีการแก้ไขปัญหาเท่านั้น แต่อยากให้ทราบถึงว่าทำไมชื่อฟิลด์เหมือนกันแต่ต่างกันที่ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ถึงทำงานร่วมกันไม่ได้ มันเกิดขึ้นได้ยังไง เกิดขึ้นที่ขั้นตอนไหน ทั้งๆ ที่ก็สร้างและนำเข้ามาจาก Shapefile เดียวกัน

concept

จากภาพด้านบนสามารถอธิบายได้ว่า
1. การจะสร้าง OWS (OGC Web Service = WMS + WFS + WCS + SOS) ส่วนใหญ่รู้จักกันดี คือ WMS จะเริ่มต้นจากการนำเข้าข้อมูล Shapefile ผ่านโปรแกรม PostgreSQL/PostGIS หลังจากนั้นจะทำการสร้าง Layers + SLD ในโปรแกรม GeoServer เพื่อนำมาสร้างเป็น WMS ในที่สุด

Field ของ Shapefile มีทั้งตัวเล็กและตัวใหญ่
Field Name

2. วิธีการที่อธิบายไว้ในข้อที่ 1 คนส่วนใหญ่ (มั้ง) จะเลือกทำตามเส้นทางหมายเลข 1 (สีฟ้า) และตามด้วยหมายเลข 2 (สีส้ม) ซึ่งเป็นวิธีการที่ง่ายและสะดวกที่สุด นั่นคือ

2.1 เปิดโปรแกรม PostgreSQL/PostGIS เลือกนำเข้า Shapefile ผ่าน PostGIS Shapefile and DBF loader ซึ่งการทำงานในส่วนนี้ ตาม Default ของโปรแกรมแล้วจะไม่เช็คเครื่องหมายถูกที่ Preserve Case of Column Names นั่นหมายความว่า ทุก Shapefile ที่มีการนำเข้าไป Field จะกลายเป็น Font ตัวเล็กหมด

Preserve Case

ืUnCheck Preserve

2.2 Start GeoServer และเปิด GeoServer Web Admin Page กำหนด Workspaces, Store (PostGIS), และ Layers ตามปกติ ซึ่งในขั้นตอนนี้ Layers ที่ได้จะมี Field เป็น Font ตัวเล็กทั้งหมด เนื่องจากเรานำเข้ามาจากข้อ 2.1

2.3 เปิดโปรแกรม uDig กำหนด Style Editor ให้กับข้อมูล Shapefile ที่ใช้ในการนำเข้าตามข้อ 2.1 และ Export เป็นไฟล์ SLD ออกมา

uDig-SLD

2.4 ใน GeoServer สร้าง New Style และนำเข้าไฟล์ SLD จาก uDig โดยจะทำการแก้ไขชื่อ Field ตัวพิมพ์ใหญ่ (มาจาก Shapefile) ให้เป็นตัวพิมพ์เล็ก (มาจาก PostGIS) เหมือนกัน

2.5 เลือก Layers และกำหนด SLD ที่ได้สร้างขึ้นตามข้อ 2.4

2.6 เปิด Layer Preview ก็จะได้ WMS ไปใช้งานตามต้องการ

3. อีกหนึ่งทางเลือกสำหรับอีกหลายคน จะเลือกทำวิธีการตามหมายเลข 3 (สีฟ้า เส้นปะ) ก่อน และตามด้วยหมายเลข 2 (สีส้ม) ถ้าเราทราบถึงความหมายของ Preserve Case of Column Names เพราะสุดท้ายตอนที่ทำไฟล์ SLD จาก uDig มาใส่ให้กับ Layers ใน GeoServer จะได้ไม่ต้องมาเปลี่ยนชื่อ Field ให้เป็นตัวพิมพ์เล็กหมด เนื่องจากสามารถใช้งานได้ทันที

บางคนอาจจะไม่ได้สนใจมาก เนื่องจากการเปลี่ยนแค่ชื่อ Field จากตัวใหญ่เป็นตัวเล็ก เท่านั้นไม่ได้ยุ่งยากอะไร ก็จริงครับ ไม่ได้ยุ่งยากอะไร แต่บางทีการกำหนด SLD มีการกำหนด Class จำนวนมากๆ ต้องมาแก้ไขทีละตัวและหลาย Layers ซึ่งวิธีการในข้อ 3 นี้จะช่วยให้ทำงานได้สะดวกขึ้นและเร็วขึ้น แค่เช็คเครื่องหมายที่ Preserve Case of Column Names เท่านั้น

4. ข้อสังเกตอีกอันหนึ่ง ก็คือ การเขียนโค๊ด SLD ที่ได้จากโปรแกรม uDig และ Cookbook ของ GeoServer มีรูปแบบการเขียนไม่เหมือนกันแต่สามารถนำมาใช้แทนกันได้ ขึ้นอยู่ความสะดวกและความต้องการของผู้ใช้งาน ซึ่งผลลัพธ์ที่ได้จาก uDig และ Cookbook ตอนที่แสดงเป็น WMS แล้วก็เหมือนกันเลย

uDig-SLD
uDig-SLD

GeoServer-SLD
GeoServer-SLD

WMS จาก uDig-SLD และ GeoServer-SLD
WMS

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s