前言
PostGIS是PostgreSQL基於OpenGIS中的SFS規範(Simple Feature Specification for SQL)所實作出來的地理物件函式庫,而PostgreSQL則是一個關聯式資料庫的自由軟體(BSD license),
跟PostGIS類似的東西相當於MS SQL Server中的SQL Spatial、Oracle spatial、MySQL spatial。
PostGIS在地理空間運算的實作function非常多,也可以與QGIS等軟體做結合。
本文是參加鐵人賽的文章,同步發表於 “2018鐵人賽-30天打造我的WebGIS系列”
安裝
PostGIS安裝可以參考官網,各種OS有不同的安裝方法,例如Mac使用Homebrew、Windows則有安裝檔等等。
也可以在DockerHub找PostGIS的image,用Docker啟用一個PostGIS環境,做一些測試。
操作
PostGIS基於PostgreSQL當然可以使用psql或是pgadmin等工具及UI
tool,另外,QGIS對於PostGIS支援程度很高,有興趣者可以多研究喔!
建立table
產生一個table1
2
3
4CREATE TABLE tennis (
name VARCHAR(20),
city VARCHAR(10)
);
使用AddGeometryColumn增加空間欄位,指定坐標系統為EPSG:4326 2D。SELECT AddGeometryColumn ('topology','tennis','geom',4326,'POINT',2);
使用ST_GeomFromTextinset資料資料
例如1
2
3INSERT INTO topology.tennis(
name, city, geom)
VALUES ('前鎮高中網球場', '高雄市', ST_GeomFromText('POINT(120.318735 22.589452)', 4326));
查詢
PostGIS有很多空間格式的function,KML,geojson,GML等等
- ST_AsGML
- ST_AsGeoJSON
- ST_AsKML
例如:1
select name, city, ST_AsKML(geom) FROM topology.tennis
空間查詢會用到的常見方法舉幾個例子:
- ST_Distance - 計算距離
- ST_Intersection - 計算兩個幾何交會的部分
- ST_Intersects: 判斷是否交會
- ST_Length: 計算長度(polyline)
其實PostGIS的地理空間運算Funtion非常多,
涵蓋了raster及vector操作,可以參考官方文件喔!
後記
更多PostGIS可以參考
https://www.slideshare.net/mutolisp/postgis-57051746
http://www.postgis.org/docs/
http://ravenonhill.blogspot.tw/2017/12/postgis.html