ST_Difference

มิถุนายน 24, 2008

           เคยติดค้างผู้เข้าอบรม Spatial database ท่านหนึ่งในเรื่องของฟังก์ชั่น clip  โมดูล Geoprocessing ใน postgis โดยพี่ท่านนี้ถามว่าถ้าต้องการ clip polygon โดยใช้ฟังก์ชั่นใน postgis ทำได้ไหมทำได้อย่างไร? ยอมรับจริงๆครับเมื่อตอนที่ท่านถามผมก็ตอบไม่ได้เพราะไม่เคยลองวันนี้หาเจอแล้วครับ ใน spatial database ผ่าน interface ST_ ของ OGC เรียกฟังก์ชั่นนี้ว่า diffence คือการจำแนกความต่างของ Geometry Object ทั้งสอง มาลองดูคำสั่งนะครับ

          ST_Difference(geom1,geom2) โดยข้อมูล Geometry data ได้ก็จะเป็นส่วนที่ อยู่ใน geom1 แต่ไม่อยู่ใน geom2 ซึ่ง ผลลัพธ์ของ  ST_Difference(geom1,geom2) จะไม่เท่ากับ ST_Difference(geom2,geom1) ทดลองเขียน SQL เพื่อประมวลผลข้อมูล โดยผมจะสร้างโพลีกอนวงกลม A และ วงกลม B เพื่อใช้ในการประมวลผล

SELECT 1 As gid, g.geom1, g.geom2, ST_Difference(g.geom1, g.geom2) As diff_geom12,
ST_Difference(g.geom2, g.geom1) As diff_geom21
FROM (SELECT ST_Buffer(ST_MakePoint(9,3),2) As geom1,ST_Buffer(ST_MakePoint(10,2),1) As geom2) As g;

         ผลลัพธ์ที่ได้ก็จะเป็นข้อมูล WKB จากการประมวลผลครับในรูปของตาราง ถ้าอยากเห็น Geometry Feature ในรูปแบบเวกเตอร์ก็ลองใช้ QGIS เรียกเพื่อเรียกดูได้ครับ

ภาพข้อมูล Geometry Object ทั้งสอง(A,B)

ข้อมูล Geometry ผลลัพธ์จาก ST_Difference(geom_A, geom_B)

ข้อมูล Geometry ผลลัพธ์จาก ST_Difference(geom_B, geom_A)

 

 

 


MapViewer on Microsoft SQL Server 2008

มิถุนายน 6, 2008

          หลังจากที่ป่วยด้วยอาการโรคกระเพาะมาสองวัน พอกลับมาอ่านเมลล่าสุดก็ได้ป๊ะกับข่าวใหม่ล่าสุดของ Microsoft SQL Server 2008 Database ที่นอกจากจะมีฟีเจอร์สำหรับการจัดการข้อมูลเชิงพื้นที่แล้ว ยังมีส่วนของ MapViewer ติดมาให้ด้วย โดยส่วนนี้น่าจะเป็นสิ่งที่ผมรู้สึกว่า มันแตกต่างและเหนือกว่า Postgresql และ Mysql ที่ใช้อยู่ ปกติในส่วนนี้ผมต้องเขียนโปรแกรม MapViewer เอง แต่สำหรับ SQL Server 2008 มีมาให้เลย

          สิ่งหนึ่งที่มันสะท้อนออกมาคือ SQL Server 2008 มีคุณสมบัติใกล้เคียงกับซอฟท์แวร์ GIS เข้ามาแล้ว โดยมีจุดเด่นเรื่องการจัดการข้อมูล แน่นอนว่าฟังก์ชั่นการประมวลผลเชิงพื้นที่อาจจะยังไม่มากเท่าแต่ก็เพียงพอกับการทำงานทั่วไปเลยทีเดียว ลองมาดูรูปและการทำงานกันนะครับ

         step 1 : พิมพ์คำสั่ง SQL เข้าไป

