_______การแสดงข้อมูลแผนที่บน Leaflet นั้น ข้อมูลส่วนใหญ่จะอยู่ในรูปแบบ GeoJSON แต่ทีนี้ข้อมูลของผมเองนี้ดันอยู่ในรูปแบบของ Database ที่เป็นแบบ PostGIS ซึ่งข้อมูลจะเป็นลักษณะของตารางและเก็บค่า Geometry ไว้ อ้าวแล้วยังงี้จะต้องทำอย่างไรถึงจะแสดงบน Leaflet ได้หล่ะ ไม่ยากเลยครับเราเพียงแค่ใช้ PHP แปลงข้อมูลของเราให้อยู่ในรูปแบบ GeoJSON เท่านั้นเอง สามารถเข้าไปดูได้ที่ GitHub ของผมเองได้ครับ ไปดูกันเลยว่าทำอย่างไร
ตัวอย่างจาก GitHub ดัง URL ด้านล่าง
https://gist.github.com/sanchangon/24058c407ab051dc5f72fa5fdbadc0ac
1. ไฟล์ healthcenter.html ที่ใช้แสดงแผนที่
<html>
<!--
* Name: Leafletjs connect php-geojson through postgis spatial database
* Purpose: GIST@NU (www.cgistln.nu.ac.th)
* Date: 2016/10/13
* Author: Chingchai Humhong (chingchaih@nu.ac.th)
* Acknowledgement:
!-->
<head>
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css"/>
<script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
</head>
<body>
<div id="map" style="width: 100%; height: 800px;"></div>
<script type="text/javascript">
var map = L.map('map');
var OpenStreetMap_BlackAndWhite = L.tileLayer('http://{s}.tiles.wmflabs.org/bw-mapnik/{z}/{x}/{y}.png', {
maxZoom: 18,
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
});
OpenStreetMap_BlackAndWhite.addTo(map);
map.setView([17.05, 100.25], 9);
function addDataToMap(data, map) {
var dataLayer = L.geoJson(data, {
onEachFeature: function(feature, layer) {
var popupText = "hospital name: " + feature.properties.name
+ "<br>hospital code: " + feature.properties.maincode;
//+ "<br><a href='" + feature.properties.url + "'>More info</a>";
layer.bindPopup(popupText); }
});
dataLayer.addTo(map);
}
$.getJSON("healthcenter.php", function(data) { addDataToMap(data,map); });
</script>
</body>
</html>
2. ไฟล์ healthcenter.php ที่ใช้ในการแปลงเป็น GeoJSON
<?php
//-------------------------------------------------------------
// * Name: PHP-PostGIS2GeoJSON
// * Purpose: GIST@NU (www.cgistln.nu.ac.th)
// * Date: 2016/10/13
// * Author: Chingchai Humhong (chingchaih@nu.ac.th)
// * Acknowledgement:
//-------------------------------------------------------------
// Database connection settings
define("PG_DB" , "database");
define("PG_HOST", "localhost");
define("PG_USER", "postgres");
define("PG_PORT", "port");
define("PG_PASS", "password");
define("TABLE", "table");
// Retrieve start point
// Connect to database
$con = pg_connect("dbname=".PG_DB." host=".PG_HOST." port=".PG_PORT." password=".PG_PASS." user=".PG_USER);
$sql = "select gid, provcode, maincode, bed, name, lat, lon, typecode, ST_AsGeoJSON(geom) AS geojson from ".TABLE." WHERE provcode = 65; ";
// Perform database query
$query = pg_query($con,$sql);
//echo $sql;
// Return route as GeoJSON
$geojson = array(
'type' => 'FeatureCollection',
'features' => array()
);
// Add geom to GeoJSON array
while($edge=pg_fetch_assoc($query)) {
$feature = array(
'type' => 'Feature',
'geometry' => json_decode($edge['geojson'], true),
'crs' => array(
'type' => 'EPSG',
'properties' => array('code' => '4326')
),
'properties' => array(
'gid' => $edge['gid'],
'provcode' => $edge['provcode'],
'maincode' => $edge['maincode'],
'bed' => $edge['bed'],
'name' => $edge['name'],
'lat' => $edge['lat'],
'lon' => $edge['lon'],
'typecode' => $edge['typecode']
)
);
// Add feature array to feature collection array
array_push($geojson['features'], $feature);
}
// Close database connection
pg_close($con);
// Return routing result
// header('Content-type: application/json',true);
echo json_encode($geojson);
?>
เขียนโดย: ชิงชัย หุมห้อง (14 ตุลาคม 2559)
Reference: https://github.com/sanchangon/leaflet-phpgeojson
แสดงบทความที่มีป้ายกำกับ postgis แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ postgis แสดงบทความทั้งหมด
วันศุกร์ที่ 14 ตุลาคม พ.ศ. 2559
วันอังคารที่ 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. ผลที่ได้
2. ทดสอบเครื่องมือ shp2pgsql โดยพิมพ์ shp2pgsql.exe ลงไป แล้ว Enter
shp2pgsql -I -s 32647 -W "TIS-620" province.shp public.province| psql -h myserver -d mydb -U myuser
4. นำเข้าสำเร็จ
วันศุกร์ที่ 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 และมีฟังก์ชั่นต่างๆเพิ่มขึ้นมามากมาย ดังที่แสดงอยู่ข้างล่าง
ตั้งแต่พัฒนาจาก pgRouting version 1.x มาเป็น 2.0 เราสามารถเพิ่มฟังก์ชั่นเข้าไปใน PostGIS Extension ได้ง่ายขึ้น แต่มีข้อกำหนดคือ ต้องใช้
ขั้นตอนต่อไปเริ่มจาก เปิดโปรแกรม 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>')
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.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
--directed
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
ขั้นตอนต่อไปเริ่มจาก เปิดโปรแกรม 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');
โดยรูปแบบดังนี้
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 ครับ
1. เริ่มจากการเปลี่ยน shapefile เป็น sql โดยใช้ shp2psql ซึ่งผลลัพธ์เราจะได้ไฟล์ sql ออกมาครับ ดังภาพ
2. เมื่อพิมพ์เสร็จแล้วก็ให้ Enter ก็จะได้ดังภาพ ซึ่งก็จะบอกประเภทของข้อมูล shapefile นั้นๆ
3. จากนั้นเราจะได้ไฟล์ sql ออกมาดังภาพ
4. จากนั้นเราก็นำเอาไฟล์ sql นั้นเข้าสู่ database ได้เลยครับ
5. จากนั้นก็ run ได้เลยครับ สำเร็จแล้ว
6. เมื่อทำได้แล้วก็จะมีตารางข้อมูลปรากฏขึ้นมาใหม่ ดังภาพ
7. ลองเปิดตารางดู ว่ามีฟิลด์เหมือนกับ shapefile หรือไม่
8. เชื่อมต่อฐานข้อมูลกับ PostGIS โดยใช้ QGIS ดังภาพครับ
9. ผลลัพธ์ที่ได้จากการเรียกชั้นข้อมูลจาก PostGIS ครับ
ป้ายกำกับ:
ESRI Shapefile
,
postgis
,
postgresql
,
shp2pgsql
,
Ubuntu 13.10
วันศุกร์ที่ 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
Download PostgreSQL : http://www.enterprisedb.com/products-services-training/pgdownload
Download PostGIS : http://postgis.net/windows_downloads
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
ป้ายกำกับ:
pgAdmin III
,
postgis
,
PostGIS 2.1 Bundle
,
postgresql
,
Spatial Database
,
Spatial Extension
,
StackBuilder
วันพฤหัสบดีที่ 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 ก็ได้เช่นกันครับ


