SlideShare a Scribd company logo
PostGIS 初⼊入⾨門應⽤用
GeoWebinar 系列講座—空間資料庫
林 政道 Lin, Cheng-Tao
⺫⽬目標聽眾
• 對於地理資訊系統及空間資料庫有興趣者
• 適合完全沒有基礎的朋友們
• 有⼀一些資料庫基礎,想接觸空間資料庫
• 想使⽤用⾃自由軟體進⾏行空間資料分析
Note: 如果您已具有 PostgreSQL 基礎,
前半段可略過
⼤大綱
• PostgreSQL 資料庫管理系統及 PostGIS 介紹 [談資料庫]
• 資料庫結構查詢語⾔言(SQL)介紹 [談資料庫]
• 向量資料 [談 GIS]
• 網格資料 [談 GIS]
• 透過 QGIS 連結 PostgreSQL/PostGIS 資料庫 [資料庫
+GIS]
• 綜合應⽤用[資料庫+GIS]
(1/6) PostgreSQL 資料庫管理系統與 PostGIS
使⽤用 PostgreSQL 和 PostGIS 的好處
• 強⼤大的圖型化介⾯面 GIS 桌⾯面系統很好⽤用,但分析資料往往需要許多⼯工
具整合,例如:
• 統計及科學繪圖通常⽤用 R
• 資料分析、程序化處理⽤用 Python
• 資料庫⽤用 PostgreSQL
• 空間分析⽤用 PostGIS
• 你可以把這些⼯工具⽤用 R/Python 寫好 script ,背後⽤用 PostgreSQL/
PostGIS,搭配 R/Python 強⼤大的資料分析或繪圖功能(numpy, scipy,
pandas 等),除了好除錯外,也可以建⽴立分析資料的 SOP,撰寫 script
過程中加上版本控制(git)可以節省時間,更有效率的完成⼯工作!
缺點
• 學習曲線陡,初學
較困難
• 隨著時間增⻑⾧長,效
率會有 exponential
的增加
PostgreSQL/PostGIS
Axx GIS
時間
效
率
PostgreSQL
• 關聯式資料庫管理系統(object-relational database
management system; ORDBMS)
• 跨平台
• BSD license,開放源碼,可⾃自由、免費取得
• ⽀支援許多第三⽅方函式庫
• 也⽀支援多種程序性SQL語⾔言(procedure language/structural
query language; pl/sql, pl/pgsql, pl/r, pl/python, pl/sh 等)
• 使⽤用先進的索引系統 GiST (generalised search tree)
什麼是 PostGIS?
PostgreSQL GIS PostGIS
+ =
其他的空間資料庫
• Spatialite (based on SQLite)
• Oracle spatial
• MySQL/MariaDB spatial
• Microsoft SQLServer spatial database
安裝 PostgreSQL 及 PostGIS
• Windows® 平台:建議可使⽤用 EnterpriseDB 包好的安裝
程式(同時也⽀支援 GNU/Linux 及 MacOS X 平台等)
• URL: http://www.enterprisedb.com/products-services-
training/pgdownload
• GNU/Linux 平台:使⽤用套件管理程式(例 apt, yum 等)
• MacOS X 平台:使⽤用 homebrew 或 macports
• *BSD 平台: 使⽤用 ports 或 pkg
安裝流程
安裝
PostgreSQL
安裝
PostGIS
設定 PostgreSQL
server
初始化資料
庫叢集
新增
資料庫
啟⽤用
PostGIS
MacOS X 安裝細節
• 安裝並設定好 homebrew (需先安裝 Xcode 等相依套件,
請參考 http://brew.sh)
• 開始 Terminal.app 輸⼊入:
$ brew install postgresql postgis
• 初始化資料庫(homebrew 預設已初始好於 /usr/local/var/postgres)
$ initdb -D /usr/local/var/postgres
GNU/Linux 的使⽤用者
我想你們應該都會安裝啦,應該不⽤用多說 XD
PostgreSQL 資料庫介⾯面
$ psql -d postgres
psql (9.5.0)
Type “help” for help
postgres=#
(1) 進⼊入PostgreSQL 管
理資料庫”postgres”
(2) 輸⼊入指令區域
(1)
(2)
可輸⼊入 SQL 或指令
Ctrl + D 退出介⾯面
新增資料庫
$ psql -d postgres
psql (9.5.0)
Type “help” for help
postgres=# create database postgis;
CREATE DATABASE
postgres=#
語法:CREATE DATABASE 資料庫名稱;
啟⽤用 postgis
$ psql -d postgis
psql (9.5.0)
Type “help” for help
postgres=# create extension postgis;
CREATE DATABASE
postgres=#
語法:CREATE EXTENSION postgis;
註:若需要升級則輸⼊入(version_number 為版本號)
ALTER EXTENSION postgis UPDATE TO “version_number”
(2/6) 資料庫結構查詢語⾔言介紹
主要的 SQL 語法關鍵字
• 查詢(SELECT)
• 更新(UPDATE)
• 插⼊入(INSERT)
• 刪除(DROP)
• 更動(ALTER)
• …
次要的語法關鍵字
• 篩選條件:WHERE filtering condition
• DISTINCT, GROUP BY, ORDER BY, LIKE, …, etc.
• transection: BEGIN; sql commands; COMMIT;
ROLLBACK;
• subquery: SELECT … (QUERY) AS foo;
語法指令不難,基本上就是英⽂文和邏輯
常⽤用的指令
• h 列出說明
• l 列出所有資料庫
• d 列出所有資料表
• z 列出存取權限
• s 列出歷史指令
• H 顯⽰示的輸出為 html 格式
• connect 在不同資料庫中切換
常⽤用的數學函數
• 平均: avg()
• 最⼤大值:max()
• 最⼩小值:min()
參考網址:http://www.postgresql.org/docs/9.5/static/functions-aggregate.html
運算⼦子(operators)
• 相等: =
• ⼤大於: >
• ⼩小於: <
• 不等於: !=
schema, table 和 column
• 通常使⽤用點來分隔 schema, table 及 column,例如
postgres=# SELECT column1 FROM public.foo
查詢資料
postgres=# SELECT * FROM table;
postgres=# SELECT id, family FROM table1 WHERE id > 1;
語法:SELECT object FROM table_name;
例:查詢並篩選資料
id family cname name
1 Pinaceae 臺灣⼆二葉松 Pinus taiwanensis
2 Pinaceae 臺灣冷杉 Abies kawakamii
3 Pinaceae 臺灣華⼭山松 Pinus armandii var. mastersiana
4 Cupressaceae ⾹香⻘青 Juniperus squamata
… … …
n … … …
https://github.com/mutolisp/postgis_course/tree/master/ch01/examples
範例資料下載
匯⼊入範例資料
• 下載 https://github.com/mutolisp/postgis_course/tree/
master/ch01/examples 中的 gymnosperms.sql
• 使⽤用終端機(命令提⽰示字元)輸⼊入:
$ psql -d postgis -f gymnosperms.sql
BEGIN
psql:gymnosperms.sql:2: NOTICE: table "gymnosperms" does not
exist, skipping
DROP TABLE
CREATE TABLE
COPY 46
COMMIT
範例⼀一、查詢所有資料列(row)數
• 語法:count()
postgis=# SELECT count(*) FROM table;
count
-------
46
(1 row)
範例⼆二、查詢特定欄位中的特定值
• 想知道松科(Pinaceae)總共有哪些物種,並列出種名
• 語法:SELECT column_name FROM table_name
WHERE column_name = ‘foo’;
postgis=# select family,cname from gymnosperms where
family='Pinaceae';
family | cname
----------+------------
Pinaceae | 臺灣冷杉
Pinaceae | 臺灣油杉
Pinaceae | 臺灣雲杉
Pinaceae | 臺灣華⼭山松
Pinaceae | 天⻯⿓龍⼆二葉松
範例三、aggregate function 及 subquery
• 想知道每個科各有幾個物種,
並依照數⺫⽬目由⼤大排到⼩小
• 使⽤用:subquery 和 group
by
• 語法:
SELECT family,count(cname)
FROM (SELECT family,cname
FROM gymnosperms) AS foo
GROUP BY family ORDER
BY count DESC;
postgis=# SELECT
family,count(cname) FROM
(SELECT family,cname FROM
gymnosperms) AS foo GROUP BY
family ORDER BY count DESC;
family | count
-----------------+-------
Cupressaceae | 13
Pinaceae | 13
Podocarpaceae | 7
Araucariaceae | 4
Taxodiaceae | 4
Cycadaceae | 2
Cephalotaxaceae | 1
Taxaceae | 1
Amentotaxaceae | 1
(9 rows)
(3/6) 向量資料
簡單介紹 PostGIS 的資料類型
• 關於空間的資料欄位使⽤用 geometry 及 raster 兩⼤大類型,
• geometry ⽀支援點(point)、線(linestring)、⾯面(polygon)
• PostGIS 相關的函式都使⽤用 ST_ 開頭,例如:
• 從⽂文字轉成幾何欄位: ST_GeomFromText()
• 座標轉換:ST_Transform()
• 交集:ST_Intersection()
向量資料類型
• 使⽤用幾何(geometry)來描述現實世界
• 分類:
• 點 (Point),例如捷運站、學校、寺廟的位置
• 線 (Line string):描述路徑、道路
• ⾯面 (Polygon):描述⾯面積或⼀一定範圍
範例⼀一:建⽴立⼀一個具有空間欄位的資料表
postgis=# CREATE TABLE sptable
postgis-# (id serial PRIMARY KEY,
postgis-# x double precision, y double precision, geom
geometry(point,4326);
CREATE TABLE
解釋:建⽴立⼀一個資料表,具有四個欄位,
id (主鍵), xy 座標以及 postgis 幾何欄位(點
資料,座標系統為 WGS84 (EPSG:4326)
範例⼀一:匯⼊入資料
$ psql -d postgis -f point_data.sql
下載網址:https://github.com/mutolisp/
postgis_course/tree/master/ch01/
examples
範例⼀一:建⽴立幾何欄位
1. 使⽤用 ST_SetSRID 建⽴立投影座標系統
2. 使⽤用 ST_MakePoint 建⽴立 Point 幾何欄位
3. 更新原有的 geom 欄位
postgis=# UPDATE sptable SET
geom =
ST_SetSRID(
ST_MakePoint(foo.x,foo.y),4326)
FROM
(SELECT id,x,y FROM sptable) as foo
WHERE sptable.id = foo.id;
範例⼆二、座標轉換
• 臺灣常使⽤用 TWD1997 TM2 Zone 121 (EPSG: 3826) 及
WGS84 (EPSG: 4326) 兩種座標系統,PostGIS 內建
spatial_ref 資料表可轉換
postgis=# SELECT st_transform(4326, 3826) FROM
table;
• 如果常常需要轉換,可以在同⼀一個資料表中新建⼀一個
geometry 欄位,直接轉成該座標系統
(3/6) 網格資料
網格的概念
• 使⽤用矩陣的概念來儲
存均勻分布的資料
• 須定義起始點(通常為
網格最左下⾓角)、網格
解析度及填⼊入網格數
值
• 可儲存連續性或類別
的資料分布,例如:
海拔、坡度、坡向、
⼟土壤類型等
5 15 10
10 20 15
10 15 12
匯⼊入 Raster
• 使⽤用 raster2pgsql
指令匯⼊入
$ raster2pgsql -t auto -s 4326 -Y -I raster_file.img
public.elevation_wgs84 | psql -d postgis
• -Y ⽤用 COPY statements 取代原本的 INSERT
statement
• -t 建⽴立圖磚(tiles),這樣處理⼤大檔案的 raster
速度會⽐比較快
• -I 建⽴立 GIST 空間索引
• -s 座標系統, WGS84 EPSG 代碼為 4326
透過 QGIS 展圖(下⼀一章節介紹)
(5/6) 透過 QGIS 連結 PostgreSQL/PostGIS 資料庫
QGIS 連結 PostGIS
• 除了⽂文字介⾯面外,可透過 QGIS 來展圖
• 同時⽀支援向量資料及網格資料(DB Manager)
• 有第三⽅方套件可匯⼊入(SPIT)或透過 QGIS 連接 libgdal 輸
出等功能
QGIS
• Layer/Add layer/Add postgis layers
新增 PostGIS 連結
加⼊入圖層
幾何欄位
類型
空間參考
座標代碼
PostGIS 初入門應用
加⼊入網格資料
• plugin 啟⽤用 DB Manager
(6/6) 綜合應⽤用
PostGIS 綜合應⽤用範例
• 假設我有全臺灣紅檜的調查點位資料,想要知道這些座
標所對應的海拔⾼高度為何?
• 資料:
• 調查點位原始資料,格式為向量 point (ESRI Shapefile)
• 全臺灣海拔數值地形圖,網格資料(raster)
• 作法:
• ⽤用點的資料對應到數值地形圖中,抽取海拔⾼高度
5 15 10
10 20 15
10 15 12
a
b
c
數值地形圖
紅檜分布點
實作步驟
• 匯⼊入 ESRI Shapefile (點
資料)
• 匯⼊入 Raster 資料 (網格
資料)
• 空間交集
(ST_Intersects)
• 取出 geometry 的數值
(ST_Value)
匯⼊入
點資料
匯⼊入
網格資料
PostGIS
空間交集
取出數值
步驟⼀一、匯⼊入 ESRI Shapefile
• 使⽤用 shp2pgsql 指
令或⽤用 QGIS SPIT
plugin (Shapefile to
PostGIS Import Tool)
步驟⼀一、匯⼊入 ESRI Shapefile
• 使⽤用 shp2pgsql 指
令或⽤用 QGIS SPIT
plugin (Shapefile to
PostGIS Import Tool)
$ shp2pgsql -s 4326 -g geom -D -I point point.shp
public.ex1 | psql -d postgis
• -s 代表 spatial reference,WGS84 EPSG
代碼為 4326
• -g 代表 geometry column 名稱
• -D 代表使⽤用 postgresql dump
• -I 代表使⽤用 GiST 空間索引
步驟⼆二、匯⼊入 Raster
• 使⽤用 raster2pgsql
指令或⽤用 QGIS 匯⼊入
$ raster2pgsql -t auto -s 4326 -Y -I
raster_file.img | psql -d postgis
步驟三、空間交集並取出數值
postgis=# SELECT
postgis-# id, ST_Value(dtm.rast, pt.geom) elevation
postgis-# FROM
postgis-# public.ex1 pt,
postgis-# tw_dtm_asterv2 dtm
postgis-# WHERE
postgis-# ST_Intersects(dtm.rast, pt.geom)
postgis-# ORDER BY id;
得到的數值
id elevation
1 2350
2 1450.5
5 1350.1
11 1024.5
55 1200
詳細解釋可參考:http://mutolisp.logdown.com/posts/192205-postgis-extract-raster-value
謝謝!Q & A 時間

More Related Content

PDF
QGIS第一講 數位化向量地圖
PDF
会社でClojure使ってみて分かったこと
PDF
20180729 Preferred Networksの機械学習クラスタを支える技術
PDF
0から理解するニューラルネットアーキテクチャサーチ(NAS)
PDF
論文紹介:Dueling network architectures for deep reinforcement learning
PDF
論文紹介 Amortized bayesian meta learning
PDF
暗認本読書会4
PDF
暗認本読書会10
QGIS第一講 數位化向量地圖
会社でClojure使ってみて分かったこと
20180729 Preferred Networksの機械学習クラスタを支える技術
0から理解するニューラルネットアーキテクチャサーチ(NAS)
論文紹介:Dueling network architectures for deep reinforcement learning
論文紹介 Amortized bayesian meta learning
暗認本読書会4
暗認本読書会10

What's hot (20)

PPTX
[DL輪読会]Attentive neural processes
PDF
Blazing Performance with Flame Graphs
PPTX
[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...
PDF
[DL Hacks]Semi-Supervised Classification with Graph Convolutional Networks
PDF
[MIRU2018] Global Average Poolingの特性を用いたAttention Branch Network
PDF
[DL輪読会]Pervasive Attention: 2D Convolutional Neural Networks for Sequence-to-...
PDF
B1-5 メール技術のいま
PDF
【DL輪読会】Can Neural Network Memorization Be Localized?
PDF
IIJmio meeting 21 MVNO用語集(MVNO・通信規格)
PPTX
Mask-RCNNを用いたキャベツの結球認識
PDF
ロードバランスへの長い道
PPTX
[DL輪読会]Revisiting Deep Learning Models for Tabular Data (NeurIPS 2021) 表形式デー...
PDF
クラウドを支えるこれからの暗号技術
PDF
暗認本読書会5
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
PPTX
MS COCO Dataset Introduction
PDF
論文紹介 "DARTS: Differentiable Architecture Search"
PPTX
[DL輪読会]Pixel2Mesh: Generating 3D Mesh Models from Single RGB Images
PPTX
Triplet Loss 徹底解説
PDF
ZDD入門-お姉さんを救う方法
[DL輪読会]Attentive neural processes
Blazing Performance with Flame Graphs
[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Und...
[DL Hacks]Semi-Supervised Classification with Graph Convolutional Networks
[MIRU2018] Global Average Poolingの特性を用いたAttention Branch Network
[DL輪読会]Pervasive Attention: 2D Convolutional Neural Networks for Sequence-to-...
B1-5 メール技術のいま
【DL輪読会】Can Neural Network Memorization Be Localized?
IIJmio meeting 21 MVNO用語集(MVNO・通信規格)
Mask-RCNNを用いたキャベツの結球認識
ロードバランスへの長い道
[DL輪読会]Revisiting Deep Learning Models for Tabular Data (NeurIPS 2021) 表形式デー...
クラウドを支えるこれからの暗号技術
暗認本読書会5
Javaはどのように動くのか~スライドでわかるJVMの仕組み
MS COCO Dataset Introduction
論文紹介 "DARTS: Differentiable Architecture Search"
[DL輪読会]Pixel2Mesh: Generating 3D Mesh Models from Single RGB Images
Triplet Loss 徹底解説
ZDD入門-お姉さんを救う方法
Ad

Viewers also liked (20)

PDF
QGIS第二講 — 向量處理(1) 地理空間運算工具
PDF
QGIS第三講—地圖展示與匯出
PDF
Jupyter 簡介—互動式的筆記本系統
PDF
Taqm yunlin
PDF
Forest ecology — Vegetation classification and analysis
PDF
使用 zotero 做文獻管理及引用(1)
PDF
QGIS基本操作.
PPT
Blean School Flowers Project
PPTX
Ancillary production
DOC
Makalah sistem informasi
PDF
DOG WALKER VOLUNTEER PACKAGE
PPTX
презентація до занять школа етикету2
PPTX
Akhlaq tasawuf
PPTX
TASTE POWER POINT
PPT
Indiabulls one gurgaon 99997.44778 Sachiv Chawla indiabulls new project gurga...
PPTX
Horror audiences
DOCX
圣严法师《学佛群疑》
PPTX
Los Tres Idiotas
PDF
阿含经故事选
QGIS第二講 — 向量處理(1) 地理空間運算工具
QGIS第三講—地圖展示與匯出
Jupyter 簡介—互動式的筆記本系統
Taqm yunlin
Forest ecology — Vegetation classification and analysis
使用 zotero 做文獻管理及引用(1)
QGIS基本操作.
Blean School Flowers Project
Ancillary production
Makalah sistem informasi
DOG WALKER VOLUNTEER PACKAGE
презентація до занять школа етикету2
Akhlaq tasawuf
TASTE POWER POINT
Indiabulls one gurgaon 99997.44778 Sachiv Chawla indiabulls new project gurga...
Horror audiences
圣严法师《学佛群疑》
Los Tres Idiotas
阿含经故事选
Ad

Similar to PostGIS 初入門應用 (20)

PPT
scrapy+sphinx搭建搜索引擎
PDF
Log collection
 
PDF
COSCUP 2019 - 開源大數據引擎 Greenplum
PDF
Jbug beijing 2011 rest easy introduction [兼容模式]
PPT
Tangramgrid
PDF
诗檀软件 Oracle开发优化基础
PPTX
Study research in April
PPTX
PostgreSQL 10 New Features
PPT
Coreseek/Sphinx 全文检索实践指南
PDF
Migrations 與 Schema操作
PDF
推薦系統實作
 
PPT
PDF
快速了解PostgreSQL
PPTX
5, OCP - oracle storage
PPTX
Sass与compass学习笔记
PDF
MySQL查询优化浅析
PPTX
Web scraping入門1
PDF
Web development with zend framework
PPTX
淘宝数据魔方的系统架构 -长林
PPT
Mongo db技术交流
scrapy+sphinx搭建搜索引擎
Log collection
 
COSCUP 2019 - 開源大數據引擎 Greenplum
Jbug beijing 2011 rest easy introduction [兼容模式]
Tangramgrid
诗檀软件 Oracle开发优化基础
Study research in April
PostgreSQL 10 New Features
Coreseek/Sphinx 全文检索实践指南
Migrations 與 Schema操作
推薦系統實作
 
快速了解PostgreSQL
5, OCP - oracle storage
Sass与compass学习笔记
MySQL查询优化浅析
Web scraping入門1
Web development with zend framework
淘宝数据魔方的系统架构 -长林
Mongo db技术交流

Recently uploaded (20)

PPTX
学校原版巴斯大学毕业证Bath毕业证原版一比一
PPTX
3分钟读懂贝尔法斯特女王大学毕业证QUB毕业证学历认证
DOCX
孕經濟:月子中心產業發展現狀及未來策略探討 唯有與時俱進,不斷創新,才能在孕經濟浪潮中立於不敗之地。詹翔霖老師.docx
PPTX
3分钟读懂曼彻斯特大学毕业证UoM毕业证学历认证
PPTX
Chinese conversation Chinese conversation
PPTX
学校原版肯塔基大学毕业证UK毕业证原版一比一
PPTX
学校原版布鲁内尔大学毕业证Brunel毕业证原版一比一
PPTX
3分钟读懂皇家艺术学院毕业证RCA毕业证学历认证
PPTX
学校原版杜克大学毕业证Duke毕业证原版一比一
PPTX
3分钟读懂索尔福德大学毕业证Salford毕业证学历认证
PPTX
ONU and OLT from Baudcom Jenny training PPT
PPTX
3分钟读懂南威尔士大学毕业证UCB毕业证学历认证
PPTX
学校原版迈阿密大学毕业证UMiami毕业证原版一比一
PDF
01_Course_Introduction(20210916課後更新).pdf
PPTX
学校原版弗吉尼亚大学毕业证UVA毕业证原版一比一
PPTX
学校原版加州大学戴维斯分校毕业证UCD毕业证原版一比一
PPTX
学校原版阿斯顿大学毕业证Aston毕业证原版一比一
PPTX
学校原版剑桥大学毕业证Cantab毕业证原版一比一
PPTX
3分钟读懂曼彻斯特城市大学毕业证MMU毕业证学历认证
PPTX
3分钟读懂渥太华大学毕业证UO毕业证学历认证
学校原版巴斯大学毕业证Bath毕业证原版一比一
3分钟读懂贝尔法斯特女王大学毕业证QUB毕业证学历认证
孕經濟:月子中心產業發展現狀及未來策略探討 唯有與時俱進,不斷創新,才能在孕經濟浪潮中立於不敗之地。詹翔霖老師.docx
3分钟读懂曼彻斯特大学毕业证UoM毕业证学历认证
Chinese conversation Chinese conversation
学校原版肯塔基大学毕业证UK毕业证原版一比一
学校原版布鲁内尔大学毕业证Brunel毕业证原版一比一
3分钟读懂皇家艺术学院毕业证RCA毕业证学历认证
学校原版杜克大学毕业证Duke毕业证原版一比一
3分钟读懂索尔福德大学毕业证Salford毕业证学历认证
ONU and OLT from Baudcom Jenny training PPT
3分钟读懂南威尔士大学毕业证UCB毕业证学历认证
学校原版迈阿密大学毕业证UMiami毕业证原版一比一
01_Course_Introduction(20210916課後更新).pdf
学校原版弗吉尼亚大学毕业证UVA毕业证原版一比一
学校原版加州大学戴维斯分校毕业证UCD毕业证原版一比一
学校原版阿斯顿大学毕业证Aston毕业证原版一比一
学校原版剑桥大学毕业证Cantab毕业证原版一比一
3分钟读懂曼彻斯特城市大学毕业证MMU毕业证学历认证
3分钟读懂渥太华大学毕业证UO毕业证学历认证

PostGIS 初入門應用