select id, shapegeog
from zipcodes
where id like ‘981%’ 

         step 2 : ดูผลลัพธ์ในรูปแบบตาราง

        step 3 : ลองดู Map จากข้อมูล Geometry ที่อยู่ในรูปแบบ wkb ในคอลัมภ์ shapegeo

 

 

อ้างอิงมาจาก http://blogs.msdn.com/isaac/archive/2008/06/02/eye-candy-of-the-highest-order.aspx

 


Review Microsoft SQL Server 2008 Spatial Data

เมษายน 6, 2008

       ทราบข่าวมาสักพักแล้ว เกี่ยวกับการที่ Microsoft SQL Server 2008 มีการเพิ่มฟีเจอร์การจัดการข้อมูลเชิงพื้นที่( Spatial Data) เข้าไป แต่วันนี้ผมเพิ่งจะได้อ่าน review จากคุณ JasonFollas ที่ได้เขียนอธิบายฟีเจอร์การทำงานของ Spatial Data Module ใน Microsoft SQL Server 2008 เลยอยากนำมาแนะนำให้อ่านกัน โดยคุณ JasonFollas ได้เขียนบทความทั้งหมดเป็น 4 ตอนครับค่อนข้างละเอียด ท่านที่ยังไม่เคยใช้ Spatial Database มาก่อนก็สามารถได้ เนื่องจากบทความเป็นภาษาอังกฤษค่อนข้างยาว ประกอบกับช่วงนี้ผมงานยุ่งขี้เกียจแปล เลยขอสรุปใจความมาเล่าสู่กันฟังแทนการเขียนเนื้อหาทั้งหมด แต่สำหรับท่านที่ต้องใช้ Microsoft SQL Server 2008 ในการเก็บข้อมูล Spatial Data แนะนำให้อ่านโดยละเอียดครับ เพราะมีประโยชน์มากสำหรับท่านที่ต้องการเริ่มต้นใช้งาน

       หัวข้อแรก SQL Server 2008: Spatial Data, Part 1  เขียนเกี่ยวกับเรื่องทั่วไป ไฮไลต์อยู่ที่ Spatial Data Type โดย Microsoft SQL Server 2008 แบ่งชนิดของข้อมูลเชิงพื้นที่เป็นสองกลุ่มคือ Geometry (flat Earth model) และ Geography (ellipsoidal model) ขยายความก็คือพวก Geometry ได้แก่ข้อมูลเรขาคณิตทั่วไปประเภท 2มิติใน Spatial Domain เช่นการจัดการข้อมูลเชิงตำแหน่งในอาคารหรือใน Space ทั่วไปส่วน Geography คือข้อมูลที่อ้างอิงกับโลกขึ้นกับ Map Projection ต่างๆ ตบท้ายในพาร์ทนี้ก็พูดถึง Spatial Reference System ในพาร์ทนี้ท่านที่ไม่มีพื้นฐานทาง Mapping หรือภูมิศาสตร์ ควรต้องหาความรู้เพิ่มเติม(เพราะในเอกสารอธิบายแบบคราวๆ) เพื่อจะได้เข้าใจวิธีการจัดการข้อมูลเชิงพื้นที่

        หัวข้อที่สองเริ่มเข้มข้น เพราะกล่าวถึง Standard เนื่องจาก Microsoft ก็เป็นสมาชิกใน OGC ดังนั้น Microsoft SQL Server 2008 ก็จะมีการ Implement ในส่วนของ Simple Feature Protocol ของ OGC (กลุ่มพวก interface ST_ ทั้งหลาย) เช่นเดียวกับ Oracle และ Postgresql เรื่องของ Simple Feature ก็ว่ากันยาวแต่มีประโยชน์ครับ ลองเข้าไปอ่านรายละเอียดได้

- OpenGIS Implementation Specification for Geographic information - Simple feature access - Part 1: Common architecture

- OpenGIS Implementation Specification for Geographic information - Simple feature access - Part 2: SQL option

