บทความ

การนำเข้า shapefile เข้า postgresql

การนำเข้าข้อมูลจาก shape file ไปยังฐานข้อมูลนั้น ถ้ามีการกำหนด encoding ของฐานข้อมูลเป็น utf8 ส่วนใน shape fiile จะเป็น ascii ซึ่งถ้ามีการนำเข้าไปยังฐานข้อมูลภาษาไทยจะไม่ถูกต้อง จึงจำเป็นต้องมีการกำหนดรายละเอียดก่อนที่จะใช้คำสั่งในการนำเข้าข้อมูล โดยการกำหนด set PGCLIENTENCDING=WIN874 set CLIENTENCODING=WIN874 สำหรับการกำหนด Encoding จะกำหนดใน Option ของคำสั่งเลยก็ได้ เช่น shp2pgsql -s 32647 -I -W "WINDOWS-874" "location shape file and filename" schema.table | psql -U username -d database_name แต่การนำข้อมูลออกไปนั้นจะต้องกำหนดโดยการระบุด้านบนอย่างเดียวจะไม่มี option มาให้เมื่อกำหนด environment เรียบร้อยแล้วจึงทำการสั่งให้ส่งออกข้อมูลเป็น shape file ตามที่ต้องการ เช่น pgsql2shp -u postgres -P password -p port_number -h host_ip -f location_and_filename database_name schema.table

MS4W support ECW

ms4w version ใหม่จะไม่มีส่วนของการสนับสนุนการแสดงผลข้อมูลภาพ ECW จำเป็นต้องทำการ download แฟ้มข้อมูลใหม่ของ gdal มาโดยสามารถทำการ download ได้ที่ www.gdal.org เมื่อได้แฟ้มข้อมูลมาแล้วจะต้องทำการนำแฟ้มข้อมูลที่ได้มาวางไว้ในตำแหน่งดังต่อไปนี้ /ms4w/gdalplugins/ gdal_ECW_JP2ECW.dll /ms4w/apache/cgi-bin/ libecwj2.dll ใน version window บางตัวอาจะไม่มีแฟ้มข้อมูลดังนี้ ให้หามาใส่แล้วแต่เวอร์ชั่นของ mapserver ที่ทำการ compile ถ้าทำใน .net2010 จะต้องใช้ msvcr100.dll , msvcp100.dll เป็นต้น เมื่อได้แล้วในส่วนของแมพไฟล์ก็เขียนเหมือนเดิมได้แล้ว

กำหนด Transition Effect

ในการแสดงผลภาพแผนที่ผ่าน Openlayers นั้น เมื่อเราเปลี่ยนมาตราฐานหรือการย่อ ขยายแผนที่ ภาพแผนที่ที่แสดงมันจะหายไปแล้วทำการดึงภาพแผนที่ใหม่มาแทนที่ อาจจะทำไม่ค่อยสวยในการแสดงผล ในส่วนของ Openlayers จะมีตัวเลือกในการทำให้การเปลี่ยนภาพแผนที่จากที่กำหนดเป็นมาตรฐานที่กล่าวมาแล้ว เป็นแบบการดึงภาพแผนที่ก่อนการกระทำมาแสดงก่อน เมื่อได้ภาพใหม่มาจึงนำภาพดังกล่าวมาแสดงแทน โดยเราสามารถจะกำหนดได้ 2 แนวทาง ดังนี้ 1. กำหนดใน layer โดยกำหนดแบบตายตัวใน library ของ Openlayer เลย โดยกำหนดในแฟ้มข้อมูล Openlayers/Layer.js /** * APIProperty: transitionEffect * {String} The transition effect to use when the map is panned or * zoomed. * * There are currently two supported values: * - *null* No transition effect (the default). * - *resize* Existing tiles are resized on zoom to provide a visual * effect of the zoom having taken place immediately. As the * new tiles become available, they are drawn over top of the * resized tiles. */ transitionEffect: ...

การกำหนด auto number สำหรับ oracle

ในการสร้างตารางข้อมูลในแต่ละฐานข้อมูลจะมีการกำหนดรายละเอียดของบางคอลัมน์ให้เป็นตัวเลขแบบให้ระบบกำหนดให้เพิ่มเองอัตโนมัติ ในส่วนของ Oracle ก็สามารถทำได้เช่นเดียวกัน โดยจะต้องดำเนินการดังนี้ เริ่มจากต้องทำการสร้าง sequence ที่ต้องการสำหรับตารางข้อมูลก่อน create sequence test_tab_seq_id minvalue 1 maxvalue 99999999 increment by 1; สร้างตารางข้อมูลและกำหนดให้มีการเรียกใช้ sequence ที่สร้างไว้ create table test_tab ( id integer not null, name varchar(50), primary key (id) ); สร้าง Trigger สำหรับให้มีการนำตัวเลขใน sequence ไปใช้งาน create or replace trigger test_tab_insert_id before insert on test_tab for each row when (new.id is null) begin select test_tab_seq_id.NEXTVAL into :new.id from dual; end; ...

การตัดภาพสำหรับแผนที่ล่วงหน้า

