แสดงบทความที่มีป้ายกำกับ postgresql แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ postgresql แสดงบทความทั้งหมด

วันอังคารที่ 3 กุมภาพันธ์ พ.ศ. 2558

การนำเข้าข้อมูล Shape Files สู่ฐานข้อมูล PostgreSQL/PostGIS โดยใช้เครื่องมือ shp2pgsql

1. เข้าไปที่โฟลเดอร์ bin ==> CD C:\Program Files\PostgreSQL\9.4\bin



2. ทดสอบเครื่องมือ shp2pgsql โดยพิมพ์ shp2pgsql.exe ลงไป แล้ว Enter


3. นำเข้าข้อมูล Shapfile เข้าไปดังภาพ
shp2pgsql -I -s 32647 -W "TIS-620" province.shp public.province| psql -h myserver -d mydb -U myuser

4. นำเข้าสำเร็จ


5. ผลที่ได้




วันศุกร์ที่ 8 สิงหาคม พ.ศ. 2557

ทดสอบการใช้งาน pgRouting เบื้องต้น

1. pgRouting คืออะไร ทำงานยังไง
        pgRouting is a free, open-source project maintained by PostLBS, which provides core tools for Location Based Services (LBS) as Open Source Software (OSS). pgRouting adds routing and other network analysis functionality. A predecessor of pgRouting – pgDijkstra, written by Sylvain Pasche from Camptocamp, was later extended by Orkney and renamed to pgRouting. The project is now supported and maintained by Georepublic, iMaptools and a broad user community.
 

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

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

  ปัจจุบัน pgRouting ได้พัฒนามาเป็น version 2.0 จากเดิม 1.5 และมีฟังก์ชั่นต่างๆเพิ่มขึ้นมามากมาย ดังที่แสดงอยู่ข้างล่าง
  • All Pairs Shortest Path, Johnson’s Algorithm [1]
  • All Pairs Shortest Path, Floyd-Warshall Algorithm [1]
  • Shortest Path A*
  • Bi-directional Dijkstra Shortest Path [1]
  • Bi-directional A* Shortest Path [1]
  • Shortest Path Dijkstra
  • Driving Distance
  • K-Shortest Path, Multiple Alternative Paths [1]
  • K-Dijkstra, One to Many Shortest Path [1]
  • Traveling Sales Person
  • Turn Restriction Shortest Path (TRSP) [1]
  • Shortest Path Shooting Star [2


[1] ฟังก์ชั่นใหม่ที่เพิ่มขึ้นมาใน pgRouting 2.0.0
[2] ฟังก์ชั่นเก่าที่เลิกใช้แล้วใน pgRouting 2.0.0
ข้อดีของวิธีการหาเส้นทางจากระบบฐานข้อมูลคือ
  • สามารถทำการแก้ไขข้อมูลและรายละเอียดข้อมูลได้หลายวิธี, เช่น QGIS” และ uDig ผ่านทาง JDBC, ODBC, หรือแก้ไขโดยตรงจากโปรแกรม Pl/pgSQL. อีกทั้งยังสามารถแก้ไขผ่านไม่ว่าจะทางคอมพิมเตอร์หรือโทรศัพท์ก็ได้
  • Data changes can be reflected instantaneously through the routing engine. There is no need for precalculation.
    ข้อมูลที่ถูกแก้ไขจะสามารถแสดงผลลัพธ์ใหม่ได้ทันทีผ่านโปรแกรมการเส้นทาง โดยไม่ต้องทำการคำนวนใหม่อีกครั้ง
  •  ตัวแปลค่าน้ำหนัก “cost” สามารถคำนวนผ่าน SQL และค่าเหล่านั้นสามารถเรียกมาคำนวนได้จากหลายๆตาราง หลายๆคอลัมในเวลาเดียวกัน
pgRouting website: http://www.pgrouting.org


2. สร้างฐานข้อมูลและเพิ่ม pgRouting ฟังก์ชั่นเข้าไปในฐานข้อมูล 



ตั้งแต่พัฒนาจาก pgRouting version 1.x มาเป็น 2.0 เราสามารถเพิ่มฟังก์ชั่นเข้าไปใน PostGIS Extension ได้ง่ายขึ้น แต่มีข้อกำหนดคือ ต้องใช้ 
  • PostgreSQL 9.1 or สูงกว่า
  • PostGIS 2.x installed as extension
หากลงโปรแกรม PostgreSQL/PostGIS ตาม Version ที่กำหนดแล้ว
ขั้นตอนต่อไปเริ่มจาก เปิดโปรแกรม pgAdmin 3: และใช้คำสั่งต่อไปนี้

# login as user "postgres"
psql -U postgres

# create routing database
CREATE DATABASE routing;
\c routing

# add PostGIS functions
CREATE EXTENSION postgis;

# add pgRouting core functions
CREATE EXTENSION pgrouting;

2.1 เอาข้อมูล Shapefile ใส่ในฐานข้อมูลที่ชื่อ routing
 

2.2 จากนั้นก็ Create a Network Topology

 -- Add "source" and "target" column
ALTER TABLE road ADD COLUMN "source" integer;
ALTER TABLE road ADD COLUMN "target" integer;

-- Run topology function

pgr_createTopology('<table>', float tolerance, '<geometry column', '<gid>')
 
SELECT pgr_createTopology('road', 0.00001, 'the_geom', 'gid');

Note: ค่า float tolerance สามารถเปลี่ยนไปได้ขึ้นอยู่กับจำนวนความถี่ของโครงข่ายถนน ค่าพิกัดของข้อมูล
หลังจาก created topology แล้ว สามารถเช็คค่าเพื่อตรวจสอบความถูกต้องได้จากคำสั่งSELECT * from road where source=target;

คำตอบที่ได้จะต้องเป็น 0 หรือ ไม่มีข้อมูล หากยังมีข้อมูลที่ซ้ำกันให้ทำการปรับค่า float tolerance ให้เล้กลงไปเรื่อยๆ จนกว่าข้อมูลจะไม่ซ้ำ


2.3 --Add indices เพื่อช่วยให้ทำการ query ข้อมูลได้เร็วขึ้น

CREATE INDEX source_idx ON road("source");
CREATE INDEX target_idx ON road("target");



 3.ทดสอบการหาเส้นทางจากฟังก์ชั่นแรก Shortest Path Dijkstra

Dijkstra algorithm นั้นจะทำการ query จาก attributes (column)  source and target ID, id attribute and cost (ระยะทาง หรือ column length)เท่านั้น. อีกทั้ง ยังสามารถกำหนดการคำนวนเส้นทางแบบ  directed (คิดในเรื่องของเส้นทางที่เป็น One way) and undirected (ไปได้ทุกเส้นทาง) ได้อีกด้วย. ขึ้นอยุ่กับว่าเราต้องกาำที่จะกำหนดค่า reverse cost ให้กำข้อมูลถนนหรือไม่

3.1หากรายละเอียดข้อมูลถนนของเรายังไม่มี column ที่ชื่อ length ให้สร้างจากคำสั่งดังนี้

ALTER TABLE road ADD COLUMN lenght double precision;
UPDATE road SET length = ST_length(the_geom); --คำนวนระยะทางของถนนแต่ละเส้น


ในกรณีที่มีการใช้คำสั่งในการคำนวนในเรื่องของถนนที่เดินรถได้ทางเดียว (One way) จะต้องเพิ่ม column 'reverse_cost' เข้าไปและจะให้ค่าเริ่มต้นของ reverse_cost=length 

ALTER TABLE road ADD COLUMN reverse_cost double precision;
UPDATE road SET reverse_cost = length;

ส่วนถนนเส้นไหนที่เป็นถนน One way นั้น ค่าของ reverse_cost จะใส่เป็น infinity หรือ 1,000,000

3.2 Query
--undirected

SELECT seq, id1 AS node, id2 AS edge, cost FROM pgr_dijkstra('
                SELECT gid AS id,
                         source::integer,
                         target::integer,
                         length::double precision AS cost
                        FROM road',
                105, 209, false, false);

--directed
SELECT seq, id1 AS node, id2 AS edge, cost FROM pgr_dijkstra('
                SELECT gid AS id,
                         source::integer,
                         target::integer,
                         length::double precision AS cost,
                         reverse_cost::double precision AS reverse_cost,
                       FROM road',
                105, 209, true, true);
 
 
 
 ศึกษาเพิ่มเติมได้ที่ http://workshop.pgrouting.org/
 
undirected

directed

วันพุธที่ 22 มกราคม พ.ศ. 2557

การเพิ่มข้อมูลจุดลงในตารางของ PostGIS โดยใช้คำสั่ง ST_GeomFromText

_______เป็นคำสั่งที่ใช้ใน PostgreSQL/PostGIS ซึ่งคำสั่งนี้มักจะนำไปใช้ในการเพิ่มข้อมูลแผนที่โดยนำค่าพิกัดเข้ามา ไม่ว่าจะเป็นในรูปแบบ POINT,LINE และ POLYGON
โดยรูปแบบดังนี้
geometry ST_GeomFromText(text WKT, integer srid);
ตัวอย่าง
SELECT ST_GeomFromText('POINT(100.56 16.37)',4326);

การเพิ่มข้อมูลจุดในตาราง
INSERT INTO sponcom (geom,spon_area,day_action,action_id) VALUES (ST_GeomFromText ('POINT(576071.897 2026487.914)',32647),50,2,'NUGIS');

แต่ถ้าข้อมูลเก็บมาเป็นคาพิกัดอีกรูปแบบนึง ก็จะต้องใช้ ST_Transform
INSERT INTO sponcom (geom,spon_area,day_action,action_id) VALUES (ST_Transform(ST_GeomFromText ('POINT(99.725 18.339)',4326),32647),50,2,'NUGIS');


วันศุกร์ที่ 1 พฤศจิกายน พ.ศ. 2556

Load Shapefile (SHP) into PostGIS from Command-line (Terminal) on Ubuntu

_______การนำเอาข้อมูล Shapefile เข้าสู่ฐานข้อมูล database โดยใช้โปรแกรม PostgreSQL/PostGIS ผ่าน Terminal ซึ่งทำในระบบปฏิบัติการ Ubuntu ครับ โดยการใช้งานก็คล้ายๆ กับที่เราติดตั้งใน windows นั่นแหละครับ ซึ่งข้อมูล shapefile ที่อยู่ใน postgis แล้วนั้นจะอยู่ในรูปแบบของตาราง table โดยจะมี column หนึ่งที่เก็บ Geometry ไว้ครับ วันนี้ผมก็จะอธิบายอย่างคร่าวๆ ก่อนล่ะกันครับ (เอาไว้วันหลังบ้างฮ่าๆ) เรามาดูวิธีทำกันครับ

1. เริ่มจากการเปลี่ยน shapefile เป็น sql โดยใช้ shp2psql ซึ่งผลลัพธ์เราจะได้ไฟล์ sql ออกมาครับ ดังภาพ


2. เมื่อพิมพ์เสร็จแล้วก็ให้ Enter ก็จะได้ดังภาพ ซึ่งก็จะบอกประเภทของข้อมูล shapefile นั้นๆ


3. จากนั้นเราจะได้ไฟล์ sql ออกมาดังภาพ


4. จากนั้นเราก็นำเอาไฟล์ sql นั้นเข้าสู่ database ได้เลยครับ


5. จากนั้นก็ run ได้เลยครับ สำเร็จแล้ว


6. เมื่อทำได้แล้วก็จะมีตารางข้อมูลปรากฏขึ้นมาใหม่ ดังภาพ


7. ลองเปิดตารางดู ว่ามีฟิลด์เหมือนกับ shapefile หรือไม่


8. เชื่อมต่อฐานข้อมูลกับ PostGIS โดยใช้ QGIS ดังภาพครับ


9. ผลลัพธ์ที่ได้จากการเรียกชั้นข้อมูลจาก PostGIS ครับ




วันศุกร์ที่ 4 ตุลาคม พ.ศ. 2556

มาแล้ว PostgreSQL 9.3 ได้บรรจุ Spatial Extension หรือ PostGIS 2.1 Bundle

____ตอนที่ PostgreSQL 9.3 ออกมาใหม่ๆ ตอนนั้นผมก็ทำการติดตั้งลงไปในเครื่อง แล้วลอง StackBuilder ดู เอ้าดันไม่มี PostGIS ซ่ะงั้น แต่ตอนนี้เราสามารถ StackBuilder ได้แล้วครับ เราก็จะเจอ Spatial Extension ที่เป็น PostGIS 2.1 Bundle เราลองมาดูกันว่าเวอร์ชั้น 2.1 นั้นเค้ามัดรวมเอาอะไรมาไว้ให้เราบ้าง ตามด้านล่างเลยครับ

PostGIS 2.1.0 bundle includes
- PostGIS 2.1.0 with raster and pgrouting support
- Tiger geocoder (in contrib/postgis-21/extras)
- For 9.2-9.3 - extensions files for postgis, postgis_topology, postgis_tiger_geocoder, address_standardizer, and pgrouting
- Commandline raster loader, shapefile import/export: raster2pgsql, shp2pgsql, pgsql2shp
- GUI: shp2pgsql-gui which has both import and export support for geometry/geography


StackBuilder Application

pgAdmin III

Download PostgreSQL : http://www.enterprisedb.com/products-services-training/pgdownload

Download PostGIS : http://postgis.net/windows_downloads

วันพฤหัสบดีที่ 25 เมษายน พ.ศ. 2556

Buffer geometry dynamically from PostgreSQL/PostGIS to GeoServer

______ผมได้ทำการทดสอบ dynamic query postgis ซึ่งมันเป็นสิ่งที่โอเคเลยครับ สามารถตอบโจทย์ผมได้ดีเลยทีเดียว แต่สิ่งที่ทำมาทั้งหมดนั้นมันทำให้ผมคิดต่อไปอีก ถ้าเรานำมา connect กับ GeoServer ล่ะ จะเกิดอะไรขึ้น???? สนุกเลยล่ะครับไปดูกันดีกว่า :)