นอกจากนี้ยังพูดถึงเรื่องของ Specific Types of Spatial Data ทั้งสี่ชนิดคือ POINT, LINESTRING, Polygon และ COLLECTIONS โดยมีการกล่าวถึงวิธีการจัดเก็บข้อมูลเรขาคณิตในฐานข้อมูล ที่ผมติดใจและอยากทดสอบคือเรื่องของการสามารถจัดเก็บข้อมูลเรขาคณิตหลายๆชนิด (Point, Line, Polygon) ลงในคอลัมภ์เดียวกันได้ ท้ายสุดก็แสดงการเข้ารหัสข้อมูลแบบ WKT (Well Know Text) ให้ดู ซึ่งใน Microsoft SQL Server 2008 สามารถรองรับฟอร์แมท์ต่างๆได้แก่ Well-Known Text (WKT), Well-Known Binary (WKB), and Geography Markup Language (GML)

POLYGON((0 0, 0 10, 10 10, 10 0, 0 0), (1 1, 4 5, 4 1, 1 1)) ตัวอย่าง Polygon ในรูปแบบ WKT

      

         หัวข้อที่สาม ค่อนข้างจะไปทางโปรแกรมแกรมมิ่ง กล่าวถึงการทำงานกับ User Defined Types (UDT) โดยใช้ภาษา C# และ VB.NET คล้ายๆกับ PL/SQL ใน Postgresql แต่ดูแล้วน่าจะเขียนง่ายกว่า เพราะว่ามี Debug ที่คอยช่วยหาที่ผิดพลาด โค้ดข้างล่างแสดงตัวอย่างการประกาศตัวแปรและเรียกใช้งานฟังก์ชั่นเพื่อประมวลผลข้อมูล

DECLARE @g Geometry

SET @g = Geometry::STLineFromText(’LINESTRING(0 0, 10 10, 21 2)’,0)

PRINT @g.STLength() — Result: 27.7436

           หัวข้อที่สี่ (สุดท้าย) กล่าวถึงฟังก์ชั่นต่างๆที่เกี่ยวกับการประมวลผลและการวิเคราะห์ข้อมูลเชิงพื้นที่ใน Microsoft SQL Server 2008 ได้แก่ STEnvelope, STExteriorRing, STInteriorRingN, STBuffer เป็นต้น ตอกย้ำแนวคิดที่ว่า Spatial database ไม่ใช่แค่ storage เพียงอย่างเดียว

           เข้าไปอ่านบทความฉบับเต็มของคุณ JasonFollas ได้ที่ http://mandown.co.nz/microsoft/microsoft-sql-server-2008-spatial-data/ 

 

 


MapInfo to Postgis

มีนาคม 18, 2008

     เมื่อคืนผมนั่งหาวิธีการโหลดข้อมูล Mapinfo (*.tab) ขนาดใหญ่เข้าสู่ฐานข้อมูล Postgis ทดสอบหลายวิธีทั้งการแปลงข้อมูลเป็น text file และการใช้ xml ไปๆมาก็ไม่รอด เพราะจำนวนข้อมูลฟีเจอร์ที่มาก(300000 record) ประกอบกับ attribute ต่างๆ ทำให้เครื่องแฮงค์ไปหลายรอบ จนแล้วจนรอดก็กลับมาใช้ ogr ในการโหลดข้อมูลเข้าสู่ฐานข้อมูลอยู่ดี ที่ไม่ตัดสินใจใช้ตั้งแต่ตอนแรกเพราะว่า ogr ก็ยังมีปัญหาเรื่อง encoding ภาษาไทยอยู่ ทำให้เมื่อสามารถแปลงข้อมูลจาก tab มาเป็น postgis geometry table ได้แล้วก็ต้องมาปวดหัวกับการแก้ภาษาไทยอีกรอบ วันนี้เลยอยากเขียนวิธีการโหลด .tab เก็บไว้เพื่อว่ามีท่านใดกำลังหามอง solution ที่เกี่ยวกับเรื่องนี้อยู่

 ogr2ogr -f “PostgreSQL” PG:“host=myhost user=myusername dbname=mydbname password=mypassword” mytabfile.tab -nln newtablename -select columnName

 pg_idea2.jpg

 