รูปภาพ
ในปัจจุบันในการแสดงภาพแผนที่นั้น จะเป็นการแสดงโดยการดึงรูปภาพมาแสดงแทนที่จะใช้ให้ server ทำการประมวลผลภาพแผนที่โดยการดึงข้อมูลที่เป็น vector มาแสดงโดยในบทความนี้จะกล่าวถึงโปรแกรมที่เป็นการตัดภาพล่วงหน้า โดยใช้โปรแกรมชื่อ Ka-Map ซึ่งสามารถ download ได้ที่ www.maptool.org ซึ่งเมื่อได้โปรแกรมมาแล้วสามารถนำไปวางไว้ใน MS4W (MapServer for Windows) ได้เลย เมื่อวางแล้วจะต้องทำการแก้ไข configuration ของโปรแกรม โดยไฟล์ configuration จะอยู่ที่ include/config.php ซึ่งสิ่งที่เราต้องแก้ไขคื่อ ส่วนของ mapfile ที่อ้างอิง ในตัวแปร $aszGMap โดยในสว่นของ path จะต้องกำหนดตามตำแหน่งของ mapfile ที่ต้องการ และในส่วนของ scales ก็ต้องกำหนด โดยการกำหนดนั้น ถ้าเราต้องการนำภาพที่ได้ไปทำการซ้อนทับกับภาพแผนที่ของ google จำเป็นต้องกำหนด scales ตามมาตรฐานที่กำหนดไว้ โดยมาตรส่วนที่ใช้ตามมาตรฐานมีดังนี้ 443744272.7241,221872136.3621,110936068.181,55468034.0905,27734017.0453, 13867008.5226,6933504.2613,3466752.1307,1733376.0653,866688.0327,433344.0163, 216672.0082,108336.0041,54168.002,27084.001,13542.0005,6771.0003,3...

การพิมพ์ภาพแผนที่ผ่าน MapServer แบบสวยงาม

ใน version เก่าๆของ mapserver การพิมพ์เมื่อเราส่งไปพิมพ์ที่เครื่องพิมพ์ภาพที่ได้อาจจะไม่ค่อยสวย คือ ภาพจะแตก ซึ่งถ้ายิ่งพิมพ์ขนาดกระดาษที่ใหญ่ก็ยิ่งแตกไปกันใหญ่ ใน version mapserver ตั้งแต่ version 5.6 นั้นได้เพิ่มความสามารถในการพิมพ์ภาพแผนที่ โดยเราสามารถกำหนดการพิมพ์ให้สวยงามได้ โดยถ้าต้องการพิมพ์ภาพขนาด เท่า A4 ก็จะต้องทำการคำนวณขนาดของภาพที่ให้ mapserve ทำการสร้างให้ใหญ่กว่า 4 เท่าโดยประมาณ แล้วเมื่อเวลาพิมพ์ก็กำหนดขนาดเท่ากับ A4 ที่ต้องการ ก็จะได้ภาพที่มีความละเอียดในการพิมพ์ออกทางเครื่องพิมพ์ โดยจะต้องกำหนดใน mapfile เช่น RESOLUTION 300 SIZE 1667 1250 MAXSIZE 6144 ซึ่งตรง SIZE จะต้องคำนวณโดยการนำค่า 4.1667 ไปคูณ เช่น ถ้าต้องการภาพขนาด 400*300 จะได้ 400 * 4.1667 = 1666.68 300 * 4.1667 = 1250.01 ซึ่งส่วนของ MAXSIZE ก็จำเป็นถ้าขนาดที่คำนวณได้มากกว่า 6144 ก็จะต้องเปลี่ยนขนาดของ Maxsize ด้วย โดยเราอาจจะใช้ php ในการไปกำหนดเวลาพิมพ์ก็ได้โดยใช้ php_mapscript ช่วย หรือถ้าขนาดของเราที่ต้องการพิมพ์กำหนดแน่นอนไม่เปลี่ยนแปลงก็กำหนดใน mapfile เลยก็ย่อมได้

เบื้องต้นกับ Openlayers

ในการพัฒนาโปรแกรมบริการด้านแผนที่ผ่านเว็บนั้น ถ้าเราต้องการนำข้อมูลแผนที่จากหลายๆแหล่ง เช่น googlemap , bing , yahoo มาเป็นพื้นหลังของแผนที่เรา เราสามารถใช้โปรแกรม Openlayers ในการพัฒนาต่อยอดเพื่อเพิ่มความสามารถของโปรแกรมเราได้ ซึ่งในโปรแกรม Openlayers นั้นจะมีตัวอย่างค่อนข้างจะครบถ้วน ทั้งจากการเรียกข้อมูล googlemap มาเป็นพื้นหลังหรือข้อมูลแผนที่อื่นๆ และการกำหนดตำแหน่งบนแผนที่ ซึ่งผู้พัฒนาสามารถเพิ่มความสามารถของโปรแกรมได้ตามที่ต้องการ ในที่นี้จะแสดงตัวอย่างเบื้องต้นสำหรับการเรียกข้อมูลแผนที่ googlemap มาแสดง โดยสามารถดูได้จาก http://www.openlayers.org ในการแสดงข้อมูลภาพแผนที่ของ Openlayers นั้นเราสามารถกำหนดการแสดงผลแบบ tile หรือ untile ได้ โดยกำหนดไว้ใน parameter ในการเรียกข้อมูลแผนที่มาแสดง ในการแสดงข้อมูลภาพที่เป็น tile นั้น โดยมาตราฐานใน Openlayers จะกำหนดการแสดงภาพไว้ค่อยข้างจะเยอะ ทำให้การแสดงภาพแผนที่อาจจะช้า เราอาจจะปรับการแสดงภาพแผนที่ โดยกำหนดใน layer/grid.js เพื่อให้การคำนวณในการดึงภาพมาแสดงน้อยลงได้ ในส่วนของ buffer โดยการกำหนดให้เป็น 1 ซึ่งค่ามาตาฐานจะกำหนดไว้ที่ 2 เ...