iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 25
0
Modern Web

30天打造我的WebGIS系列 第 25

[Day 25] 在資料庫中操作空間資料-PostGIS

前言

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等軟體做結合。

安裝

PostGIS安裝可以參考官網,各種OS有不同的安裝方法,例如Mac使用Homebrew、Windows則有安裝檔等等。
也可以在DockerHub找PostGIS的image,用Docker啟用一個PostGIS環境,做一些測試。

操作

PostGIS基於PostgreSQL當然可以使用psql或是pgadmin等工具及UI
tool,另外,QGIS對於PostGIS支援程度很高,有興趣者可以多研究喔!

建立table

產生一個table

CREATE TABLE tennis (
name VARCHAR(20),
city VARCHAR(10)
);

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

使用ST_GeomFromTextinset資料資料

例如

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

例如:

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


上一篇
[Day 24] 在WebGIS加入Mapillary街景
下一篇
[Day 26] 在資料庫中操作空間資料-MongoDB
系列文
30天打造我的WebGIS30

尚未有邦友留言

立即登入留言