MsSqlSpatial - Spatial Extensions for SQL Server 2005

มีนาคม 10, 2008

      มี email จากพี่คนหนึ่งเขียนมาถามเรื่องเกี่ยวกับการจัดเก็บข้อมูล GIS ประเภทเวกเตอร์ลงในฐานข้อมูล SQL Server โดยต้องการจะจัดการข้อมูลเฉพาะในฐานข้อมูลอย่างเดียวไม่อยากแยกเก็บข้อมูล GIS ใน shapefile ถ้าเป็นเวอร์ชั่น 2008 ปัญหานี้คงไม่มีเพราะว่าได้ support Geometry Data ไปแล้ว แต่ใน SQL Server 2005 นั้นยังไม่ support แน่นอนว่าทางเลือกแรกที่หลายๆท่านใช้ก็คงเป็น ArcSDE แต่ยังมีอีกหนึ่งทางเลือกครับคือใช้ MsSqlSpatial 
      MsSqlSpatial เป็น .Net Opensource ที่พัฒนาจาก Opensource อื่นๆเช่น sharpmap,nettopology และที่สำคัญยังเป็นส่วนจัดการการเชื่อมต่อกับ SQL Server ในซอฟท์แวร์ GIS อื่นๆ เช่น UDIG และ QGIS นอกจากนี้ยังสนับสนุนมาตรฐาน OGC Simple Features Specification for SQL Revision 1.1 อีกด้วยครับ ท่านที่สนใจลองดาวน์โหลดมาใช้งานที่ http://www.codeplex.com/MsSqlSpatial 


Spatial Database for android

กุมภาพันธ์ 7, 2008

           ช่วงนี้เป็นช่วงที่ผมกำลังเริ่มต้นศึกษาเกี่ยวกับ android อยู่ครับ ทำให้ช่วงนี้ได้พบ ได้เจออะไรใหม่ๆที่เกี่ยวข้องกับ android เยอะขึ้น นอกจากนี้ก็ยังได้รู้จักแนวคิดของการนำเอาข้อมูลเชิงพื้นที่ต่างๆไปใช้ในรูปแบบของ LBS มันเป็นเรื่องใหม่สำหรับผม แต่ไม่นานกลายเป็นเรื่องที่สนุก คล้ายกับการได้แลกเปลี่ยนมุมมอง การเปิดแนวคิดใหม่ๆ ผมเชื่อว่าการเรียนรู้เกี่ยวกับ geoinfomatic ในเมืองไทยคงไม่มีที่ใดสอนถึง LBS, GPS Navigation, GSM Location ในรายละเอียด แต่ท่านสามารถเรียนรู้เรื่องราวเหล่านี้ได้จาก internet มี Google เป็น ห้องสมุด และมี Web Bord หรือ Forum เป็นห้องสำหรับสนทนาและซักถามครับ สิ่งเหล่านี้จะเข้ามาสู่การดำเนินชีวิตของเราในไม่ช้า ด้วยแนวคิดที่ว่าเทคโนโลยีจะมาช่วยให้มนุษย์ดำรงชีวิตได้ง่ายขึ้น

           วันนี้นำเอาซอฟท์แวร์ Spatial Database ที่ทำงานบน Android มาแนะนำกันครับ (สำหรับท่านที่ศึกษาเรื่องนี้จะได้นำไปใช้ประโยชน์) McObject ได้นำเสนอซอฟท์แวร์ Perst API ที่พัฒนาด้วย java technology บน SQL lite ที่มีอยู่บน android โดยมีการรวมเอา R-tree indexes ซึ่งสามารถใช้ในการจัดการและสืบค้นข้อมูลเชิงตำแหน่ง จุดเด่นคือ เล็กกระทัดรัด, ทำงานได้เร็ว และใช้งานได้ง่าย

           โปรเจคนี้เป็น Opensource ในอนาคตครับและจะมีการพัฒนาต่อยอดสำหรับการทำงานขั้นสูง โดยจะแจกจ่ายในลักษณะโปรแกรมฟรีแวร์ต่อไป ท่านที่สนใจสามารถไปดาวโหลดซอสโค้ดได้ที่ http://www.mcobject.com/download_form.php?id=66

 