1. ภาพนี้เป็นการแสดงข้อมูลการทดสอบ buffer เริ่มต้นเลยครับ



2. เราจะทำการเพิ่มจุดใหม่ลงไปในแผนที่(ผ่านเว็บไปเลย)



3. เมื่อเราเพิ่มจุดเสร็จแล้ว จะมีชั้นข้อมูลที่ทำ buffer แสดงให้อัตโนมัติทันที ดังภาพ



4. เราสามรถไปตรวจสอบข้อมูลที่เพิ่มขึั้นมานั้นมีอยู่ใน table หรือป่าว สามาารถเช็คได้ครับ




5. เรียก service (postgis or wms/wfs) แสดงใน Quantum GIS ก็ได้เช่นกันครับ





(นี่เป็นเพียงแค่ตัวการแสดงผลลัพธ์ให้ดูเท่านั้น ส่วนวิธีทำและขั้นตอนนั้นค่อยว่ากันทีหลังครับ)

วันจันทร์ที่ 25 กุมภาพันธ์ พ.ศ. 2556

Install PostgreSQL/PostGIS on Ubuntu 12.04 LTS Success!!

_______ผมพยายามที่จะติดตั้ง PostgreSQL/PostGIS ลงใน Ubuntu มาเป็นเวลานานอยู่สักพักเหมือนกัน แต่ก็ไม่เคยประสบความสำเร็จสักครั้งครับ แต่พอมาถึงวันนี้ผมสามารถทำได้แล้วซึ่งผมใช้ PostgreSQL 9.1 และ PostGIS 2.0 ซึ่งเวอร์ชั่นนี้จะมีฟังก์ชันของราสเตอร์เข้ามาด้วยและน่าสนใจเลยทีเดียว




