_______การแสดงข้อมูลแผนที่บน 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
แสดงบทความที่มีป้ายกำกับ GeoJSON แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ GeoJSON แสดงบทความทั้งหมด
วันศุกร์ที่ 14 ตุลาคม พ.ศ. 2559
วันพฤหัสบดีที่ 9 กรกฎาคม พ.ศ. 2558
การแปลงข้อมูล OSM (PBF Format) ให้อยู่ในรูปของ SQLite และ GeoJSON ด้วยชุดคำสั่ง ogr2ogr
_____ข้อมูล OSM (OpenStreetMap) เราสามารถดาวน์โหลดมาใช้ได้ฟรี ซึ่งมีนามสกุลข้อมูลหลายรูปแบบ แต่วันนี้จะมาทดลองแปลงข้อมูล OSM ที่อยู่ในรูปแบบข้อง PBF Format ให้อยู่รูปแบบของ GeoJSON และ SQLite กันครับ
โดยเริ่มแรกเรามาลองแปลงเป็น SQLite กันครับ
1. ทดสอบเครื่องมือ ogr2ogr
2. พิมพ์คำสั่ง ดังภาพด้านล่าง
ogr2ogr -f SQLite -dsco SPATIALITE vietnam.db vietnam-latest.osm.pbf
3. ผลที่ได้จะออกมาในรูปแบบ data.db ดังภาพ
4. เมื่อข้อมูลในโปรแกรม QGIS
จากนั้นจะลองแปลงเป็น GeoJSON ดูบ้าง
1. พิมพ์คำสั่ง ดังภาพด้านล่าง
ogr2ogr -f GeoJSON points.json data.osm.pbf points
ogr2ogr -f GeoJSON lines.json data.osm.pbf lines
ogr2ogr -f GeoJSON multilinestrings.json data.osm.pbf multilinestrings
ogr2ogr -f GeoJSON multipolygons.json data.osm.pbf multipolygons
ogr2ogr -f GeoJSON other_relations.json data.osm.pbf other_relations
โดยเริ่มแรกเรามาลองแปลงเป็น SQLite กันครับ
1. ทดสอบเครื่องมือ ogr2ogr
ogr2ogr -f SQLite -dsco SPATIALITE vietnam.db vietnam-latest.osm.pbf
1. พิมพ์คำสั่ง ดังภาพด้านล่าง
ogr2ogr -f GeoJSON points.json data.osm.pbf points
ogr2ogr -f GeoJSON lines.json data.osm.pbf lines
ogr2ogr -f GeoJSON multilinestrings.json data.osm.pbf multilinestrings
ogr2ogr -f GeoJSON multipolygons.json data.osm.pbf multipolygons
ogr2ogr -f GeoJSON other_relations.json data.osm.pbf other_relations
ป้ายกำกับ:
GeoJSON
,
ogr2ogr
,
OSM
,
PBF Format
,
QGIS
,
SPATIALITE
,
SQLite
วันจันทร์ที่ 5 มกราคม พ.ศ. 2558
การแปลงข้อมูล ESRI Shapefile (*.shp) ไปเป็นข้อมูลแบบ GeoJSON โดยใช้ ogr2ogr
_______การแปลงข้อมูลไปเป็น GeoJSON นั่นสามารถทำได้หลากหลายวิธีมากครับ ไม่ว่าจะใช้โปรแกรมแปลง เช่น QGIS หรือสามารถที่จะใช้บนเว็บออนไลน์ก็ได้เช่นกัน แต่วันนี้ผมขอแนะนำการแปลงข้อมูลโดยใช้ ogr2ogr ซึ่งเป็นหนึ่งในไลบราลี่ของ GDAL/OGR(Geospatial Data Abstraction Library) ซึ่งท่านสามรถใช้ผ่านโปรแกรม OSGeo4W Shell หรือ FWTools ได้เลยครับ
1. ตัวอย่างข้อมูลแบบ ESRI Shapefile
2. ทดสอบว่า ogr2ogr ใช้งานได้หรือไม่
3. จากนั้นเราต้องพิมพ์คำสั่งลงไปดังด้านล่างนี้
>>> $ ogr2ogr -f GeoJSON outputfile.json inputfile.shp
ท่านไหนที่ต้องการแปลงระบบพิกัดด้วยก็ระบุ -t_srs แล้วตามด้วย EPSG Code เช่น -t_srs EPSG:4326 ครับ
4. ผลที่ได้จากการแปลง ESRI Shapefile เป็น GeoJSON ครับ
สามารถศึกษาเพิ่มเติมได้ที่ http://www.gdal.org/ogr2ogr.html
1. ตัวอย่างข้อมูลแบบ ESRI Shapefile
3. จากนั้นเราต้องพิมพ์คำสั่งลงไปดังด้านล่างนี้
>>> $ ogr2ogr -f GeoJSON outputfile.json inputfile.shp
ท่านไหนที่ต้องการแปลงระบบพิกัดด้วยก็ระบุ -t_srs แล้วตามด้วย EPSG Code เช่น -t_srs EPSG:4326 ครับ
4. ผลที่ได้จากการแปลง ESRI Shapefile เป็น GeoJSON ครับ
วันเสาร์ที่ 1 กุมภาพันธ์ พ.ศ. 2557
การเรียกข้อมูล GIS ผ่านโปรโตคอล GeoJSON จากผู้ให้บริการข้อมูล GeoServer
_______วันนี้ได้ขึ้นมาพักผ่อนที่ภูหินร่องกล้า จ.พิษณุโลก อากาศดีบรรยายกาศก็ดีครับ เลยขอเขียนอะไรที่เป็นความรู้ไว้สักนิดนึงครับ ก็เลยขอนำเสนอวิธีการเรียกข้อมูล GIS ผ่านวิธีการแบบ GeoJSON ซึ่งเป็นการให้บริการแบบ WFS (Web Feature Service)โดยผู้ให้บริการข้อมูลเป็น GeoServer ครับ
1.เปิดโปรแกรม QGIS ขึ้นมาแล้วไปที่เมนู Layer >> Add Vector Layer... ดังภาพ
2.จากนั้นก็ให้เลือก Source type เป็นแบบ Protocol แล้วเลือกเป็นแบบ GeoJSON ดังภาพ
3.รูปนี้เป็น GeoServer ที่ให้บริการข้อมูล GIS ถ้าผู้ใดสนใจอยากจะเรียนรู้ สามารถติดต่อมาที่ GIST@NU ได้ครับเรามีการอบรมอยู่ครับ
4. จากนั้นเราก็จะเอา URL ของ GeoServer ที่ให้บริการข้อมูลอยู่นั้นมาใส่ในช่อง URI ของส่วน Protocol แล้วคลิก Open ดังภาพครับ
5.แล้วเราก็จะได้ข้อมูล GIS ดังภาพครับ
6. ลองเปิดข้อมูลตารางดู ก็จะมีข้อมูลเชิงบรรยายด้วยครับ
Powered by Chingchai Humhong & Sakda Homhuan :)
1.เปิดโปรแกรม QGIS ขึ้นมาแล้วไปที่เมนู Layer >> Add Vector Layer... ดังภาพ
2.จากนั้นก็ให้เลือก Source type เป็นแบบ Protocol แล้วเลือกเป็นแบบ GeoJSON ดังภาพ
3.รูปนี้เป็น GeoServer ที่ให้บริการข้อมูล GIS ถ้าผู้ใดสนใจอยากจะเรียนรู้ สามารถติดต่อมาที่ GIST@NU ได้ครับเรามีการอบรมอยู่ครับ
4. จากนั้นเราก็จะเอา URL ของ GeoServer ที่ให้บริการข้อมูลอยู่นั้นมาใส่ในช่อง URI ของส่วน Protocol แล้วคลิก Open ดังภาพครับ
5.แล้วเราก็จะได้ข้อมูล GIS ดังภาพครับ
6. ลองเปิดข้อมูลตารางดู ก็จะมีข้อมูลเชิงบรรยายด้วยครับ
Powered by Chingchai Humhong & Sakda Homhuan :)
ป้ายกำกับ:
GeoJSON
,
GeoServer
,
Protocol
,
QGIS
,
QGIS 2.0.1
,
Web Feature Service
,
WFS
วันอังคารที่ 16 กรกฎาคม พ.ศ. 2556
การเพิ่มชั้นข้อมูล WFS (Web Feature Service) ในโปรแกรม QGIS
_______สวัสดีครับเมื่อคราวก่อนผมได้นำเสนอการเพิ่มชั้นข้อมูลแบบ WMS (Web Map Service) ในโปรแกรม QGIS ไปแล้ว ซึ่ง WMS จะเป็นการให้บริการแผนที่ที่อยู่ในรูปของภาพแบบ JPEG หรือ PNG เป็นต้น ยกตัวอย่างเช่น ผมสนใจที่จะร้องขอบริการ WMS จากผู้ที่ให้บริการแผนที่ โดยการเรียก service ไป จากนั้นเราก็จะได้ข้อมูลภาพแผนที่มา โดยจะต้องมีเงื่อนไขระบุด้วย เช่น ระบบพิกัด(EPSG)หรือขอบเขตพื้นที่(BBOX)ที่ต้องการร้องขอบริการ เป็นต้น แต่ครั้งนี้เราจะมาลองเรียก service แบบ WFS กันดูบ้างครับ การเรียก service แบบ WFS จะเป็นการให้บริการข้อมูลแผนที่ที่เป็นแบบ vector(Shapefile)หรือจะอยู่ในรูปแบบของ CSV,GML,GeoJSON ก็ได้ครับ ซึ่งข้อมูลที่ได้มาเราสามารถที่จะนำไปวิเคราะห์หรือใช้งานต่อได้เลย เรามาลองกันเลยดีกว่าครับเพื่อไม่ให้เป็นการเสียเวลา
1. ไปที่เมนู Layer >> Add WFS Layer...
2. คลิกปุ่ม New (ในกรณีที่ยังไม่เคยเรียก service)จากนั้นก็ระบุชื่อและ url ของผู้ให้บริการลงไป แล้วคลิกปุ่ม OK
3. จากนั้นก็คลิกปุ่ม connect ทุกท่านก็จะพบกับรายการฐานข้อมูลต่างมากมาย
4. เราสามารถคลิกชั้นข้อมูลที่ต้องการได้เลย แล้วคลิกปุ่ม Apply
5. เมื่อคลิกปุ่ม Apply แล้วก็รอแปบ บางชั้นข้อมูลไฟล์มันใหญ่ ฮ่าๆๆ เอาทั้งประเทศเลย
6. เสร็จสิ้นสำหรับการเรียก service แบบ WFS ครับ
service by ThaiSDI
1. ไปที่เมนู Layer >> Add WFS Layer...
2. คลิกปุ่ม New (ในกรณีที่ยังไม่เคยเรียก service)จากนั้นก็ระบุชื่อและ url ของผู้ให้บริการลงไป แล้วคลิกปุ่ม OK
3. จากนั้นก็คลิกปุ่ม connect ทุกท่านก็จะพบกับรายการฐานข้อมูลต่างมากมาย
4. เราสามารถคลิกชั้นข้อมูลที่ต้องการได้เลย แล้วคลิกปุ่ม Apply
5. เมื่อคลิกปุ่ม Apply แล้วก็รอแปบ บางชั้นข้อมูลไฟล์มันใหญ่ ฮ่าๆๆ เอาทั้งประเทศเลย
6. เสร็จสิ้นสำหรับการเรียก service แบบ WFS ครับ
service by ThaiSDI
สมัครสมาชิก:
บทความ
(
Atom
)