PostGIS 1.3.2 Release

ธันวาคม 27, 2007

    ประมาณเดือนที่แล้ว PostGIS 1.3.2 ได้ถูกปล่อยออกมาให้ผู้ใช้อย่างเป็นทางการ สำหรับเวอร์ชั่น 1.3.2 นี้มีฟังก์ชั่นใหม่ๆที่น่าสนใจดังต่อไปนี้ครับ

- พัฒนาในส่วนของรูปแบบข้อมูลประเภท TIGER geocoder
- ปรับ Bug ในฟังก์ชั่น ST_EndPoint()
- ปรับปรุง ST_AsGML() โดยเพิ่มความสามารถในการสนับสนุน GML3
- ปรับแก้ Bug ในฟังก์ชั่น ST_Envelope()
- แก้ JDBC build มาใช้ Ant สำหรับ build 
- ปรับแก้ให้โปรแกรมสนับสนุน OS/X มาขึ้น
- ปรับแก้ WKB parser

    ท่านที่สนใจเวอร์ชั่นใหม่สามารถไปดาว์โหลดมาใช้ได้จาก

http://postgis.refractions.net/download/


Oracel Spatial 11g

ธันวาคม 17, 2007

     Directions Magazine ได้ทำการรีวิว Oracel Spatial 11g เวอร์ชั่นล่าสุดเอาไว้ โดยในเวอร์ชั่นนี้มีการพัฒนาฟังก์ชั่นการประมวลผลใหม่ออกมาหลายตัว ที่กล่าวขวัญถึงก็คงหนีไม่พ้นเรื่องของการจัดการและประมวลผลข้อมูล 3D บนฐานข้อมูล โดยรองรับการนำไปใช้ในด้านธุรกิจ,City modeling (รองรับ CityGML)และเรื่องของ Virtual Reality solutions และนอกจากนี้ยังรองรับข้อมูล 3D จำนวนมหาศาลพวก point clouds สำหรับข้อมูลจาก LIDAR และ Laser Scan (SDO_Point_Cloud) และยังมีฟังก์ชั่นจัดการข้อมูล surface model ประเภท TIN (SDO_TIN ) อีกด้วย

      ทางด้าน web service ในเวอร์ชั่นนี้ก็มีการพัฒนาให้รองรับการทำงานบน Open Geospatial Consortium’s Web Map Service (WMS 1.1), Web Feature Service (WFS) version 1.1 และ Catalog Services Web (CSW 2.0) specifications.

        นอกจากนี้ยังมีการพัฒนาฟังก์ชั่นสำหรับการประมวลผลและการจัดการในส่วนของข้อมูลราสเตอร์ต่างๆ เช่น Union/merging of multiple GeoRaster objects or multiple layers ,Statistical analysis functions และอื่นๆ ทางด้าน Network Data Model ก็มีการเพิ่มฟังก์ชั่นการวิเคราะห์ข้อมูลเช่น Shortest path ,Nearest neighbors ,Within cost ,Reachable and reaching nodes,Hierarchical shortest path  เป็นต้น

        อ่านรายละเอียดเพิ่มเติมที่ http://www.directionsmag.com/article.php?article_id=2427&trv=1

    


โอ้ละหนอ…. MYSQL