วันพฤหัสบดีที่ 22 พฤศจิกายน พ.ศ. 2555

Conversions from PostGIS to KML formats [ogr2ogr]

_______ห่างหายกันไปนานครับช่วงนี้ ผมพยายามที่จะแปลงประเภทของข้อมูลจากที่อยู่ใน PostgreSQL/PostGIS ให้เป็น KML ที่สามารถเปิดในโปรแกรม Google Earth เรามาลองกันเลยครับซึ่งขั้นแรกเราต้องมีโปรแกรม FWTools โดยใช้ ชุดคำสั่ง ogr2ogr ครับ Example: ogr2ogr -f "KML" c:\workspace\chingchai.kml PG:"host=localhost user=postgres dbname=postgis20 password=****" -sql "select * from prov" จากนั้นเราก็จะได้ไฟล์ kml มาก็จะสามารเปิดกับ Google Earth ได้ครับ



Powered by NUGIS

วันพุธที่ 20 มิถุนายน พ.ศ. 2555

วิธีที่ 1 สำหรับการแก้ปัญหา Encoding ของ Quantum GIS 1.8.0 โดยใช้ PostgreSQL/PostGIS

____สำหรับการแก้ปัญหาวิธีนี้จะเป็นการแก้ในส่วนของข้อมูลครับ ซึ่งผมไม่ได้แก้ไขในโปรแกรม QGIS แต่อย่างใด โดยวิธีการของผมก็คือนำข้อมูล Shapefile เข้าสู่ระบบฐานข้อมูลเชิงพื้นที่ PostgreSQL/PostGIS ครับ ซึ่งในระหว่างที่เรา Import ข้อมูลเข้าไปในฐานข้อมูลนั้นเราสามารถเปลี่ยน DBF file character encoding ให้เป็น TIS-620 เพียงเท่านี้เราก็จะได้ข้อมูล Attribute ที่เป็นภาษาไทยสำหรับโปรแกรม QGIS 1.8.0 แล้วครับ





