鐵人賽Day 25- 在資料庫中操作空間資料-PostGIS

web
  1. 1. 前言
  2. 2. 安裝
  3. 3. 操作
  4. 4. 建立table
  5. 5. 查詢
  6. 6. 後記

前言

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

產生一個table

1
2
3
4
CREATE TABLE tennis (
name VARCHAR(20),
city VARCHAR(10)
);

使用AddGeometryColumn增加空間欄位,指定坐標系統為EPSG:4326 2D。
SELECT AddGeometryColumn ('topology','tennis','geom',4326,'POINT',2);

使用ST_GeomFromTextinset資料資料

例如

1
2
3
INSERT 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