พฤศจิกายน 13, 2007

      ปัจจุบัน geodatabase กลายเป็นรูปแบบการจัดเก็บข้อมูลที่กำลังได้รับความนิยมอย่างมาก โดยเฉพาะองค์กรที่มีการใช้งานข้อมูลจากผู้ใช้จำนวนมากๆ ประกอบกับความสะดวกในการบริหารจัดการข้อมูล หลายองค์กรมีการใช้ฐานข้อมูลเช่น ORCALE ,POSTGRESQL ,MYSQL และ SQLSERVER ในการบริหารจัดการข้อมูลประเภทเอกสารและรูปภาพกันอยู่แล้ว จึงเป็นเรื่องที่ไม่ยากสำหรับการเริ่มต้น ปรับเปลี่ยนมาใช้ databse ในการเก็บข้อมูลเชิงพื้นที่ ทั้งเวกเตอร์และราสเตอร์

       สำหรับหลายๆท่านที่ยังไม่รู้จัก ผมขออธิบายคราวๆก่อนว่า geospatial database นั้นคือการนำเอาข้อมูลเชิงพื้นที่จัดเก็บลงในฐานข้อมูลเชิงสัมพันธ์ที่มีความสามารถและฟังก์ชันการจัดการข้อมูลเชิงพื้นที่ กล่าวคือ มีการจัดเก็บข้อมูลเชิงพื้นที่เป็น data type ชนิดหนึ่ง และสามารถสืบค้น วิเคราะห์ ประมวลผลข้อมูลเชิงพื้นที่ได้ โดยเหมาะกับข้อมูลขนาดใหญ่ และต้องรองรับการใช้งานของผู้ใช้จำนวนมาก ทั้งการเรียกดู การแก้ไขข้อมูล ซึ่งในปัจจุบันบริษัทและหน่วยงานผู้พัฒนาซอฟท์แวร์จัดการฐานข้อมูล อย่าง ORCALE ,POSTGRESQL ,MYSQL และ SQLSERVER ก็ได้มีการเพิ่มฟีเจอร์นี้ลงในโปรแกรม เกือบทั้งหมดแล้ว

รูปจาก http://slashgeo.org/

       ที่วันนี้ผมนำเรื่องนี้มาเขียน เพราะว่ามีพี่ท่านหนึ่งถามมาว่า MySQL มีฟีเจอร์ที่เกี่ยวกับการจัดการข้อมูลเชิงพื้นที่บ้างไหม คำตอบคือมีครับ แต่อาจจะยังไม่ดีหรือเก่งเท่า POSTGIS ของ POSTGRESQL ซึ่ง ในฟีเจอร์นี้ต้องติดตั้งเพิ่มเติมเอง โดยปัจจุบันสามารถรองรับการเข้ารหัสข้อมูลทั้งแบบ wkt และ wkb มีฟังก์ชั่นในการประมวลผลข้อมูลได้แก่

  • BUFFER(g1 geometry, d numeric)
  • DIFFERENCE(g1 geometry, g2 geometry)
  • DISTANCE(g1 geometry, g2 geometry)
  • INTERSECTION(g1 geometry, g2 geometry)
  • SYM_DIFFERENCE(g1 geometry, g2 geometry)
  • UNION(g1 geometry, g2 geometry)

      และยังมีแนวโน้มที่จะพัฒนาฟังก์ชั่นอื่นๆ เพิ่มขึ้นตามมาอีกมากมายครับ ด้วยแนวคิดที่มองว่า geodatabase ไม่ใช่แค่เพียง storage เท่านั้น โดยดูตัวอย่างได้จากฟังก์ชั่นการวิเคราะห์ในฐานข้อมูลขนาดใหญ่ เช่น ORACLE หรือ POSTGRESQL ก็มีขีดความสามารถในการวิเคราะห์ข้อมูลมาก เช่น การทำ routing , การทำ geosatistic และอื่นๆ สำหรับผมต้องออกตัวก่อนว่าไม่ใช้ผู้เชี่ยวชาญ MYSQL เพราะผมใช้ POSTGRESQL +POSTGIS เป็นหลักครับ

ดาว์โหลด MySQL GeoSpatial Feature ได้ที่ ftp://ftp.mysql.com/pub/mysql/download/mysql-5.1.23-beta-GIS/

อ่านรายละเอียดเพิ่มเติม เกี่ยวกับ MYSQL GeoSpatial ที่ http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html