(นี่เป็นเพียงแค่ตัวการแสดงผลลัพธ์ให้ดูเท่านั้น ส่วนวิธีทำและขั้นตอนนั้นค่อยว่ากันทีหลังครับ)
1. ภาพนี้เป็นการแสดงข้อมูลการทดสอบ buffer เริ่มต้นเลยครับ
2. เราจะทำการเพิ่มจุดใหม่ลงไปในแผนที่(ผ่านเว็บไปเลย)
3. เมื่อเราเพิ่มจุดเสร็จแล้ว จะมีชั้นข้อมูลที่ทำ buffer แสดงให้อัตโนมัติทันที ดังภาพ
4. เราสามรถไปตรวจสอบข้อมูลที่เพิ่มขึั้นมานั้นมีอยู่ใน table หรือป่าว สามาารถเช็คได้ครับ
5. เรียก service (postgis or wms/wfs) แสดงใน Quantum GIS ก็ได้เช่นกันครับ
(นี่เป็นเพียงแค่ตัวการแสดงผลลัพธ์ให้ดูเท่านั้น ส่วนวิธีทำและขั้นตอนนั้นค่อยว่ากันทีหลังครับ)
ป้ายกำกับ:
Buffer
,
Dynamic
,
GeoServer
,
postgis
,
postgresql
,
QGIS
,
Quantum GIS
,
WMS
วันจันทร์ที่ 25 กุมภาพันธ์ พ.ศ. 2556
Install PostgreSQL/PostGIS on Ubuntu 12.04 LTS Success!!
_______ผมพยายามที่จะติดตั้ง PostgreSQL/PostGIS ลงใน Ubuntu มาเป็นเวลานานอยู่สักพักเหมือนกัน แต่ก็ไม่เคยประสบความสำเร็จสักครั้งครับ แต่พอมาถึงวันนี้ผมสามารถทำได้แล้วซึ่งผมใช้ PostgreSQL 9.1 และ PostGIS 2.0 ซึ่งเวอร์ชั่นนี้จะมีฟังก์ชันของราสเตอร์เข้ามาด้วยและน่าสนใจเลยทีเดียว
ป้ายกำกับ:
pgAdminIII
,
postgis
,
postgresql
,
QGIS
,
Quantum GIS
,
ubuntu
,
Ubuntu Desktop 12.04 LTS
วันพฤหัสบดีที่ 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
Powered by NUGIS
ป้ายกำกับ:
FWTools
,
GDAL/OGR
,
Google Earth
,
kml
,
ogr2ogr
,
postgis
,
postgresql
วันอังคารที่ 9 ตุลาคม พ.ศ. 2555
upload shapefile เข้า postgis
วิธีการเอา shp ยัดเข้า postgis นั้นมีหลากหลายวิธีมากครับ
วิธีแรกใช้ shp2pgsql โดยเปลี่ยนข้อมูล shp ให้อยู่ในรูป sql ก่อน แบบนี้
C:\Program Files\PostgreSQL\9.2\bin> shp2pgsql.exe -s 32647 -W “TIS-620” pratanbat.shp pratanbat > pratanbat.sql
โดยที่ หลัง -s ให้ระบบพิกัด -W ให้ระบุ encoding ของข้อมูล แล้วก็เอาไป run ใน pgAdmin (ถ้าเรามี shp จำนวนมากคงต้องปาดเหงื่อกันบ้าง)
วิธีที่ 2 ใช้ PostGIS 2.0 Shapefile and DBF Loader Exporter ของ postgis
-ใส่ username password ฐานข้อมูลที่ต้องการติดต่อที่ปุ่ม View connection details..
- upload ไฟล์ของเราที่ปุ่ม Add Files
- ช่อง SRID ให้ระบุระบบพิกัด
- ระบุ encoding ของข้อมูลเรา เช่น UTF-8, TIS-620, WINDOWS-874 (กรณีที่ไม่รู้ให้ลองใส่ TIS-620 ดู ถ้าไม่ได้ก็เปลี่ยนใหม่ เอ่อ..)
-กด Import
เพียงเท่านี้ท่านก็จะได้ shp ไปนอนรออยู่ใน database รอให้ท่านเรียกใช้งานแล้วครับ
วิธีที่ 3 ใช้เครื่อง spit ของ qgis
-คลิ๊ก New เพื่อใส่ username password ฐานข้อมูลที่ต้องการติดต่อ
-คลิ๊ก Connect เพื่อต่อฐานข้อมูล
-คลิ๊ก Add เพื่อเลือก shp มาใส่
-และคลิ๊ก Ok เพื่อ upload เข้าฐานข้อมูลครับ
* วิธีที่สองผมว่าง่ายและไม่ค่อยมีปัญหาชอบสุดครับ เป็นความเชื่อส่วนบุคคลครับ ;)
วันพุธที่ 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 แล้วครับ



** สามารถเข้าไปดูวิธีนี้ได้ครับ
PostgreSQL : http://www.postgresql.org/
PostGIS : http://postgis.refractions.net/


** สามารถเข้าไปดูวิธีนี้ได้ครับ
วิธีที่ 3 สำหรับการแก้ปัญหา Encoding ของ Quantum GIS 1.8.0-2 โดยการแก้ไขไฟล์ qgis.bat
PostGIS : http://postgis.refractions.net/
ป้ายกำกับ:
encoding
,
postgis
,
postgresql
,
QGIS 1.8.0
,
Quamtum GIS
วันอาทิตย์ที่ 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/
สมัครสมาชิก:
บทความ
(
Atom
)