** สามารถเข้าไปดูวิธีนี้ได้ครับ

วิธีที่ 3 สำหรับการแก้ปัญหา Encoding ของ Quantum GIS 1.8.0-2 โดยการแก้ไขไฟล์ qgis.bat


PostgreSQL : http://www.postgresql.org/
PostGIS : http://postgis.refractions.net/

วันอาทิตย์ที่ 4 ธันวาคม พ.ศ. 2554

การติดตั้งโปรแกรม PostgreSQL และ PostGIS for Windows



_______PostgreSQL เป็นโปรแกรมจัดการฐานข้อมูล object-relational database management system ซึ่งโปรแกรมนี้ลักษณะที่สำคัญก็คือจะมีปลักอินเสริมที่ชื่อว่า PostGIS เอาไว้ใช้ในการจัดการข้อมูลที่เป็นแบบเชิงพื้นที่ และเป็นที่นิยมใช้กันมากในทางด้าน GIS และที่ดีไปกว่านั้นโปรแกรมนี้ เป็นซอฟต์แวร์แบบรหัสเปิดใช้ลิขสิทธิ์BSD ซึ่งหมายถึงผู้ใช้สามารถนาไปใช้งานได้ฟรี นอกจากนี้ในปัจจุบัน PostgreSQL ไม่อยู่ภายใต้การควบคุมขององค์กรใดโดยเฉพาะแต่มีผู้ร่วมพัฒนาจากทั่วโลกทำให้ PostgreSQL มีการปรับปรุง อย่างต่อเนื่อง ถ้าสนใจก็ลองดาวน์โหลดไปติดตั้งกันได้น่ะครับ ผมมีคู่มือวิธีการติดตั้งไว้อยู่ด้านล่างครับ

วิธีการติดตั้งโปรแกรม : Click Download

สามารถเข้าไปศึกษารายละเอียดได้ที่ http://www.postgresql.org/ และ http://postgis.refractions.net/