オープンソースGISを用いた 自然環境解析講座

オープンソースGISを用いた
自然環境解析講座
C4: PostGISコース
2013年4月28日
NPO法人
地域自然情報ネットワーク
The Geoecological
Conservation
Network
The Geoecological Conservation Network
4
スキーマとは?
データベース用語のまとめ
実習3-1
SQL 101
データの検索、SELECT 文
実際にクエリを書いてみる
pgAdminⅢ SQL エディター
実習3-2-1
クエリの結果を並び替える
選択結果を集約するクエリ
集約クエリ
検索結果表示の限定: LIMIT
実習3-2-2
データの検索、WHERE 句
WHERE 句では
SQL のコツ
結果の出力
実習3-2-3
PostGIS 用のテーブルを作る
今日のクエリー:テーブル作成
テーブルの作成
PostGIS テーブルの作成
空間参照 ID (SRID)
基本のジオメトリータイプ
ジオメトリー列の挿入
実習3-3
PostGIS 用のテーブルを作る
データの挿入
データの挿入
点、線、ポリゴンの保存
ジオメトリを作る
ジオメトリーを作る
データの挿入
実習3-4
PostGIS 用のテーブルを作る
プライマリーキーの設定
空間インデックス・テーブル統計
実際には、、、
実習3-5
テーブルの結合
等結合
左外部結合
実習3-6
ビュー
ビューの作成
QGIS でテーブル及びビューを見る
実習3-7
エイリアス
今日のクエリー:エイリアス
SQL での演算
今日のクエリー:SQL での演算
今日のクエリー :属性情報検索
今日のクエリ2
目次
目次
自己紹介
PostGIS コース
講習内容
1.はじめに
この講習会が目指すもの
オープンソース GIS とは何か
PostGIS の歴史
PostGIS の良さ
PostGIS とそれを取り巻くソフトウェア
PostGIS リソース
WWW.GeoPacific.org
実習1
PostgreSQL・pgAdmin III を開く
データベースを調べる
テーブルの中身の確認
SQL エディタと SQL の実行
QGIS 可動の確認
2.PostGIS と オープンソースツール
PostGIS とは?
他の GIS とどこが違うか?
なぜ PostGIS を使うか
いつ PostGIS を使わないか
PostGIS のユーザーインターフェース
pgAdminⅢ
pgAdmin Ⅲと SQL エディタ
QGIS とは
QGIS による PostGIS データの表示
PostGIS を使う準備
データベースの作成
PostGIS データベースの新規作成
実習2-1
PostGIS へのデータのインポート
シェープファイルローダー
Shp2pgsql でインポート
PostGIS Shapefile and DBF loader 2.0
pgsql2shp と shp2pgsql
日本語エンコーディング
実習2-2
3.PostGIS -入門編-
PostGIS と PostgreSQL について
リレーショナルデータベースとは
DBMS と SQL
SQL とは
pgAdmin III
データベースの構造
データベース用語のまとめ
空間データベースの違い
テーブル
例:spatial_ref_sys テーブル
テーブル内のデータを検索する
ビュー
例:geometry_columns ビュー
1
3
4
4
5
5
6
6
7
7
8
8
10
10
11
11
12
12
13
13
14
14
15
15
16
16
17
18
18
19
19
20
20
21
21
23
24
24
27
27
28
28
29
29
30
30
31
31
32
32
33
33
1
34
34
35
38
39
39
40
40
41
41
42
42
43
43
44
44
45
46
46
47
47
49
50
50
51
52
53
53
54
54
55
55
56
56
57
57
58
59
59
60
60
62
62
63
63
64
65
65
66
66
67
67
68
DROP TABLE と DROP VIEW
今日のクエリー :属性情報検索2
実習3-8
4.PostGIS -応用編-
PostGIS による空間情報の検索
今日のクエリ―:空間情報検索
PostGIS によるジオメトリ操作
ジオメトリに関する様々な関数
サブクエリ
SQL:列追加とアップデート
今日のクエリー:ジオメトリ操作
今日のクエリ実行結果
実習4
PostGIS 用のテーブルを作る
復習:プライマリーキーの設定
プライマリキーを加えるには
空間インデックス
空間インデックスの作成
そのほかの PostGIS 機能
5.PostGIS によるラスタ解析
PostGIS2.0
ラスタのインポート
ラスタの表示
ラスタのデータタイプ
ラスタの機能
ポイント上のラスタ値を求める
実習5
SQL 解答例
PostGIS2.0 Cheatsheet (BostonGIS)
PostGIS2.0 Raster Cheatsheet (BostonGIS)
68
69
69
71
71
72
73
74
75
75
76
76
77
79
79
80
80
81
82
82
83
83
84
85
86
87
87
90
100
106
2
1
オープンソースGISを用いた
自然環境解析講座
PostGISコース
2013年4月28日
講師: 今木洋大
2
自己紹介
• GCNの紹介、スタッフの紹介
• 各自の自己紹介 (参加者全員で)
– 専門、バックグラウンド、何でも
– GISを何に使っているか?
– なぜオープンソースに興味があるか?
– 講習会に期待するもの
3
3
PostGISコース 講習内容
1.はじめに(60min)
4.PostGIS -応用編-(90min)
 オープンソース GISについて
 ソフトウェアーインストールの確認
 実習
 PostGISによる空間情報の検索 (SQL応
用編)
 PostGISによるジオメトリー操作 (基本的
なコマンド紹介。intersection, bufferなど)
 より複雑な検索
 実習
2.PostGISと オープンソースツール(60min)






PostGIS、PostgreSQLとは
QGISについて
データベースの作成方法
ベクタデータのPostGISへのインポート方法
日本語対応
実習
5.PostGISラスタ解析(30min)
 ラスタデータの取り扱い
 ラスタ解析の例
 実習
3.PostGIS-入門編-(90min)







PostGISとPostgreSQLについて (PostGISとは何か)
pgAdminとSQL (基本的なSQL構文について)
SQL入門
PostGISデータの作り方
テーブルの結合
ビューの作成
実習
4
1.はじめに
(60min)
 オープンソース GISについて
 ソフトウェアーインストールの確認
 実習
4
5
この講習会が目指すもの
• 例えば、
– サルの2000年1月から2010年12月の行動圏内の
毎月の植生割合を求める
– 土地区分によってバッファー距離が変化する河
畔林保護地域内の植生割合を全国都道府県毎
にまとめる
• といったGIS上の質問に素早くこたえられる
6
オープンソースGISとは何か
• オープンソースソフトウェアーとは、あるライセ
ンス契約の元、ソースコードが公開されてい
るソフトウェアーのことであり、そのライセンス
下ではソフトウェアーの改変とその再配布が
許されている。 (http://opensource.org/, 2007).
5
7
PostGISの歴史
• 2001年Refractions Research(カナダ)によって開
発開始
• 2005年4月、安定バージョン1.0リリース
• GNU General Public License
• 2013年3月、バージョン2.0.3リリース
–
–
–
–
–
–
データベース構成の変更
各種コマンドの強化
ラスターの取り扱い
シェープファイルローダーの改善
新しいインデックスの実装
ジオグラフィータイプのサポート
8
PostGISの良さ
• データベース
– データの安全性
– 大きなデータの取扱
• クエリと多様なファンクションにより細部に渡り、
解析をコントロールしやすい
• クエリを書くことにより質問に集中できる
• SQL自体が履歴ファイル
• 解析の繰り返し、やり直しがやりやすい
• ビューがレイヤとして扱える
• R、Pythonなどと連携しやすい(オープンソース)
6
9
PostGISとそれを取り巻くソフトウェア
ウェブマッピング
プログラミング
アプリケーション
開発
数値データの
解析
GISデータ視覚化
ベクタ・ラスタデータ
の保存、解析
10
PostGISリソース
• PostGIS:
http://postgis.net/
• Planet Postgis:
•
•
•
•
•
http://planet.postgis.net/
BostonGIS: http://www.bostongis.com/
OpenGeo: http://workshops.opengeo.org/postgis-intro/
Paul Ramseyのブログ: http://blog.cleverelephant.ca/
私のサイト: http://www.geopacific.org
英語の本
– PostGIS in Action Second Edition
• Regina O. Obe and Leo S. Hsu, Manning
7
11
WWW.GeoPacific.org
12
実習1
• ソフトウェアーインストールの確認
– PGAdminⅢを使って、PostgreSQL/PostGIS環境を見る
• template_postgis_20 データベースのテーブル、ビューには何が含ま
れているか?
• spatial_ref_sysテーブルにはどのような情報が収められているか?
– テーブルを開いてみる
• SQLクエリーエディタを開けて、以下のコマンドを実行
– select * from spatial_ref_sys limit 2;
• データーローダーの確認
– PGAdminⅢのアドイン、PostGIS Shapefile and DBF Loader 2.0が開けるか確
認
– QGISの動作確認
• postgis_training.qgsファイルをダブルクリックする
8
実習1
–
ソフトウェアーインストールの確認
pgAdminⅢを使って PostgreSQL/PostGIS のインストール確認
•
スタートメニューに「pgadmin」と入力して、pgAdminⅢを起動する
•
template_postgis_20 データベースがあるか確認
•
•
データベースのテーブルには何が含まれているか?
•
データベース、スキーマ、関数、テーブル、ビューの確認
•
PostGIS Shapefile and DBF loader プラグインの確認
•
•
見当たらなければ、"C:¥Program
Files¥PostgreSQL¥9.2¥bin¥postgisgui¥shp2pgsql-gui.exe" があるか確認。あれ
ば OK
–
QGIS インストールの確認
•
¥postgis¥map¥ postgis_training.qgs をダブルクリック
•
QGIS が上手く起動するか確認
9
13
PostgreSQL・pgAdmin IIIを開く
1.「PostgreSQL
9.1」をダブルク
リックしてサー
バーにアクセス
2.「データベース」
の+マークをク
リックしてデータ
ベースリストを展
開
3.
「template_postgis_
20」をクリックして
データベースにアク
セスした後、現れる
+マークをクリック
してデータベースを
展開
SQLエディターを
開く
PostGIS Shapefile
and DBF Loader
2.0を開く
データベースtemplate_postgis_20を
調べる
以下の内容がpgAdminⅢで確認できるか
サーバ
データベース
スキーマ
Public
テーブル
Spatial_ref_sys
ビュー
Geometry_columns
10
14
15
テーブルの中身の確認
1
1. 対象テーブルを
リストから選択
2. 「データを
ビュー」ボタンを
クリック
3. テーブルの表示
2
3
16
SQLエディタとSQLの実行
クエリの実行
1. SQLアイコン
をクリック
2. SQLエディタ
にクエリを書
く
3. 「クエリの実
行」ボタンを
クリック
11
17
QGIS可動の確認
• postgis_training.
qgsファイルをダ
ブルクリックして
QGISを起動
18
2.PostGISと オープンソースツール
(60min)






PostGIS、PostgreSQLとは
QGISについて
データベースの作成方法
ベクタデータのPostGISへのインポート方法
日本語対応
実習
12
19
PostGISとは?
•
•
•
空間情報データベースの一種
– 他にはOracle、MySQL、SQLite、IBM DB2、SQL Server2008、Ingres
等がある
– このうちオープンソースは、 PostgreSQL、MySQL、 SQLite、Ingres
空間情報データベースとは?
– リレーショナルデータベース
– ジオメトリー情報を格納
– 空間情報の検索やジオメトリーの操作を可能にした
PostgreSQLのライブラリ
– PostGISという単独のGISソフトウェアーではない
– PostgreSQLの機能拡張
20
他のGISとどこが違うか?
•
•
•
•
•
SQLで空間情報を解析
オープンソース(GNU General Public License)
無料
ローカル、サーバ両環境
様々なGISのバックエンドとして活躍
• 空間データの視覚化機能がない
– 最新のPostGISではpgAdminⅢからはデータの簡
単な視覚化が可能になっている
13
21
なぜPostGISを使うか
•
•
•
•
•
GISサーバーとして使える
強力なジオメトリ解析機能+標準のデータベース機能
オープンソースである
大きなデータを扱える
ウェブマッピングなどのバックエンドで使える
– MapServer, GeoServer, GeoDjangoなど
• 安定
• とにかくおもしろい
• などなど
22
いつPostGISを使わないか
• 地図作成
– GRASS、QGIS、MapServer、GeoServer、 市販製品、
• GISデータ入力・編集
– GRASS、QGIS、市販製品、
• GISデータ視覚化
– QGIS、GRASS、UDig、 MapServer、GeoServer、市販製品、
• ラスターデータ解析(まだ開発途上)
– GRASS、GDAL、市販製品、
• データフォーマット変換
– QGIS、GDAL/OGR、
• メタデータ閲覧
– QGIS、GDAL/OGR、
14
23
PostGISのユーザーインターフェース
• PostGISを使う=SQLを書いて実行する
– GUI管理・開発ツールpgAdminⅢを使う
– コマンドラインのpsqlを使う
– QGISのアドインを使う
24
pgAdminⅢ
• PostgreSQLデータベースの管理、データ検索
などに用いられる、オープンソースプログラム
• データベースの作成、テーブルの管理、クエ
リーの作成などがGUIで行える
15
25
pgAdmin ⅢとSQLエディタ
26
QGISとは
•
•
•
•
•
•
•
•
•
•
•
オープンソースGIS
データの視覚化、管理、編集、分析、地図の作成など
日本語化されている(OSGeo-Japan)
ユーザーインターフェースが洗練、使い安い
開発速度が速い
多様なラスター、ベクターデータを扱える
アドインを使うことで機能を拡張できる
比較的軽い
PostGISのビュアーとして使える
PostGISのジオメトリを編集できる
PostGISの様々なアドインが用意されている
16
1
QGISによるPostGISデータの表示
(データベースへの新規接続)
27
3
2
QGISによるPostGISデータの表示
PostGISにつなぐ
データベースを
選択し
テーブルを選択
し
加える
17
28
29
PostGISを使う準備
1. PostgreSQLデータベースの作成
– template_Postgis_20データベースをテンプレート
とした、PostGIS用のデータベースを作成
• 通常のPostgreSQLデータベースに様々な空間解析用
の機能が付け加えられたもの
2. ベクタ(ラスタ)データのインポート
– 既存のシェープファイルをデータベースのテーブ
ルとして取り込む
– Shapefileローダーを使ったシェープファイルのイ
ンポート
30
データベースの作成
• pgAdminⅢの起動
• サーバーへアクセス
– サーバーアイコンをダブルクリック
• データベースの新規作成
– データベースアイコンで右クリック
して新規作成
• テンプレート:template_postgis_20
• エンコーディング: utf8
• オーナー:postgres
18
31
PostGISデータベースの新規作成
テンプレート:
template_postgis_20
32
実習2-1:PostGISデータベースの作成
• PostGISデータベースを作成
– 以下のデータベースを作る
•
•
•
•
•
名前: macaca
オーナー:postgres
エンコーディング: UTF-8
Template:template_postgis_20
テーブル空間:pg_default
– 手順
• pgAdminⅢで、「データベース」を右クリック、「新しいデータベース」を選択
• 表示される「新しいデータベース」ウィンドウで以下の様な設定をし、データ
ベースを作成
– 「プロパティ」タブ
» 名前: macaca
» オーナー:postgres
– 「定義」タブ
» エンコーディング: UTF-8
» Template:template_postgis_20
» テーブル空間:pg_default
» コレーション:C
19
33
PostGISへのデータのインポート
• shp2pgsql (シェープファイルのインポート)
– コマンドライン
– GUI
• OGR(OGRでカバーされているファイル形式)
– ogr2ogr
• QGIS・SPITプラグイン(シェープファイルのイン
ポート)
pgAdminⅢからシェープファイルローダーを
呼び出す
20
34
Shp2pgsqlでシェープファイルを
インポート
35
データベース接
続設定
SRS、テーブル
名の指定
シェープファイ
ルの指定
36
PostGIS Shapefile and DBF loader 2.0
• バージョン2.0.3
• 複数のシェープファイルがインポートしやすく
なった
– 複数のシェープファイルのインポート
– 複数のDBFファイルのインポート
• PostGISデータのシェープファイルとしてのエク
スポートができるようになった
• 見当たらない場合は、plugins.iniに書き加える
21
37
PostGIS Shapefile and DBF loader 2.0
PostgreSQL
サーバーへの
接続設定
インポート先の
データベース名
サーバー接続
のテスト
38
PostGIS Shapefile and DBF loader 2.0
シェープファイ
ルの指定
インポート後の
テーブル名
スキーマ名
各項目を編集する場合は、その項目を
ダブルクリック
インポート後の
ジオメトリ列名
22
EPSGコード
39
PostGIS Shapefile and DBF loader 2.0
インポートするDBFの文字エンコード
列名の大文字、小文字の使用を保存す
るか。ディフォルトでは小文字を使用
Bigintデータタイプを許可するか
空間インデックスを作成するか
DBFのみをインポートするか
データインポート挿入ではなくコピーを使
うか
ジオメトリをGEGRAPHY列に読み込むか
40
pgsql2shpとshp2pgsql
• PostGISデーターをshapefileに変換(shp2pgsql)
またはその逆(pgsql2shp)
• PostgreSQLのフォルダ内、binフォルダに収め
られているコマンドラインツール
• 今回は使わない
pgsql2shp -f shepefile名 -h localhost -u postgres データ
ベース名 テーブル名
23
41
日本語エンコーディング
• PostgreSQL8.4から、データベースごとにロケール
の設定が可能
– ロケールの設定を「C」に設定するとエンコーディング
の設定に柔軟性が出る
– 日本語のエンコーディングは、UTF8がお勧め
• 詳しくは、
– http://www.postgresql.jp/document/pg833doc/html/l
ocale.html
– http://lets.postgresql.jp/documents/technical/textprocessing/2
42
実習2-2:シェープファイルのインポート
• データベースmacacaにデータをインポート
– エンコーディング:UTF-8
• 国勢調査データ(ポリゴン)
– \census\nikko_imaichi_32654_utf8.shp  census (テーブル名)
• ニホンザルの位置データ
– \monkey\location_all.dat_32654.shp  monkey (テーブル名)
• 河川
– \river\nikko_river_32654.shp  river (テーブル名)
• 植生
– \veg\nikko_vege_32654_utf8.shp  vegetation (テーブル名)
– エンコーディング:SHIFT-JIS
• 国勢調査データ(テーブル)
– \census\male_female_en.dbf  census_male_female (テーブル名)
– \census\occupation_en.dbf  census_occupation (テーブル名)
24
実習2-2:シェープファイルのインポート
•
データベース macaca に以下の Shapefile を Shapefile loader プラグインを使ってイン
ポート
–
今の時点では、何をしているかわからなくても OK
–
以下のファイルをデータベースにテーブルとしてインポート(括弧内はインポ
ート後のテーブル名と SRS)
–
•
¥census¥nikko_imaichi_32654_utf8.shp (census, 32654)
•
¥monkey¥location_all.dat_32654.shp (monkey, 32654)
•
¥river¥nikko_river_32654_utf8.shp (river, 32654)
•
¥veg¥nikko_vege_32654_utf8.shp (vegetation, 32654)
•
¥census¥male_female_en.dbf (census_male_felame)
•
¥census¥occupation_en.dbf (census_occupation)
手順
•
対象とするデータベース「macaca」を pgAdminⅢのオブジェクトブラ
ウザでシングルクリックしてアクティブにした後、「プラグイン」メニ
ューから「PostGIS Shapefile and DBF loader」を選択
•
データベースコネクションの設定
•
「View connection details」をクリックして、以下のように設定
•
Username: postgres
•
Password: 各自のパスワード(PostgreSQL インストール
時に設定したもの)
•
•
Server Host: localhost 5432
•
Database: macaca
•
Log Window に「Connection succeeded」が出れば成功
「PostGIS Shapefile Import/Export Manager」で以下のように設定し
て、シェープファイルをデータベースに取り込む
•
「Import」タブを選択
•
「Add File」をクリックして、対象の Shapefile を選択
•
「Import List」の「Table」列と、「SRID」列を取り込むデー
タに従って変更
•
インポートファイルリスト(エンコーディング UTF-8 )
•
集落データ:¥census¥nikko_imaichi_32654_utf8.shp
•
•
census (読込後のテーブル名)
サルデータ :monkey¥location_all.dat_32654.shp
•
•

 monkey (読込後のテーブル名)
河川:¥river¥nikko_river_32654_utf8.shp
•
25
 river (読込後のテーブル名)
•
植生:¥veg¥nikko_vege_32654_utf8.shp
•
•
 vegetation (読込後のテーブル名)
「Options…」ボタンをクリックし、以下のように設定
•
DBF file character encoding: UTF-8
•
Create spatial index automatically after load:
チェック
•
Load data using COPY rather than INSERT: チ
ェック
•
Import List の Table 列に、読み込み後のテーブル名とし
て、先にリストしたファイル名に続くテーブル名を入力
(既存のファイル名をダブルクリックして編集モードに
してから、新しいテーブル名を入力)
•
Import List の各 SRID を 32654 に変更
•
SRID 列の各セルをダブルクリックして編集モー
ドにし、「32654」を入力
•
•
「Import」ボタンをクリックして、インポートを開始
次に、以下の DBF をエンコーディング SHIFT-JIS で読み込む
•
まず、「PostGIS Shapefile Import/Export Manager」の
「Import List」にある各行の右側にある「Rm」ボックス
をチェックして、既存のファイルをリストから削除する。
•
「Add File」をクリックして目的とする DBF ファイルを
指定するが、DBF だけを読み込む際には、ファイル選択
ウィンドウの右下ドロップダウンリストで DBF Files を
先に選択する
•
Census フォルダから以下のテーブルをインポートする
•
¥census¥male_female_en.dbf
•
•
•
•
census_male_female
¥census¥occupation_en.dbf
•
•


census_occupation
「Options…」ボタンをクリックし、以下のように設定
•
DBF file character encoding: SHIFT-JIS
•
Load only attribute (dbf) data: チェック
•
それ以外はオフ
他の設定はそのままにして「Import」ボタンをクリック
PgAdminIII を開き、作成した macaca データベースの「Public」
スキーマ、「テーブル」を展開し、インポートした各データがテ
ーブルになっていることを確認
26
43
3.PostGIS -入門編-
(90min)







PostGISとPostgreSQLについて
pgAdminとSQL
SQL入門
PostGISデータの作り方
テーブルの結合
ビューの作成
実習
PostGISとPostgreSQLについて
(PostGISとは何か)
• PostgreSQLはオープンソースのリレーショナル
データベース
– OracleやAccessなどが商用の代表例
• PostGISとは、PostgreSQLデーターベースを機
能拡張させ、空間情報を扱えるようにした空
間データベース
• 空間情報の検索、作成、操作ができる
• バージョン2.0からは、ベクタに加えラスタ
データも扱える
27
44
45
リレーショナルデータベースとは
• 関係データベース(リレーショナルデータベー
ス)は関係モデル(リレーショナルデータモデ
ル)にもとづいて設計、開発されるデータベー
スである。
• 現在では、データベースという語が関係デー
タベースを指していることが多い。
http://ja.wikipedia.org/ より引用
46
DBMSとSQL
• PostGISを使うには、PostgreSQLを使う必要が
有るため、データベースの基礎知識が必要と
なる
– PostGISを学ぶ ⇒ PostgreSQLを学ぶ
• データベースを扱う ≒ SQL(シークェル, エス
キューエル)というデータベース言語を使う
– PostGISを使うため、SQLをpgAdmin III を使って勉
強する
28
47
SQLとは
• SQL(シークェル, エスキューエル)は、リレー
ショナルデータベース管理システム (RDBMS)
において、データの操作や定義を行うための
データベー言語(問い合わせ言語)である
• 具体的な操作としては、
– データの検索、変更、削除
– データを収めるテーブルの作成、削除、変更
– テーブル間の関係を表現するビューの作成
– 、、、
48
pgAdmin III
データベースのリスト
データベースの中身
29
49
データベースの
構造
スキーマ
ファンクション
スキーマが収められ
ている
PostGISのすべての
ファンクションが収
められている
各テーブルのジオメ
ジオメトリーコラム
トリーについての情
テーブル
報が収められる
空間参照系
テーブル
空間参照系(SRS)に
ついての情報が収
められている
ビュー
ビューが収められて
いる
50
データベース用語のまとめ
• データベース
– スキーマ
– データベースの下に作られ
るディレクトリー構造のよう
なもの
• テーブル
– データを収める入れ物
• ビュー
– データ自身ではなく、データ
を検索するクエリーを保存
したもの
30
通常のデータベースと
空間データベースの違い
通常のデータベース
51
空間データベース
52
テーブル
• 実際にデータを保存する単位
列(カラム):
データの属性を定義
行(レコード):
データの最小単位、
列の集合
値(フィールド):
データの最小単位
31
53
例:spatial_ref_sys テーブル
• 空間参照系(SRS)の定義に関する情報が収
められている
54
テーブル内のデータを検索する
spatial_ref_sys テーブル
SQL文
SELECT auth_srid FROM spatial_ref_sys;
32
検索結果
55
ビュー
• SQLで作ったクエリ自体
• ビューを呼び出すごとにSQL文が実行される
– テーブルの更新を常に反映
• データは含まない
– テーブルではない
• 使いこなせばとても便利
– ビューをGISのレイヤとして読み込める!
– 実習で
ビューの例
56
例:geometry_columns ビュー
• 各テーブルのジオメトリーに関する情報を収める
ビュー(PostGIS独自のもの)
• 空間情報を持つテーブルのメタデータを自動的に集
める
– GeoServerなどのアプリケーションはこのビューをメタデー
タとして参照する
CREATE OR REPLACE VIEW geometry_columns AS SELECT current_database()::character varying(256) AS f_table_catalog, n.nspname::character
varying(256) AS f_table_schema, c.relname::character varying(256) AS f_table_name, a.attname::character varying(256) AS f_geometry_column,
COALESCE(NULLIF(postgis_typmod_dims(a.atttypmod), 2), postgis_constraint_dims(n.nspname::text, c.relname::text, a.attname::text), 2) AS
coord_dimension, COALESCE(NULLIF(postgis_typmod_srid(a.atttypmod), 0), postgis_constraint_srid(n.nspname::text, c.relname::text,
a.attname::text), 0) AS srid, replace(replace(COALESCE(NULLIF(upper(postgis_typmod_type(a.atttypmod)), 'GEOMETRY'::text),
postgis_constraint_type(n.nspname::text, c.relname::text, a.attname::text)::text, 'GEOMETRY'::text), 'ZM'::text, ''::text), 'Z'::text, ''::text)::character
varying(30) AS type FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE t.typname = 'geometry'::name AND a.attisdropped = false
AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND (c.relkind = 'r'::"char" OR c.relkind = 'v'::"char") AND NOT
pg_is_other_temp_schema(c.relnamespace) AND NOT (n.nspname = 'public'::name AND c.relname = 'raster_columns'::name) AND
has_table_privilege(c.oid, 'SELECT'::text);
33
57
スキーマとは?
1. データベース内に作られるディレクトリーのようなもの
2. スキーマ間の情報検索が可能 (データベース間は
不可能)
3. 例えば、基本的なデータは、 ‘base’というスキーマに
保存し、プロジェクトAに関するデータは、’project_a’
というスキーマに保存する。
4. データのバックアップなど、維持管理が簡単になる。
5. スキーマごとにテーブルへのアクセスの権限設定が
できる
58
データベース用語のまとめ
• データベース
– スキーマ
– データベースの下に作られ
るディレクトリー構造のよう
なもの
• テーブル
– データを収める入れ物
• ビュー
– データ自身ではなく、データ
を検索するクエリーを保存
したもの
34
59
実習3-1
• 実習1でインポートしたデータを調べる
– データベース名
– スキーマ名
– テーブル名
• テーブルを開いて中身をみてみる
– ビュー
• ビューを実行してみる(開く)
• QGISでインポートしたデータを見る
60
メモ
35
実習3-1 pgAdminIII と QGIS
•
実習1でインポートしたデータを調べる
1. PgAdminIII を開き、データベースの構造を調べる
•
データベース
•
•
スキーマ
•
•
スキーマを展開し、Public スキーマを展開する
「関数」を開いてみる
•
•
macaca データベースを開き、書くアイテムを調べる
関数の幾つかを調べてみる
テーブル
•
テーブルを開いて中身をみてみる
•
census テーブルを選択した時、PgAdminIII の右側、
「プ
ロパティ」ウィンドウと「SQL」ビューがどのように変
化するか見る
•
•
他のテーブルも選択してみる
census テーブルを展開し(+マークをクリック)、テ
ーブルの定義を調べる
•
列数、制約、インデックスを調べる
•
•
ビュー
•
geometry_columns ビューをテーブルと同様に調べる
2. データ自体はどうやって見るのか??
•
目的のテーブルを PgAdminIII の画面左「オブジェクトブラウザ」で
選択した後、「選択オブジェクトでデータをビュー」ボタン
をク
リック
•
•
census テーブルのデータをみてみる
目的のテーブルを右クリックしてコンテクストメニューを表示し、
「デ
ータービュー」から状況にあったコマンドを選択する
•
大きいテーブルの場合は、「先頭100行の表示」が便利
36
•
QGIS でインポートしたデータを見る
1. QGIS を起動し、PostGIS レイヤの追加ボタン
をクリックする
2. 接続を以下の設定で新規作成
•
「接続」の「新規」ボタンをクリックし、「新規 PostGIS 接続を作成」
ウィンドウを表示
•
以下のように接続を設定し、「OK」をクリック
名称:macaca
ホスト:localhost
ポート:5432
データベース:macaca
ユーザー名:postgres
パスワード:各自
•
接続のドロップダウンリストで「macaca」を選択し接続
•
•
対象のテーブルを選択してから「追加」ボタンをクリック
37
61
SQL 101
• Structured Query Language
• データの問い合わせに特化した言語
• リレーショナルデータベースの操作
– データ定義
• CREATE TABLE, DROP TABLE,…
– データ操作
• SELECT, DELETE, UPDATE,…
– データ制御
• BEGIN,…
• PostGISは、SQLを使って空間的な情報の問い合
わせを可能にしている
62
SQL 101
SELECT place FROM 市町村;
• 「市町村」テーブルから、「place」列にあるデータ
を返す
• SELECT 列名 FROM テーブル名;
• 大文字小文字は関係ない
• SQL文の最後にはセミコロンを付ける
• すべての列を選択するには、「*」
– SELECT * FROM in_table
38
63
データの検索、SELECT文
• SELECT文を使い、必要な情報を検索する
日光
SELECT place FROM 市町村;
今市
湯元
テーブル名:市町村
Id
place
the_geom
1
日光
0101000020E6………
2
今市
0101000020E6………
3
湯元
0101000020E6………
64
実際にクエリを書いてみる
• 国勢調査(census)を
使ってクエリを書く練
習をする。
• データベース
「macaca」を開く
• SQLアイコンをクリッ
クしてSQLエディタを
開く
39
65
pgAdminⅢ SQLエディター
結果のエク
スポート
クエリの
実行
実行したい
文を選択
クエリの
結果出力
クエリの実行に
関するメッセージ
66
実習3-2-1:SELECT文
• SQLエディタを立ちあげ、国勢調査テーブル
(census)でクエリを試してみる
– オブジェクトブラウザでcensusテーブルを選択した
後、「任意のSQLクエリーを実行」
をクリック
• 国勢調査テーブル(census)から
– 集落の名前 (moji) とその人口 (jinko) を表示させ
る
• 文法: SELECT 列名1,列名2 FROM テーブル名;
40
67
クエリの結果を並び替える
-- 集落の名前とその人口を人口の多い順に表示させる
SELECT moji, jinko FROM census ORDER BY jinko DESC;
•
•
•
•
ORDER BY [列名] DESC (ASC)
一つまたは複数の列名を指定する
昇順(asc)、降順(desc)を指定する
昇順がデフォルト
68
選択結果を集約するクエリ
--集落名に重複があるので、重複した集落はまとめて人口の多い順に集落名
を表示する
SELECT moji, SUM (jinko) FROM census GROUP BY moji
ORDER BY sum DESC;
• 重複する値を利用してレコードを集約した結
果を返す
• 集約関数:合計「sum」、最大「max」、最小
「min」、平均「avg」、サンプル数「count」
41
69
集約クエリ
--集落名に重複があるので、重複した集落はまとめて人口の多い順に集落名
を表示する
SELECT moji, SUM (jinko) FROM census GROUP BY moji
ORDER BY sum DESC;
テーブル名:census
id
moji
jinko
1
日光
50
2
今市
80
3
湯元
30
4
日光
100
5
日光
30
6
今市
200
moji
SUM
今市
280
日光
180
湯元
30
降
順
70
検索結果表示の限定: LIMIT
• 検索結果が多すぎる場合や、クエリを試しに
走らせてみたい場合、すべての結果を表示さ
せないようにしたい
– LIMIT の利用
• SELECT jinko FROM census LIMIT 5;
– この例では、選択されたレコードの内、上位5行だけ表示
• 並べ替え(ORDER BY)とLIMITを併用すると、ある属性
値の最大値、または最小値を持つレコードを表示でき
る
• SELECT jinko FROM census ORDER BY jinko LIMIT 1;
42
71
実習3-2-2:ORDER BYとGROUP BY
• 国勢調査テーブル(census)から
– 集落の名前(moji)とその人口 (jinko) を人口の多い順
に表示させる
• 文法: SELECT 列名1,列名2 FROM テーブル名
ORDER BY 列名 DESC;
– 集落名(moji)に重複があるので、重複した集落はまと
めて人口(jinko)の多い順に集落名と総人口を表示す
る
• 文法: SELECT 列名1,SUM(列名2) FROM テーブル名
GROUP BY 列名1 ORDER BY SUM DESC;
– 最も人口の多い集落名(moji)とその人口だけを表示
• 文法: SELECT 列名1,SUM(列名2) FROM テーブル名
GROUP BY 列名1 ORDER BY SUM DESC LIMIT 1;
72
データの検索、WHERE句
• WHERE句で条件を絞り込む
SELECT place FROM 市町村
WHERE id = 1;
テーブル名:市町村
id
place
the_geom
1
日光
0101000020E6………
2
今市
0101000020E6………
3
湯元
0101000020E6………
43
日光
73
WHERE句では
• 条件の絞り込みには以下の比較演算子を使う




=
<、>、<=、>=
<>
!=
• また、AND、OR、NOT、IN、LIKE、EXISTS、BETWEENなどの
演算子も使える
– 詳しくは:
http://www.postgresql.jp/document/pg911doc/html/functions.
html
• 条件がテキストの場合は、シングルクウォートで文字を囲
む必要がある
– 例: SELECT * FROM census WHERE ken_name = '栃木県' ;
74
SQLのコツ
• 細かいことは後にして、、、
• SQLは具体例から学ぶのが一番
• SQLは簡単なクエリを作り、実行しながらどん
どん条件を足していく。例えば
SELECT place FROM 市町村;
SELECT place FROM 市町村 WHERE id <= 2;
SELECT place FROM 市町村 WHERE id <=2 AND place LIKE ‘東%’;
44
75
SQLのコツ
SELECT place FROM 市町村 LIMIT 10;
• LIMITを使うことで、戻ってくるデータの件数を
制限する
• クエリを試す際に便利
76
結果の出力
• クエリで得られた結果は、pgAdminⅢの「ファ
イル」メニュー、「エクスポート」でテキストファ
イルとして出力できる
45
77
実習3-2-3:WHERE句
• SQLエディタを立ちあげ、国勢調査テーブル
(census)でクエリを試してみる
– 国勢調査テーブル(census)から
• 市町村名(gst_name)「今市市」に該当するすべての列(デー
タ)を表示(WHERE句)
• 市町村名(gst_name)「今市市」に該当するデーターが何件
あるか調べる(WHERE句とGROUP BY)
• 人口の多い順に集落名を表示した結果をテキス
トファイルとして保存
• クエリーウィンドウの「エクスポート」を利用
– 列区切り文字を「,」に指定して、ファイル名の拡張子をCSVにす
る
78
PostGIS用のテーブルを作る
1.
2.
3.
4.
5.
テーブルの作成
データの挿入
プライマリキーの設定
インデックスの作成
テーブル統計の取得
46
テーブル名:市町村
id
place geom
1
日光
0101000………
2
今市
0101000………
3
湯元
0101000………
79
今日のクエリー:テーブル作成
--PostGISテーブルを初めから作る
CREATE TABLE 市町村 (id int4, place varchar (20), geom geometry(Point, 4326));
INSERT INTO 市町村 VALUES (1, '日光', ST_GeomFromText ('POINT (139.619492
36.747919)', 4326));
INSERT INTO 市町村 VALUES (2, '今市', ST_GeomFromText ('POINT (139.684039
36.726429)', 4326));
INSERT INTO 市町村 VALUES (3, '湯元', ST_GeomFromText ('POINT (139.424574
36.806853)', 4326));
INSERT INTO 市町村 VALUES (4, '鹿沼', ST_GeomFromText ('POINT (139.745013
36.567110)', 4326));
ALTER TABLE 市町村 ADD CONSTRAINT pkey_市町村 PRIMARY KEY (id);
CREATE INDEX idx_市町村 on 市町村 (id);
CREATE INDEX gist_市町村 on 市町村 USING GIST (the_geom);
80
テーブルの作成
• データを収納する空のテーブルを作成する
• テーブル名、列名には日本語も使用可能
– ただし、列名に日本語を使うと、ダブルクオーテーション
マークを使う必要があるため、半角英数字を使うほうが便
利
– 列名にはName, tableなどの幾つかの予約語があるので
使用を避ける
CREATE TABLE テーブル名 (
列名1 データタイプ,
列名2 データタイプ,
列名3 データタイプ);
47
列名1
列名2
列名3
81
テーブルの作成
• PostgreSQLのデータタイプ
データタイプ
説明
例
int4
整数
3
float4
浮動小数点数
1.023
varchar()
テキスト
‘Tokyo’
geometry
ジオメトリー
010200002E6****
date
日付
Wed Dec 17
time
時間
07:37:16 1997 PST
…
82
テーブルの作成
CREATE TABLE 市町村 (id int4, place varchar (20));
テーブルを作るコマンド
列名とデータタイプ
セミコロン
テーブル名
Id
列名とデータタイプ
place
48
83
PostGISテーブルの作成
• 通常のテーブルとの違いは、
– ジオメトリ列を含むだけ
• PostGISテーブル作成の手順
id
place geom
1
日光
0101000………
2
今市
0101000………
3
湯元
0101000………
1. PostGIS2.X
•
テーブル作成時にジオメトリー列も作成
–
•
CREATE TABLE
通常のテーブルにジオメトリー列を追加
–
ALTER TABLE *** ADD COLUMN
2. PostGIS1.X
•
通常のテーブルを作成した後、ジオメトリー列を入れる命
令を実行
–
SELECT ADDGEOMETRYCOLUMN
84
PostGISテーブルの作成
CREATE TABLE 市町村 (id int4, place varchar (20));
CREATE TABLE 市町村 (id int4, place varchar (20),
geom geometry(POINT, 4326));
ジオメトリ列名
ジオメトリタイプとSRS
データタイプ
Id
place
49
geom
85
空間参照ID (SRID)
• 座標参照系(CRS・SRS)が標準化されている
• 代表的なコード系はEPSG (European Petroleum
Survey Group) コード
• 例えば、
参照系名
EPSGコード
WGS84
4326
日本測地系2000:JGD2000
4612
WGS84 / UTM zone 54N
32654
• www.spatialreference.orgを利用して、SRSの検索
ができる
86
基本のジオメトリータイプ
• POINT
• LINESTRING
• POLYGON
50
87
ジオメトリー列の挿入
• テーブルの変更(ALTER TABLE)
– すでにあるテーブルに列を加えたり、削除したり、
列名を変更したり、様々な制限を加えたりする
ALTER TABLE 市町村 ADD COLUMN
geom geometry(Point, 4326);
テーブル名:市町村
Id
Id
place
place
geom
88
ジオメトリー列の挿入
テーブル名
ALTER TABLE 市町村
ADD COLUMN geom geometry (Point, 4326);
空間参照系
データタイプ
ジオメト (EPSG)
ジオメトリー列名
リータイプ
テーブル名:市町村
Id
Id
place
51
place
geom
89
ジオメトリー列の挿入
ALTER TABLE 市町村 ADD COLUMN geom
geometry(Point, 4326);
テーブル名:市町村
Id
place
1. 市町村にジオメトリーを保存す
るための列を挿入
geom
1
2. geometry_columns ビューには
自動的にテーブルに関する情
報が収められる
2
3
ビュー名:geometry_columns
Id
Schema
Table
Name
Geometry
Column
SRID
Geometry
Type
Dimension
1
Public
市町村
the_geom
4326
POINT
2
90
実習3-3:CREATE TABLE文
•
日光、今市、湯元の人口を示す以下の「人口」テーブ
ルを作る
id
– テーブル名:「人口」
– 列名とデータタイプ
•
•
テーブル名:人口
population
Id (int4)
Population (int4)
– 文法:CREATE TABLE テーブル名 (列名1 データタイプ, 列
名2 データタイプ);
•
市町村の位置を示す「市町村」テーブルを作る
–
–
–
–
テーブル名「市町村」
ジオメトリタイプ:POINT
EPSG:4326
列名とデータタイプ
•
•
•
テーブル名:市町村
id
id (int4)
place (varchar(20))
geom (geometry)
– 文法:CREATE TABLE テーブル名 (列名1 データタイプ, 列
名2 データタイプ, ジオメトリ列名geometry (ジオメトリタイ
プ, SRID));
52
place
geom
91
PostGIS用のテーブルを作る
1.
2.
3.
4.
5.
テーブルの作成
データの挿入
プライマリキーの設定
インデックスの作成
テーブル統計の取得
テーブル名:市町村
id
place geom
1
日光
0101000………
2
今市
0101000………
3
湯元
0101000………
92
データの挿入
• 作成したテーブルにデータを挿入する
INSERT INTO テーブル名 (列名1, 列名2, 列名3) VALUES (値1, 値2, 値3);
列に左から順番に値を挿入する場合は列名の指定をしなくても良い
INSERT INTO テーブル名 VALUES (値1, 値2, 値3);
53
93
データの挿入
人口テーブル
id
population
id
population
1
30000
2
62000
3
1000
INSERT INTO 人口 (id, population) VALUES (1, 30000);
INSERT INTO 人口 (id, population) VALUES (1, 30000);
または、
INSERT
(id,(1,
population)
または、
INSERT
INTOINTO
人口人口
VALUES
30000); VALUES (1, 30000);
または、
INSERT INTO 人口 VALUES (1, 30000);
INSERT INTO 人口 VALUES (1, 30000);
点、線、ポリゴンはどうやってテーブル
に保存されているのか?
• 列として、特別なデータタイプである「ジオメト
リ」タイプを定義して、点、線、ポリゴンのジオ
メトリを保存する
• 保存されるジオメトリは、バイナリで保存され
ている
• PostGISには、テキストの緯度経度情報からバ
イナリのジオメトリを作成する関数がある
• PostGISの関数をINSERT文に入れて、ジオメト
id
place
geom
リをテーブルに収める
テーブル名:市町村
54
1
日光
0101000020E6………
2
今市
0101000020E6………
3
湯元
0101000020E6………
94
95
ジオメトリを作る
• PostGISではジオメトリはバイナリでジオメトリ
列に保存されている
SELECT ST_GeomFromText ( 'POINT (139.691701 35.689506)', 4326);
バイナリのジオメト
リーをテキスト表現か
ら作るコマンド
ジオメトリーをテキストで表現
SRID
バイナリをテキスト表示
SELECT ST_AsText (
ST_GeomFromText ( 'POINT (139.691701 35.689506)', 4326)
);
96
ジオメトリーを作る
ST_GeomFromText ('POINT (139.691701 35.689506)', 4326)
(139.691701 35.689506)
(経度 緯度)
スペース!
55
97
データの挿入
INSERT INTO 市町村 VALUES (
INSERT1,INTO 市町村 VALUES (
‘日光',
2,INTO 市町村 VALUES (
INSERT
ST_GeomFromText
('POINT (139.619492 36.747919)‘, 4326)
'今市',
3,
); ST_GeomFromText
('POINT (139.684039 36.726429)', 4326)
'湯元',
); ST_GeomFromText ('POINT (139.424574 36.806853)', 4326)
);
テーブル名:市町村
Id
id
place geom
the_geom
1
日光
0101000020E6………
2
今市
0101000020E6………
3
湯元
0101000020E6………
98
実習3-4:INSERT文
•
文法: INSERT INTO テーブル名 VALUES();
•
「人口」テーブルのid列とpopulation列にそれ
ぞれ以下のデータを挿入
– データ
• 1, 30000
• 2, 62000
• 3, 1000
•
「市町村」テーブルのid列、place列、geom列
に以下のデータを挿入
– データ
•
•
•
•
1, 日光, POINT (139.619492
2, 今市, POINT (139.684039
3, 湯元, POINT (139.424574
4, 鹿沼, POINT (139.745013
36.747919)
36.726429)
36.806853)
36.567110)
56
id
population
1
30000
2
62000
3
1000
id
place
geom
1
日光
0101000………
2
今市
0101000………
3
湯元
0101000………
4
鹿沼
0101000………
99
PostGIS用のテーブルを作る
1.
2.
3.
4.
5.
テーブルの作成
データの挿入
プライマリキーの設定
インデックスの作成
テーブル統計の取得
テーブル名:市町村
id
place geom
1
日光
0101000………
2
今市
0101000………
3
湯元
0101000………
100
プライマリーキーの設定
• プライマリーキーとは、テーブルの各行を一
意に識別するための列。QGISでデータを見る
ために必要。この場合、Idをキーに設定。
テーブル名:市町村
id
place
the_geom
1
日光
0101000020E6………
2
今市
0101000020E6………
3
湯元
0101000020E6………
ALTER TABLE 市町村 ADD CONSTRAINT pkey_市町村
PRIMARY KEY (id);
57
101
プライマリーキーの設定
• データ(各行)が一意であることを保障する仕組み
テーブルに何かしらの規制を加えるためのコマンド
制限名。この場合
プライマリーキー名
ALTER TABLE 市町村 ADD CONSTRAINT pkey_my_table
PRIMARY KEY (Id);
規制がプライマ
リーキーである
ことの宣言
プライマ
リーキー
を設定す
る列名
テーブル名:市町村
id
place
the_geom
1
日光
0101000020E6………
2
今市
0101000020E6………
3
湯元
0101000020E6………
102
空間インデックス・テーブル統計の取得
• 後ほど。。。
-- プライマリーキーの設定
ALTER TABLE 市町村 ADD CONSTRAINT pkey_市町村 PRIMARY KEY (id);
-- インデックスの作成
CREATE INDEX idx_市町村 on 市町村 (id);
-- 空間インデックスの作成
CREATE INDEX gist_市町村 on 市町村 USING GIST (the_geom);
-- テーブルに関する情報を収集する
VACUUM ANALYZE 市町村;
58
103
実際には、、、
• テーブルをいちから作り上げることは少なく、
既存のデータを使うことが多い
• しかし、どの様にPostGISのデータが保存され
ているのか知ることは重要
104
実習3-5:プライマリキー、インデックス
• 以下のクエリを実行して「市町村」テーブルを完
成させる(インデックス、VACUUM ANALYZEにつ
いては、後ほど解説するので、今の時点ではた
だ実行してみて下さい)
– プライマリーキーの設定
• ALTER TABLE 市町村 ADD CONSTRAINT pkey_市町村
PIMARY KEY (id);
– インデックスの作成
• CREATE INDEX idx_市町村 on 市町村 (id);
– 空間インデックスの作成
• CREATE INDEX gist_市町村 on 市町村 USING GIST
(the_geom);
– テーブルに関する情報を収集する
• VACUUM ANALYZE 市町村;
59
105
テーブルの結合
• 複数のテーブルを共通のキー(列)を使って結合
する
• SELECT文で結合したテーブルの中から必要な列
だけを選択できる
• 結合には様々な種類があるが、等結合(inner
join)と外部結合(left join)が主
– Inner join, left (right, full) outer join, cross joinなどが
ある
– Inner joinはテーブル間に共通するキーだけを元にレ
コードを表示する
106
等結合
id
市町村
id
人口
1
日光
1
10000
2
今市
2
50000
3
鹿沼
4
120000
市町村テーブル
id
市町村
人口
1
日光
10000
2
今市
50000
人口テーブル
左外部結合
id
市町村
id
人口
id
市町村
人口
1
日光
1
10000
1
日光
10000
2
今市
2
50000
2
今市
50000
3
鹿沼
4
120000
3
鹿沼
NULL
市町村テーブル
人口テーブル
60
107
等結合
id
place
id
population
1
日光
1
10000
2
今市
2
50000
3
鹿沼
4
120000
市町村テーブル
id
place
population
1
日光
10000
2
今市
50000
人口テーブル
SELECT 市町村.id, 市町村.place, 人口.population
FROM 市町村, 人口
WHERE 市町村.id = 人口.id;
108
等結合
id
place
id
population
1
日光
1
10000
2
今市
2
50000
3
鹿沼
4
120000
市町村テーブル
id
place
population
1
日光
10000
2
今市
50000
人口テーブル
SELECT 市町村.id, 市町村.place, 人口.population
FROM 市町村, 人口
WHERE 市町村.id = 人口.id;
SELECT 市町村.id, 市町村.place, 人口.population
FROM 市町村 INNER JOIN 人口
ON 市町村.id = 人口.id;
61
109
左外部結合
id
place
id
population
id
place
population
1
日光
1
10000
1
日光
10000
2
今市
2
50000
2
今市
50000
3
鹿沼
4
120000
3
鹿沼
NULL
市町村テーブル
人口テーブル
SELECT 市町村.id, 市町村.place, 人口.population
FROM 市町村 LEFT JOIN 人口
ON 市町村.id = 人口.id;
110
実習3-6:テーブルの結合
• テーブル結合に関する以下のクエリを試す
-- テーブルの結合 (Inner Join)
SELECT 市町村.id, 市町村.place, 人口.population
FROM 市町村, 人口
WHERE 市町村.id = 人口.id;
-- テーブルの結合 (Inner Join)
SELECT 市町村.id, 市町村.place, 人口.population
FROM 市町村 INNER JOIN 人口
ON 市町村.id = 人口.id;
-- テーブルの結合 (Left join)
SELECT 市町村.id, 市町村.place, 人口.population
FROM 市町村 LEFT JOIN 人口
ON 市町村.id = 人口.id;
62
111
ビュー
•
•
•
•
SQLで作ったクエリ自体を保存したもの
ビューを呼び出すごとにSQL文が実行される
データは含まない
使いこなせばとても便利
– QGISでは、ビューを表示できる
112
ビューの作成
CREATE VIEW 市町村別人口 AS
SELECT 市町村.id, 市町村.place, 市町村.the_geom, 人口.population
FROM 市町村, 人口
WHERE 市町村.id = 人口.id
• GISのデータとしてビューを利用する
• データを視覚化できる
• 複数のテーブルからデータを持ち込める
• テーブルの変更を常に反映
• サイズが小さい
63
113
QGISでテーブル及びビューを見る
名称: macaca
ホスト: localhost
データベース: macaca
ユーザー名:postgres
パスワード:各自
114
QGISでテーブル及びビューを見る
64
実習3-7:ジオメトリを含むビューの
作成とQGISによるデータの閲覧
115
• 市町村テーブルと人口テーブルを結合したビューを作り、
ビューをQIGSで見る
• 以下の要領でビューを作成
CREATE VIEW 市町村別人口 AS
SELECT 市町村.id, 市町村.place, 市町村.geom, 人口.population
FROM 市町村, 人口
WHERE 市町村.id = 人口.id;
• 作成したビューをpgAdminIIIで見てみる
– ビューに作成した市町村別人口ビューが見当たらないときは、F5
キーを押すか、pgAdminIIIのリフレッシュボタン
を押す
• 作成したビューをQGISで見る
116
エイリアス
• テーブル名の表記またはクエリを別の短い名前で表す。た
とえば、
–
–
–
–
SELECT monkey.id, monkey.date FROM monkey;
が
SELECT t1.id, t1.date FROM monkey t1;
と表現できる。
• 複数のテーブルを使ったクエリでは、「テーブル名.列名」
の形式で引っ張ってくる列を指定するので、特にエイリア
スの利用が便利になる。
• また、クエリの結果返される列名にもエイリアスを使える
65
117
今日のクエリー:エイリアス
--年寄りの男女別人口を集落ごとに示し、年寄り率を求め、GISレイヤとして使え
るようにジオメトリとプライマリキーを入れたビューを作る
DROP VIEW IF EXISTS census_stat; --もしビューがあったら削除する
CREATE VIEW census_stat AS
SELECT t1.gid,
t1.moji,
t1.the_geom,
t2.total,
t2.m_egt65,
t2.f_egt65,
t2.tot_egt_65 / t2.total * 100 old_rate
FROM census t1, census_male_female t2
WHERE t1.key_code = t2.key_code
AND t2.total != 0
ORDER BY t2.f_egt75 DESC;
118
SQLでの演算
• 基本的な算術演算子、+、ー、*、/、が使
える
– http://www.postgresql.jp/document/9.1/html/fu
nctions-math.html
• 文字関数も多数用意されている
– http://www.postgresql.jp/document/9.1/html/fu
nctions-string.html
66
119
今日のクエリー:SQLでの演算
--年寄りの男女別人口を集落ごとに示し、年寄り率を求め、GISレイヤとして使え
るようにジオメトリとプライマリキーを入れたビューを作る
DROP VIEW IF EXISTS census_stat; --もしビューがあったら削除する
CREATE VIEW census_stat AS
SELECT t1.gid,
t1.moji,
t1.geom,
t2.total,
t2.m_gt65,
t2.f_gt65,
t2.tot_egt_65 / t2.total * 100 old_rate
FROM census t1, census_male_female t2
WHERE t1.key_code = t2.key_code
AND t2.total != 0
ORDER BY t2.f_egt65 DESC;
120
今日のクエリー :属性情報検索
--年寄りの男女別人口を集落ごとに示し、年寄り率を求め、GISレイヤとして使え
るようにジオメトリとプライマリキーを入れたビューを作る
DROP VIEW IF EXISTS census_stat; --もしビューがあったら削除する
CREATE VIEW census_stat AS
SELECT t1.gid,
t1.moji,
t1.geom,
t2.total,
t2.m_gt65,
t2.f_gt65,
2つのテーブルの
総人口が0のデータは
t2.tot_egt_65 / t2.total * 100 old_rate
等結合
除く
FROM census t1, census_male_female t2
WHERE t1.key_code = t2.key_code
AND t2.total != 0
ORDER BY t2.f_egt65 DESC;
67
121
今日のクエリ2
122
DROP TABLE と DROP VIEW
• 作成したテーブルまたはビューを削除する
– DROP TABLE テーブル名;
– DROP VIEWテーブル名;
• もしすでにテーブルがある場合に削除、ない
場合にはコマンドを無視
– DROP TABLE IF EXISTS テーブル名;
– 色々条件を変えながら行う作業に便利
68
123
今日のクエリー :属性情報検索2
--年寄りの男女別人口を集落ごとに示し、年寄り率を求め、GISレイヤとして使え
るようにジオメトリとプライマリキーを入れたビューを作る
DROP VIEW IF EXISTS census_stat; --もしビューがあったら削除する
CREATE VIEW census_stat AS
SELECT t1.gid,
t1.moji,
t1.geom,
t2.total,
t2.m_gt65,
t2.f_gt65,
t2.tot_egt_65 / t2.total * 100 old_rate
FROM census t1, census_male_female t2
WHERE t1.key_code = t2.key_code
AND t2.total != 0
ORDER BY t2.f_egt65 DESC;
124
実習3-8
• テーブルの結合
– 国勢調査のテーブル(census)と男女別人口テーブル
(census_male_female)を結合して、
• 65歳以上の人口(tot_egt_65)が一番多い集落名(moji)を見つける
• テーブルの結合とビューの作成
– 国勢調査のテーブルと職業別人口テーブルを結合したビューを作成
• 農林水産業(ag_forest)を営む人が一番多い集落と少ない集落(moji)を調べる
• 結合したビューをQGISで見てみる
– 年寄りの男女別人口を集落ごとに示し、年寄り率を求め、GISレイヤと
して使えるようにジオメトリとプライマリキーを入れたビューを作る以
下の属性値を各集落ポリゴン単位で表示できるようにする
–
–
–
–
–
総人口 (total)
65歳以上の人口 (tot_egt_65)
65歳以上の男性の人口 (m_gt65)
65歳以上の女性の人口 (f_gt65)
年寄り率= 65歳以上の人口 (tot_egt_65) /総人口 (total) * 100
69
実習3-8
•
ジオメトリを含むビューの作成と QGIS によるデータの閲覧
ジオメトリを含まないビューの作成
•
国勢調査のテーブル(census)と男女別人口テーブル(census_male_female)を
結合して、65 歳以上の人口(tot_egt_65)が一番多い集落名(moji)を見つける
•
SELECT 文
•
必要な列は census.moji と census_male_female.tot_egt_65
•
利用するテーブルは census と census_male_female
•
テーブルの結合は
•
•
•
where census.key_code = census_male_female.key_code
order by 列名 desc で人口の多い順に並べる
結果を pgAdminIII で見てみる
•
•
国勢調査のテーブル(census)と職業別人口テーブル(census_occupation)を結
合したビューを作成する
•
Create View ag_pop As ~~~
•
テーブルの結合は
•
where census.key_code = census_occupation.key_code
•
農林水産業を営む人(ag_forest_)が一番多い集落と少ない集落
(moji)をビューを開いてみてみる (大室 103)
•
年寄りの男女別人口を集落ごとに示し、年寄り率を求め、GIS レイヤとして
使えるようにジオメトリとプライマリキーを入れたビューを作る
•
男女別人口統計(census_male_female)、各集落ポリゴン(census)
•
テーブルの結合は
•
•
where census.key_code = census_male_female.key_code
以下の属性値を各集落ポリゴン単位で表示できるようにする
•
総人口 (total)
•
65 歳以上の人口 (tot_egt_65)
•
65 歳以上の男性の人口 (m_gt65)
•
65 歳以上の女性の人口 (f_gt65)
•
年寄り率(old_rate) = 65 歳以上の人口 (tot_egt_65) / 総人口
(total) * 100
•
年寄り率 (old_rage) の一番高い集落は?
•
70
(清滝新細尾町)
125
4.PostGIS -応用編-
(90min)




PostGISによる空間情報の検索(SQL応用編)
PostGISによるジオメトリー操作
より複雑な検索
実習
126
PostGISによる空間情報の検索
• 空間情報のクエリー
– SQL文+PostGIS空間解析関数
• 空間クエリーとは、空間に関した情報の検索
– サルの植生タイプの利用頻度を調べる
• サルの位置は点、植生タイプはポリゴン
• 点とポリゴンの位置関係に基づくクエリ
植生テーブル
サルテーブル
ID
植生タイプ
the_geom
ID
日付
the_geom
1
ミズナラ林
*******
1
2011/11/1
*******
2
スギ林
*******
2
2011/11/6
*******
3
水田
*******
3
2011/11/20
*******
71
127
PostGISによる空間情報の検索
SELECT 植生.植生タイプ, COUNT(サル.ID)
FROM 植生, サル
WHERE ST_INTERSECTS (植生.the_geom, サル.the_geom)
GROUP BY 植生.植生タイプ;
植生テーブル
ID
植生タイプ
the_geom
1
ミズナラ林
*******
2
スギ林
*******
3
水田
*******
サルテーブル
ID
日付
the_geom
1
2011/11/1
*******
2
2011/11/6
*******
3
2011/11/20
*******
植生タイプ
COUNT
ミズナラ林
2
スギ林
4
水田
2
128
今日のクエリ―:空間情報検索
--Ki群の1996年6月から9月の植生タイプの利用を調べる
SELECT
COUNT(t1.*),
t2.v_name
FROM monkey t1, vegetation t2
WHERE ST_INTERSECTS (t1.geom, t2.geom)
AND t1.troop = 'KI'
AND year = 1996
AND month BETWEEN 6 AND 9
GROUP BY t2.v_name
ORDER BY count;
72
129
PostGISによるジオメトリ操作
• ジオメトリー操作とは、ジオメトリーに手を加え
ること
• 例えば、
– 二つのポリゴンの交わる面を取り出す
– 複雑なポリゴンを単純化する
– 線にバッファーを発生させる
• PostGISにはさまざまなジオメトリー操作のた
めの機能がそろっている
130
PostGISによるジオメトリ操作
• サルの位置を示す点に200mのバッファを発
生させ、植生ポリゴンを切り抜く
サルテーブル
ID
日付
the_geom
1
3/17
*******
2
3/18
*******
3
3/19
*******
ST_Buffer ( t1.geom, 200 )
植生テーブル
ID
植生タイプ
the_geom
1
ミズナラ林
*******
2
スギ林
*******
3
水田
*******
ST_Intersection (
ST_Buffer ( t1.the_geom, 200 ), t2.the_geom )
73
131
PostGISによるジオメトリ操作
--点に200mのバッファーを発生させ、ポリゴン界を融解させる
CREATE TABLE bufferd_monkey AS
SELECT
ST_UNION ( ST_BUFFER ( geom, 200 ) ) geom
FROM river
--発生させたバッファーで植生ポリゴンを切り抜く
SELECT
t2.v_name,
ST_INTERSECTION (t1.geom, t2.geom) geom
FROM bufferd_monkey t1, vegetation t2
WHERE ST_INTERSECTS (t1.geom, t2.geom);
132
ジオメトリに関する様々な関数
• ST_Intersection (t1.geom, t2.geom)
– 2つのジオメトリの交差を求める
• ST_Union (geom)
– ジオメトリを溶融させる
• ST_Buffer (geometry, distance ),
– バッファを発生させる
• ST_Intersects (t1.geom, t2.geom)
– 2つのレイヤの地物が重なるかどうか
• ST_Area (geom)
– 地物の面積を求める
• その他多数
74
133
サブクエリ
• クエリーの中で使われるクエリ
– クエリで得られた結果を使ってクエリを実行する
SELECT
t2.v_name,
ST_INTERSECTION(t1.geom, t2.geom) geom
FROM
(SELECT
ST_UNION(ST_BUFFER(geom, 200)) geom
FROM monkey ) t1,
vegetation t2
WHERE ST_INTERSECTS(t1.geom, t2.geom);
134
SQL:列追加とアップデート
• テーブルに新しい列を加える
– Alter Table テーブル名 ADD 列名 データタイプ;
• 列に既存の列を利用して値を入力する
– Update テーブル SET 対象列 = 値
• 既存のジオメトリ列を使って、ポリゴンの面積を示す列
を加える
--次に新しい列を作って各植生ポリゴンの面積を求める
ALTER TABLE riparian ADD area_m2 float4;
UPDATE riparian
SET area_m2 = ST_Area (geom);
75
今日のクエリー:ジオメトリ操作
135
-- Ki群が1996年6月から9月に利用したポイントに、200mのバッファーを発生させ、
-- その中の植生割合を求める
CREATE TABLE monkey_buffered AS
SELECT
t2.v_name,
ST_INTERSECTION(t1.geom, t2.geom) geom
FROM
(SELECT
ST_UNION(ST_BUFFER(geom, 200)) geom
FROM ki_points) t1,
vegetation t2
WHERE ST_INTERSECTS(t1.geom, t2.geom);
--次に新しい列を作って各植生ポリゴンの面積を求める
ALTER TABLE monkey_buffered ADD area_m2 float4;
UPDATE monkey_buffered SET area_m2 = ST_Area (geom);
--最後に植生タイプでポリゴンの面積を集計する
SELECT v_name, SUM ( area_m2 /1000000) area_km2 FROM monkey_buffered
GROUP BY v_name ORDER BY area_km2 DESC;
136
今日のクエリ実行結果
76
137
実習4:ニホンザルの生息地解析
• Ki群が1996年6月から9月に利用した植生タイプ
を求め、その頻度を示す
• Ki群の1996年6月から9月の行動圏(最外郭法)
を描く
– ST_ConvexHull(geom)
– QGISで行動圏を表示し、確認する
• Ki群の1996年6月から9月の行動圏内の植生割
合を求める
– ST_Intersection(geom, geom)
• 利用可能な植生(行動圏内)と実際に利用した
植生(サルのポイント)を比較する
138
メモ
77
実習 4
•
ニホンザルの生息地解析
Ki 群(troop=’KI’)が 1996 年(year)6 月(month)から 9 月(month)に利用した植生タイプ
(v_name)の頻度を調べる
•
–
テーブル:monkey, vegetation
–
Postgis の関数:st_intersects()
–
6 月から 9 月の間:month BETWEEN 6 AND
9
Ki 群が 1996 年 6 月から 9 月に利用したポイントに、植生情報を添付して新しいテー
ブル(ki_points)を作成
–
Monkey テーブルから troop、year、month、geom
–
Vegetation テーブルから v_name 列
–
その他の条件は、上のクエリと同じ
–
ジオメトリの重ね合わせを条件とするには、ST_Intersection(geom,geom)を
列
使う
–
•
作成したテーブルには、プライマリキーpk を加える
Ki 群が 1996 年 6 月から 9 月に利用したポイントに、200m のバッファーを発生させ、
その中の植生割合を求める
–
上で作った ki_points テーブルを利用
–
バッファを発生させた後、重なるバッファーの境界は融合させる
•
ST_Buffer(geom, 200)と ST_Union(geom)を利用
•
このプロセスはサブクエリにして、植生ポリゴンを切り抜くためのポ
リゴン作成を行う
•
–
植生ポリゴンの切り抜きは、ST_Intersection(geom, geom)で行う
–
作成したテーブルには、プライマリキーsn を加える
Ki 群の 1996 年 6 月から 9 月の行動圏(最外郭法)を描く
–
新しいテーブル ki_range で作成
–
点から最小凸型多角形方の行動圏を計算するには、
ST_ConvexHull(st_collect(geom))を使う
–
•
•
作成したテーブルには、プライマリキーsn を加える
Ki 群の 1996 年 6 月から 9 月の行動圏内の植生割合を求め比較する
–
Ki_range テーブルを使う
–
ST_Intersections()
–
作成したテーブルには、プライマリキーsn を加える
行動圏内と、位置ポイント、ポイントに 200m のバッファを発生させた領域の植生割
合を比べる
•
(オプション問題)解析対象の年 (1992 ~ 1996)、月 (1 ~ 12)、群れ (A, B, C, OG, KI,
GO)を変えて同じ解析をするにはどうしたらよいか?
78
139
PostGIS用のテーブルを作る
1.
2.
3.
4.
5.
6.
テーブルの作成
ジオメトリコラムの挿入
データの挿入
プライマリキーの設定
インデックスの作成
テーブル統計の取得
テーブル名:市町村
id
place the_geom
1
日光
0101000………
2
今市
0101000………
3
湯元
0101000………
140
復習:プライマリーキーの設定
• データ(各行)が一意であることを保障する仕組み
テーブルに何かしらの規制を加えるためのコマンド
制限名。この場合
プライマリーキー名
ALTER TABLE 市町村 ADD CONSTRAINT pkey_my_table
PRIMARY KEY (Id);
規制がプライマ
リーキーである
ことの宣言
プライマ
リーキー
を設定す
る列名
テーブル名:市町村
id
place
the_geom
1
日光
0101000020E6………
2
今市
0101000020E6………
3
湯元
0101000020E6………
79
後からテーブルにプライマリキーを加
えるには
141
ALTER TABLE テーブル名 ADD プライマリキー列名 serial
primary key;
142
空間インデックス
• 空間インデックスとは、ジオメトリーにつけられるインデックスで、
空間情報の検索を著しく早くすることができる。
• PostGISでは、ジオメトリーがバウンディングボックス(BBox)という
箱で各ジオメトリーを囲み、その箱同士の関係でインデックスを作
る
• 複雑なジオメトリーでも、箱にすれば2つの点で表せる
• PostGISの情報検索は実は2段階で行われる
– バウンディングボックスによる検索
– 実際のジオメトリー情報による検索
• インデックスは入れ子になった箱同士の関係を整理したもので、
目的の情報にすばやくアクセスすることを可能にする
80
143
空間インデックス
ネズミA
ネズミB
http://workshops.opengeo.org/stack-intro/postgis.html より引用
o例えば、ネズミAとネズミBの行動
圏の重複を調べるとする。
oネズミAの行動圏のBBOXはR8で
表され、ネズミBはR19で表される
oこの場合、実際のネズミAの行
動圏のポリゴンは500点から、ネ
ズミBは300点から構成されている
とする。
oAとBの行動圏が重複しないのは
明らかだが、もし空間インデックス
を使わないならば、ネズミBの300
点がネズミAの500点から構成さ
れるポリゴン内に落ちていないこ
とを調べる必要がある。
o空間インデックスを使えば、それ
ぞれの上位インデックスのR3とR7
が交差していないことから、これら
の行動圏が重複していないことが
インデックスの検索だけでわかる。
144
空間インデックスの作成
CREATE INDEX [インデックス名]
ON
[テーブル名]
USING GIST ( [ジオメトリー列名] );
Vacuum Analyze [テーブル名];
• インデックス名は自分でつける(何でもよい)
• Vaccum Analyzeは、インデックスを実際にクエ
リーで使えるようにするために必須
81
145
そのほかのPostGIS機能
•
管理機能 (16)
•
ジオメトリー作成 (28)
•
ジオメトリー情報の取り出し (32)
•
ジオメトリー編集 (25)
•
ジオメトリー出力 (10)
•
バウンディングボックスの位置関係を調べる (13 オペレーター)
–
–
–
–
–
–
ジオメトリー列の追加: ST_AddGeometryColumn()
テキストからジオメトリーを作成: ST_GeometryFromText()
ジオメトリータイプを調べる: ST_GeometryType()
ジオメトリーの投影系・座標系を変換する: ST_Transform()
ジオメトリーをテキスト表示で返す: ST_AsEWKT()
バウンディングボックスの重なりを調べる: &&
•
空間関係と計測 (33)
•
ジオメトリー操作 (18)
•
リニアリファレンシング (6)
•
•
•
長いトランザクションのサポート(6)
上で分類しにくい機能 (16)
そのほかの機能 (3)
–
–
–
テキストの最後に、Boston
GISの作成した、PostGIS2.0
のコマンド早見表を添付
http://www.postgis.us/do
wnloads/postgis20_cheats
heet.pdf
ポリゴンの面積を返す: ST_Area()
バッファーを発生させる: ST_Buffer()
線上に落ちる点を発生させる: ST_Line_Interpolate_Point()
146
5.PostGISによるラスタ解析
(30min)
 ラスタデータの取り扱い
 ラスタ解析の例
 実習
82
147
PostGIS2.0
• 正式にラスタデータが取り扱える
• ラスタを取り込むraster2pgsql.exeを利用
• QGISのPostGIS Rasterアドインを使ってラス
ター表示
• 機能はまだ限定的
148
ラスタのインポート
• コマンドラインツール、raster2pgsql.exeを使っ
てGDALに対応しているラスタをインポート
raster2pgsql -s SRID -I -C -M -F -t
50x50 -l 2,4,8 in_raster out_table
オプション
-s SRSの指定
-I 空間インデックスを作成
-C 各種データ制限の付加
-M バキュームの実行
オプション
-F ファイル名を示す列を追加
-t タイリング指定。 縦x横 で指定
-l ピラミッド作成。1が元のサイズ
その他多数
83
149
ラスタのインポート
• 実際のインポートコマンドの例
– Nikko10m.tif をdemというテーブル名でインポート
– SRSは32654、タイルサイズは50x50、オーバービューは2, 4, 8の
3種類
– 空間インデックス、各種データ制限を加え、実行後にバキュー
ムを実行
– パイプ(|)を使って、結果を直接データベースmacacaに送る
raster2pgsql -s 32654 -I -C -M -F -t 50x50 -l 2,4,8
c:\gisdata\nikko10m.tif dem | psql -U postgres
macaca
150
ラスタの表示
• QGISの「Load Postgis Raster to QGIS 0.5.4」を
インストール
• 「PostGISレイヤの追加」であらかじめデータ
ベースへの接続を設定
• インストールしたアドインで、表示したいラスタ
を指定して表示
84
ラスタの表示
151
152
ラスタのデータタイプ
• ラスタの代表的データタイプ rasterとgeomval
– raster
• インポートしたデータ
• 複数のバンドを持てる
– geomval
• geomとvalの2つのフィールドから成るラスタデータタイ
プ
• geom: ジオメトリーオブジェクトを収納
• val: 倍精度浮動小数点数でピクセル値を収納
• ベクタデータとのインタラクションに使われる
85
153
ラスタの機能
•
•
•
•
•
•
•
•
•
ST_Clip()
ST_Aspect(), ST_Slope(), ST_Hillshade()
ST_Intersection()
ST_MapAlgebraExpr()
ST_Polygon()
ST_Reclass()
ST_Union()
ST_Interesects()
… その他多数
154
ポイント上のラスタ値を求める
-- 各点の標高を求める
SELECT
foo.rid,
foo.pk,
(foo.geom).geom the_geom,
(foo.geom).val elev
FROM
(SELECT
t2.rid,
t1.pk,
ST_Intersection(t1.geom, t2.rast) geom
FROM ki_points t1, dem t2
WHERE ST_Intersects(t1.geom, t2.rast) ) foo;
86
155
実習
• raster2pgsqlを使って、標高、傾斜、方位ラス
タをインポート
• QGISで読み込んだラスタを表示
• Ki群が1996年6月から9月に利用した場所
の標高、斜面傾斜、斜面方位を求める
87
実習 5

ラスタ
raster2pgsql を使ったラスタの読み込み


以下のファイルをインポート

¥dem¥nikko10m_dem_32654.tif

¥dem¥nikko10m_aspect_32654,tif

¥dem¥nikko10m_slope_32654.tif

¥dem¥nikko10m_hillshade_32654.tif
以下のコマンドを参考にする

raster2pgsql -s
32654 -I -C -M -F -t 50x50 -l 2,4,8
¥postgis¥dem¥nikko10m_dem_32654.tif dem | psql -U postgres
macaca

QGIS による PostGIS ラスタの表示

PostGIS Raster プラグインのインストール

QGIS のパイソンプラグインから、「Load Postgis Raster to QGIS 0.5.4」
をインストール

QGIS の「プラグイン」メニューから「Python プラグインを呼び出す
…」を選択し、プラグインインストーラーを呼び出す

「リポジトリ」タブで、「サードパーティーのリポジトリを追加」を
クリック

「オプション」タブで、「許可されたプラグイン」欄の「期限切れマ
ークがついていないすべてのプラグインを表示する」を選択

「プラグイン」タブのフィルターボックスに「Load postgis」と入れて
「Load Postgis Raster to QGIS 0.5.4」を見つけ出し、リストから対象
をクリックした後、「プラグインをインストール」ボタンをクリック
する

PostGIS Raster プラグインによるラスタデータの表示

インポートしたすべてのラスタを QGIS で表示

インストールした「Load Postgis Raster to QGIS 0.5.4」を呼び出し(お
そらくプラグインツールバーに象マークのアイコン
が追加
されている)、「postgis’s connection」として、対象とするデータベ
ース名、「Reading mode」として「Read one table as a raster」を選
択し、
リストされたレイヤーから読み込みたい Table 名をクリックし、
「Table name」欄に、テーブル名を表示させてから「OK」をクリッ
ク

「postgis’s connection」で対象とするデータベースが見つからない場
合は、データベース接続が設定されていないことが考えられるため、
88
QGIS の「PostGIS レイヤの追加」アイコンをクリックし、実習 3-1
を参考にして新規接続を設定する

Ki 群が 1996 年 6 月から 9 月の間に利用した場所(ki_points)の、標高、方位、
傾斜を求める

例:各点の標高を求めるには以下のクエリを使う
SELECT foo.rid, foo.pk, (foo.geom).geom the_geom, (foo.geom).val elev
FROM
(SELECT t2.rid, t1.pk, ST_Intersection(t1.geom, t2.rast) geom
FROM ki_points t1, dem t2
WHERE ST_Intersects(t1.geom, t2.rast)
) foo;
89
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
年月
コココ 実実実
-- 2013 4
PostGIS
SQL
-- Following SQL statements were written by Hiroo Imaki for
the PostGIS lecture that is going be organized by GCN. If you
have questions regarding following statements, please contact
[email protected]. Thanks!
実実
集集の名名ととの人人を表表さささ
-3-1
-SELECT moji,
jinko
FROM
census;
集集の名名ととの人人を人人の多い順に表表さささ
-SELECT
moji,
jinko
FROM
ORDER
census
BY
DESC;
jinko
集集名に重重ががさのが、重重しし集集ははとはは人人の多い順に集集名を表表すさ
-SELECT moji, SUM (jinko)
BY sum DESC;
最も人人の多い集集名
census GROUP BY
moji
ORDER
moji
ORDER
ととの人人だだを表表
-(moji)
SELECT moji, SUM (jinko)
BY sum DESC LIMIT 1;
実実
市市市名
FROM
FROM
census GROUP BY
句
-3-2 (where )
-(gst_name)
SELECT * FROM census WHERE gst_name = '
「今市市」に該該すさすすはの列(デコデ)を表表
今市市';
-- 市市市名(gst_name)「今市市」に該該すさデコデコが何何がさあ調すさ
SELECT count(*) FROM census WHERE gst_name = '今市市';
-- 実実3-3 (テコテテ作作)
--人人テコテテを作さ
CREATE TABLE 人人 (id int4, population int4);
--市市市テコテテを作さ
CREATE TABLE 市市市 (id int4, place varchar (20),
geom
geometry(POINT, 4326));
30
31
32
33
34
35
36
37
38
39
40
41
42
ププププププコを加えさ
人人 ADD CONSTRAINT pkey_人人 PRIMARY KEY (id);
--実実3-4
--人人テコテテにデコデを挿挿
INSERT INTO 人人 VALUES (1, 30000);
INSERT INTO 人人 VALUES (2, 62000);
INSERT INTO 人人 VALUES (3, 1000);
--市市市テコテテにデコデを挿挿
INSERT INTO 市市市 VALUES (1, '日日', ST_GeomFromText (
'POINT (139.619492 36.747919)', 4326));
INSERT INTO 市市市 VALUES (2, '今市', ST_GeomFromText (
-ALTER TABLE
90
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
'POINT (139.684039
INSERT INTO
'POINT (139.424574
INSERT INTO
'POINT (139.745013
市市市
市市市
36.726429)',
VALUES (3,
36.806853)',
VALUES (4,
36.567110)',
4326));
'
', ST_GeomFromText
4326));
'
', ST_GeomFromText
4326));
湯湯
鹿鹿
(
(
ジジジジプコテコジ
-SELECT ST_GeomFromText ( 'POINT (139.691701 35.689506)',
4326);
SELECT ST_AsText (
ST_GeomFromText ( 'POINT (139.691701 35.689506)', 4326)
);
実実
プププププコプコを加え、各各プイデイイコを作作し、テコテテ統統を取さ
市市市
市市市
市市市 市市市
市市市 市市市
-- テコテテに関すさ情情を収集すさ
VACUUM ANALYZE 市市市;
-3-5
-ALTER TABLE
ADD CONSTRAINT pkey_
PRIMARY KEY (id);
CREATE INDEX idx_
on
(id);
CREATE INDEX gist_
on
USING GIST (geom);
実実
テコテテの結結
市市市
市市市
人人.population
市市市 人人
市市市
人人
-- テコテテの結結 (Inner Join)
SELECT 市市市.id, 市市市.place, 人人.population
FROM 市市市 INNER JOIN 人人
ON 市市市.id = 人人.id;
-- テコテテの結結 (Left join)
SELECT 市市市.id, 市市市.place, 人人.population
FROM 市市市 LEFT JOIN 人人
ON 市市市.id = 人人.id;
-3-6
-(Inner Join)
SELECT
.id,
.place,
FROM
,
WHERE
.id =
.id;
実実
市市市テコテテと人人テコテテを結結ししししコを作さ
市市市市人人 AS
市市市
市市市
人人
市市市 人人
-3-7
-CREATE VIEW
SELECT
.id,
.place,
.population
FROM
,
91
市市市.id
WHERE
92
93
94
95
96
97
98
99
select
census.moji,
census_male_female.tot_egt_65
from census, census_male_female
where census.key_code = census_male_female.key_code
order by census_male_female.tot_egt_65 desc;
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
select
census.moji,
census_occupation.ag_forest_
from census, census_occupation
where census.key_code = census_occupation.key_code
order by census_occupation.ag_forest_ desc limit 1;
125
126
127
128
129
130
131
=
人人.id;
87
88
89
90
91
実実3-8 結結ししテコテテの検検
国国調国のテコテテ(census)と男男市人人テコテテ(census_male_female)を結結しは、65
歳歳歳の人人(tot_egt_65)が一一多い集集名(moji)を見つださ
---
国国調国のテコテテ(census)と職職市人人テコテテ(census_occupation)を結結し、農
林林林職を営む人(ag_forest_)が一一多い集集と少ない集集(moji)を調すさ
--
select
census.moji,
census_occupation.ag_forest_
from census, census_occupation
where census.key_code = census_occupation.key_code
order by census_occupation.ag_forest_ asc limit 1;
年年りの男男市人人を集集ごとに表し、年年り率を求は、 レプレとしは使えさええにししコを作さ
-GIS
create view census_stat as
select
census.gid,
census.moji,
census.geom,
census_male_female.total,
census_male_female.m_gt65,
census_male_female.f_gt65,
census_male_female.tot_egt_65 / census_male_female.total *
100 old_rate
from census, census_male_female
where census.key_code = census_male_female.key_code
and census_male_female.total != 0
order by old_rate desc;
--
今日のイのプコ2 (歳のイのプを完結にししもの)
92
年年りの男男市人人を集集ごとに表し、年年り率を求は、 レプレとしは使えさええにししコを作さ
もしししコががもしも削削すさ
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
-GIS
DROP VIEW IF EXISTS census_stat; -CREATE VIEW census_stat AS
SELECT t1.gid,
t1.moji,
t1.geom,
t2.total,
t2.m_gt65,
t2.f_gt65,
t2.tot_egt_65 / t2.total * 100 old_rate
FROM census t1, census_male_female t2
WHERE t1.key_code = t2.key_code
AND t2.total != 0
ORDER BY old_rate DESC;
176
177
178
drop table if exists ki_buf200_vege;
create table ki_buf200_vege as
select
実実
群の
-4
-- Ki
1996 6
9
SELECT
COUNT(t1.*),
t2.v_name
FROM monkey t1, vegetation t2
WHERE ST_INTERSECTS (t1.geom,
AND t1.troop = 'KI'
AND year = 1996
AND month BETWEEN 6 AND 9
GROUP BY t2.v_name
ORDER BY count;
群が
年 月あも 月の植植デププの利実を調すさ
t2.geom)
年 月あも 月に利実しししプイジに、植植情情を添添しは新しいテコテテを作作
-- Ki
1996 6
9
drop table if exists ki_points;
create table ki_points as
select t1.troop, t1.year, t1.month, t2.v_name, t1.geom
from monkey t1, vegetation t2
where st_intersects(t1.geom, t2.geom)
and t1.troop = 'KI'
and year = 1996
and month between 6 and 9
order by month;
-alter table ki_points add pk serial primary key;
Select * from ki_points;
ププププププコを加えさ
-Ki
群が1996年6月あも9月に利実しししプイジに、200mののイののコを発植ささ、との中の植植植結を求
はさ
93
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
t2.v_name,
ST_INTERSECTION(t1.geom, t2.geom) geom
from
(
SELECT
ST_UNION(ST_BUFFER(geom, 200)) geom
FROM ki_points
) t1,
vegetation t2
where ST_Intersects(t1.geom, t2.geom);
-- add primary key
alter table ki_buf200_vege add sn serial primary key;
群の
年 月あも 月の行行行を描く
-- Ki
1996 6
9
drop table if exists ki_range;
create table ki_range as
select ST_ConvexHull(st_collect(geom)) geom
from ki_points;
alter table ki_range add sn serial primary key;
行行行行の植植植植は?
-- Ki
select v_name, sum(vege) vege_area from
(select t2.v_name, ST_area(ST_intersection(t1.geom, t2.geom))
vege
from ki_range t1, vegetation t2
where ST_intersects(t1.geom, t2.geom)) foo
group by v_name
order by vege_area desc;
実実 プコデ
-5
-- raster2pgsql
--raster2pgsql -s 32654 -I -C -M -F -t 50x50 -l 2,4,8
c:\gisdata\gcn\class2012\postgis\dem\nikko10m_dem_32654.tif
dem | psql -U postgres macaca
--raster2pgsql -s 32654 -I -C -M -F -t 50x50 -l 2,4,8
c:\gisdata\gcn\class2012\postgis\dem\nikko10m_slope_32654.tif
slope | psql -U postgres macaca
--raster2pgsql -s 32654 -I -C -M -F -t 50x50 -l 2,4,8
c:\gisdata\gcn\class2012\postgis\dem\nikko10m_aspect_32654.tif
aspect | psql -U postgres macaca
--raster2pgsql -s 32654 -I -C -M -F -t 50x50 -l 2,4,8
c:\gisdata\gcn\class2012\postgis\dem\nikko10m_hillshade_32654.t
if hillshade | psql -U postgres macaca
を使もは、プコデをプイしコジ
プイしコジししプコデのジデデコデのイイイイ
--- http://trac.osgeo.org/postgis/wiki/WKTRasterTutorial01
94
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
SELECT (md).*, (bmd).*
FROM (SELECT ST_Metadata(rast) AS md,
ST_BandMetadata(rast) AS bmd
FROM dem LIMIT 1
) foo;
各各の標標を求はさ名に、イのプコのテコジをすさ
--- 4 sec
SELECT t2.rid,
(ST_Intersection(t2.rast, t1.geom)).geom AS the_geom,
(ST_Intersection(t2.rast, t1.geom)).val
FROM ki_points t1, dem t2
WHERE ST_Intersects(t1.geom, t2.rast)
limit 10;
-- 2 sec
select foo.rid, foo.pk, (foo.geom).geom the_geom, (foo.geom).
val elev
from
(SELECT t2.rid, t1.pk, ST_Intersection(t1.geom, t2.rast) geom
FROM ki_points t1, dem t2
WHERE ST_Intersects(t1.geom, t2.rast) limit 10
) foo;
各各の標標を求はさ
-select foo.rid, foo.pk, (foo.geom).geom the_geom, (foo.geom).
val elev
from
(SELECT t2.rid, t1.pk, ST_Intersection(t1.geom, t2.rast) geom
FROM ki_points t1, dem t2
WHERE ST_Intersects(t1.geom, t2.rast)
) foo;
各各の斜植斜斜を求はさ
-select foo.rid, foo.pk, (foo.geom).geom the_geom, (foo.geom).
val elev
from
(SELECT t2.rid, t1.pk,
ST_Intersection(t2.rast, t1.geom) geom
FROM ki_points t1,
slope t2
WHERE ST_Intersects(t2.rast, t1.geom))foo;
各各の斜植斜斜を求はさ
-select foo.rid, foo.pk, (foo.geom).geom the_geom, (foo.geom).
95
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
val elev
from
(SELECT t2.rid, t1.pk,
ST_Intersection(t2.rast, t1.geom) geom
FROM ki_points t1,
aspect t2
WHERE ST_Intersects(t2.rast, t1.geom))foo;
おはだ
群の行行行行に、プイララに各を発植ささは、実実ののテの利実利利と比比
プイララしプイジ発植実の関関 歳以のイのプは、ハプププジしは実行すさ、関関としは登登さささ
-1
-- Ki
--- http://trac.osgeo.org/postgis/wiki/WKTRasterTutorial01
CREATE OR REPLACE FUNCTION ST_RandomPoints(geom geometry, nb
int)
RETURNS SETOF geometry AS
$$
DECLARE
pt geometry;
xmin float8;
xmax float8;
ymin float8;
ymax float8;
xrange float8;
yrange float8;
srid int;
count integer := 0;
bcontains boolean := FALSE;
gtype text;
BEGIN
SELECT ST_GeometryType(geom)
INTO gtype;
IF ( gtype != 'ST_Polygon' ) AND ( gtype !=
'ST_MultiPolygon' ) THEN
RAISE EXCEPTION 'Attempting to get random point in a
non polygon geometry';
END IF;
SELECT ST_XMin(geom), ST_XMax(geom), ST_YMin(geom),
ST_YMax(geom), ST_SRID(geom)
INTO xmin, xmax, ymin, ymax, srid;
SELECT xmax - xmin, ymax - ymin
INTO xrange, yrange;
WHILE count < nb LOOP
SELECT ST_SetSRID(ST_MakePoint(xmin + xrange * random
(), ymin + yrange * random()), srid)
INTO pt;
SELECT ST_Contains(geom, pt)
INTO bcontains;
IF bcontains THEN
96
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
count := count + 1;
RETURN NEXT pt;
END IF;
END LOOP;
RETURN;
END;
$$
LANGUAGE 'plpgsql' IMMUTABLE STRICT;
実実に 群の行行行行にプイララしプイジを発植
-Ki
create table random_points as
SELECT generate_series(1, 100) AS id,
ST_RandomPoints(geom, 100) AS geom
FROM ki_range;
プイララしプイジの植植デププの利利を調すさ
-select v_name, count(v_name) from
(select t1.id, t2.v_name
from random_points t1, vegetation t2
where st_intersects(t1.geom, t2.geom)) foo
group by v_name
order by count desc;
連連関の発植
-select x, y from generate_series(1,10) as x cross join
generate_series(1,10) as y;
群さ市プイララのイププイラ
-(SELECT * FROM monkey WHERE troop =
ORDER BY random() LIMIT 100)
UNION
(SELECT * FROM monkey WHERE troop =
ORDER BY random() LIMIT 100);
'A'
'B'
おはだ2
河河あも一一の距距にがさ植植の植植を求はさ のコジバイ3 (0.3 sec)
のコジバイ2は時時が掛あさのと、重重重重の処処が期期と違えのが、今利はがもあはは河河のイののコを発
植ささ、一一、しプポイを融結ささはあも、植植しプポイを切り抜く (のイののコの距距は200が設一)
DROP TABLE IF EXISTS riparian;
--もしテコテテががもしも削削すさ
----
CREATE TABLE riparian AS
SELECT
t2.v_name,
ST_INTERSECTION(t1.geom, t2.geom) geom
FROM
(SELECT
97
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
ST_UNION(ST_BUFFER(geom, 200)) geom
FROM river WHERE rin = '
') t1,
vegetation t2
WHERE ST_INTERSECTS(t1.geom, t2.geom);
板板河
次に新しい列を作もは各植植しプポイの植植を求はさ
-ALTER TABLE riparian ADD area_m2 float4;
UPDATE riparian SET area_m2 = ST_Area (geom);
最最に植植デププがしプポイの植植を集統すさ
-SELECT v_name, SUM ( area_m2 / 1000000) area_km2 FROM
riparian
GROUP BY v_name ORDER BY area_km2 DESC;
条何にえりのイののコの幅を変変ささは、との中ののイののコ行の植植植結を求はさ
-drop table if exists riparian_variable;
create table riparian_variable as
select t2.v_name, st_intersection(t1.geom, t2.geom) geom
from
(select st_union(st_buffer(geom,
case
when gid = 1399 THEN 25
when gid = 1539 THEN 50
when gid = 1493 THEN 250
ELSE 100
END
)) geom from river where rin = '
') t1, vegetation t2
where st_intersects(t1.geom, t2.geom);
板板河
おはだ
斜斜プコデコを
が作作
斜斜プコデコを
が作作
-3
-PostGIS
(24sec)
drop table if exists aspect2;
create table aspect2 as
select ST_Aspect(ST_UNION(rast), 1, '8BUI') rast
from dem;
select addrasterconstraints('aspect2'::name, 'rast'::name);
alter table aspect123 add rid serial primary key;
-PostGIS
(27sec)
drop table if exists slope;
create table slope2 as
select ST_Slope(rast, 1, '32BF') rast
from dem;
select addrasterconstraints('slope2'::name, 'rast'::name);
alter table slope add rid serial primary key;
98
403
404
405
406
407
408
409
410
411
陰陰陰プコデコを
が作作(
)
-PostGIS
44sec
drop table if exists hillshade;
create table hillshade2 as
select ST_HillShade(rast, 1, '8BUI', 315, 45, 255, 1) rast
from dem;
select addrasterconstraints('hillshade2'::name, 'rast'::name);
alter table hillshade add rid serial primary key;
99
PostGIS 2.0 Cheat Sheet v2.0.2
PostGIS 2.0 Cheatsheet
New in this release 1 Enhanced in this release 2 Requires GEOS 3.3 or higherg3.3 2.5/3D support3d SQL-MMmm Supports geography G
PostgreSQL PostGIS Geometry/Geography/Box Types
box2d A box composed of x min, ymin, xmax, ymax. Often used to return the 2d
enclosing box of a geometry.
Operators
&&2 G
1. A, B
2. A, B
box3d A box composed of x min, ymin, zmin, xmax, ymax, zmax. Often used to
return the 3d extent of a geometry or collection of geometries.
geometry
Planar spatial data type.
geometry_dump A spatial datatype with two fields - geom (holding a geometry
object) and path[] (a 1-d array holding the position of the geometry within the
dumped object.)
geography
Ellipsoidal spatial data type.
Management Functions
AddGeometryColumn2 3d Adds a geometry column to an existing table of
attributes. By default uses type modifier to define rather than constraints. Pass in
false for use_typmod to get old check constraint based behavior
1. table_name, column_name, srid, type, dimension,
use_typmod=true
2. schema_name, table_name, column_name, srid, type,
dimension, use_typmod=true
3. catalog_name, schema_name, table_name, column_name,
srid, type, dimension, use_typmod=true
DropGeometryColumn3d
Removes a geometry column from a spatial table.
1. table_name, column_name
2. schema_name, table_name, column_name
3. catalog_name, schema_name, table_name, column_name
DropGeometryTable
Drops a table and all its references in geometry_columns.
Returns TRUE if A's 2D bounding box intersects B's 2D
bounding box.
&&&1 3d (A, B) Returns TRUE if A's 3D bounding box intersects B's
3D bounding box.
&< (A, B)
of B's.
Returns TRUE if A's bounding box overlaps or is to the left
&<| (A, B)
B's.
Returns TRUE if A's bounding box overlaps or is below
&> (A, B)
of B's.
Returns TRUE if A' bounding box overlaps or is to the right
<< (A, B)
B's.
Returns TRUE if A's bounding box is strictly to the left of
<<| (A, B)
Returns TRUE if A's bounding box is strictly below B's.
=G
Returns TRUE if A's bounding box is the same as B's. Uses
double precision bounding box.
1. A, B
2. A, B
>> (A, B)
B's.
Returns TRUE if A's bounding box is strictly to the right of
@ (A, B)
Returns TRUE if A's bounding box is contained by B's.
|&> (A, B)
B's.
|>> (A, B)
~ (A, B)
1. table_name
2. schema_name, table_name
3. catalog_name, schema_name, table_name
PostGIS_Full_Version ()
infos.
PostGIS_LibXML_Version ()
PostGIS_Lib_Build_Date ()
Returns the version number of the GEOS library.
Returns the version number of the libxml2 library.
Returns build date of the PostGIS library.
Returns the version number of the PostGIS library.
PostGIS_PROJ_Version ()
Returns the version number of the PROJ4 library.
PostGIS_Scripts_Build_Date ()
PostGIS_Scripts_Installed ()
this database.
Returns build date of the PostGIS scripts.
Returns version of the postgis scripts installed in
PostGIS_Scripts_Released () Returns the version number of the postgis.sql
script released with the installed postgis lib.
PostGIS_Version ()
Returns TRUE if A's bounding box is strictly above B's.
Returns TRUE if A's bounding box contains B's.
Returns TRUE if A's bounding box is the same as B's.
1
Reports full postgis version and build configuration
PostGIS_GEOS_Version ()
PostGIS_Lib_Version ()
~= (A, B)
Returns TRUE if A's bounding box overlaps or is above
Returns PostGIS version number and compile-time options.
Populate_Geometry_Columns2 Ensures geometry columns are defined with
type modifiers or have appropriate spatial constraints This ensures they will be
registered correctly in geometry_columns view. By default will convert all geometry
columns with no type modifier to ones with type modifiers. To get old behavior set
use_typmod=false
1. use_typmod=true
2. relation_oid, use_typmod=true
UpdateGeometrySRID3d Updates the SRID of all features in a geometry
column, geometry_columns metadata and srid. If it was enforced with constraints,
the constraints will be updated with new srid constraint. If the old was enforced by
type definition, the type definition will be changed.
1. table_name, column_name, srid
2. schema_name, table_name, column_name, srid
3. catalog_name, schema_name, table_name, column_name,
srid
<-> (A, B) Returns the distance between two points. For point /
point checks it uses floating point accuracy (as opposed to the double
precision accuracy of the underlying point geometry). For other
geometry types the distance between the floating point bounding box
centroids is returned. Useful for doing distance ordering and nearest
neighbor limits using KNN gist functionality.
<#>1 (A, B) Returns the distance between bounding box of 2
geometries. For point / point checks it's almost the same as distance
(though may be different since the bounding box is at floating point
accuracy and geometries are double precision). Useful for doing
distance ordering and nearest neighbor limits using KNN gist
functionality.
Spatial Relationships and Measurements
ST_3DClosestPoint1 3d (g1, g2) Returns the 3-dimensional point on
g1 that is closest to g2. This is the first point of the 3D shortest line.
ST_3DDistance1 mm 3d (g1, g2) For geometry type Returns the
3-dimensional cartesian minimum distance (based on spatial ref)
between two geometries in projected units.
ST_3DDWithin1 mm 3d (g1, g2, distance_of_srid) For 3d (z)
geometry type Returns true if two geometries 3d distance is within
number of units.
ST_3DDFullyWithin1 3d (g1, g2, distance) Returns true if all of the
3D geometries are within the specified distance of one another.
ST_3DIntersects1 mm 3d (geomA, geomB) Returns TRUE if the
Geometries "spatially intersect" in 3d - only for points and linestrings
ST_3DLongestLine1 3d (g1, g2)
line between two geometries
ST_3DMaxDistance1 3d (g1, g2) For geometry type Returns the
3-dimensional cartesian maximum distance (based on spatial ref)
between two geometries in projected units.
ST_3DShortestLine1 3d (g1, g2)
line between two geometries
Geometry Constructors
ST_BdPolyFromText (WKT, srid) Construct a Polygon given an arbitrary
collection of closed linestrings as a MultiLineString Well-Known text
representation.
ST_BdMPolyFromText (WKT, srid) Construct a MultiPolygon given an arbitrary
collection of closed linestrings as a MultiLineString text representation Well-Known
text representation.
G
ST_GeogFromText (EWKT) Return a specified geography value from
Well-Known Text representation or extended (WKT).
1 of 6
100
Returns the 3-dimensional longest
Returns the 3-dimensional shortest
ST_Area2 mm G Returns the area of the surface if it is a polygon or
multi-polygon. For "geometry" type area is in SRID units. For
"geography" area is in square meters.
1. g1
2. geog, use_spheroid=true
PostGIS 2.0 Cheat Sheet v2.0.2
ST_GeographyFromText G (EWKT) Return a specified geography value from
Well-Known Text representation or extended (WKT).
ST_GeogFromWKBG (geom) Creates a geography instance from a
Well-Known Binary geometry representation (WKB) or extended Well Known
Binary (EWKB).
ST_GeomCollFromTextmm Makes a collection Geometry from collection WKT
with the given SRID. If SRID is not give, it defaults to -1.
1. WKT, srid
2. WKT
1. pointA, pointB
2. pointA, pointB
ST_Centroidmm (g1)
Returns the geometric center of a geometry.
ST_ClosestPoint (g1, g2) Returns the 2-dimensional point on g1
that is closest to g2. This is the first point of the shortest line.
ST_GeomFromEWKB2 3d (EWKB) Return a specified ST_Geometry value
from Extended Well-Known Binary representation (EWKB).
ST_GeomFromEWKT2 3d (EWKT) Return a specified ST_Geometry value from
Extended Well-Known Text representation (EWKT).
mm
ST_GeometryFromText
Return a specified ST_Geometry value from
Well-Known Text representation (WKT). This is an alias name for
ST_GeomFromText
ST_Containsmm (geomA, geomB) Returns true if and only if no
points of B lie in the exterior of A, and at least one point of the interior
of B lies in the interior of A.
ST_ContainsProperly (geomA, geomB) Returns true if B intersects
the interior of A but not the boundary (or exterior). A does not contain
properly itself, but does contain itself.
ST_CoversG
1. WKT
2. WKT, srid
Returns 1 (TRUE) if no point in Geometry B is outside
Geometry A
1. geomA, geomB
2. geogpolyA, geogpointB
ST_GeomFromGML2 3d
Takes as input GML representation of geometry and
outputs a PostGIS geometry object
1. geomgml
2. geomgml, srid
ST_GeomFromGeoJSON
(geomjson) Takes as input a geojson
representation of a geometry and outputs a PostGIS geometry object
ST_Crossesmm (g1, g2) Returns TRUE if the supplied geometries
have some, but not all, interior points in common.
ST_GeomFromKML3d (geomkml) Takes as input KML representation of
geometry and outputs a PostGIS geometry object
ST_LineCrossingDirection (linestringA, linestringB) Given 2
linestrings, returns a number between -3 and 3 denoting what kind of
crossing behavior. 0 is no crossing.
ST_GMLToSQL2 mm Return a specified ST_Geometry value from GML
representation. This is an alias name for ST_GeomFromGML
ST_Disjointmm (A, B) Returns TRUE if the Geometries do not
"spatially intersect" - if they do not share any space together.
1. geomgml
2. geomgml, srid
ST_Distancemm G For geometry type Returns the 2-dimensional
cartesian minimum distance (based on spatial ref) between two
geometries in projected units. For geography type defaults to return
spheroidal minimum distance between two geographies in meters.
ST_GeomFromText mm Return a specified ST_Geometry value from
Well-Known Text representation (WKT).
1. WKT
2. WKT, srid
ST_GeomFromWKBmm Creates a geometry instance from a Well-Known
Binary geometry representation (WKB) and optional SRID.
1. geom
2. geom, srid
ST_LineFromMultiPoint3d (aMultiPoint)
geometry.
Creates a LineString from a MultiPoint
ST_LineFromText mm Makes a Geometry from WKT representation with the
given SRID. If SRID is not given, it defaults to -1.
1. WKT
2. WKT, srid
ST_LineFromWKBmm
Makes a LINESTRING from WKB with the given SRID
1. WKB
2. WKB, srid
ST_LinestringFromWKBmm
SRID.
ST_CoveredByG Returns 1 (TRUE) if no point in
Geometry/Geography A is outside Geometry/Geography B
1. geomA, geomB
2. geogA, geogB
1 3d
Makes a geometry from WKB with the given
1. WKB
2. WKB, srid
ST_MakeBox2D (pointLowLeft, pointUpRight)
given point geometries.
Creates a BOX2D defined by the
3d
ST_3DMakeBox (point3DLowLeftBottom, point3DUpRightTop)
BOX3D defined by the given 3d point geometries.
ST_MakeLine1 3d
ST_Azimuth2 G Returns the angle in radians from the horizontal of
the vector defined by pointA and pointB. Angle is computed clockwise
from down-to-up: on the clock: 12=0; 3=PI/2; 6=PI; 9=3PI/2.
Creates a
Creates a Linestring from point or line geometries.
1. geoms
2. geom1, geom2
3. geoms_array
1. g1, g2
2. gg1, gg2
3. gg1, gg2, use_spheroid
ST_HausdorffDistance Returns the Hausdorff distance between two
geometries. Basically a measure of how similar or dissimilar 2
geometries are. Units are in the units of the spatial reference system of
the geometries.
1. g1, g2
2. g1, g2, densifyFrac
ST_MaxDistance (g1, g2) Returns the 2-dimensional largest
distance between two geometries in projected units.
ST_Distance_Sphere (geomlonlatA, geomlonlatB) Returns minimum
distance in meters between two lon/lat geometries. Uses a spherical
earth and radius of 6370986 meters. Faster than
ST_Distance_Spheroid , but less accurate. PostGIS versions prior to
1.5 only implemented for points.
ST_Distance_Spheroid (geomlonlatA, geomlonlatB,
measurement_spheroid) Returns the minimum distance between two
lon/lat geometries given a particular spheroid. PostGIS versions prior
to 1.5 only support points.
ST_DFullyWithin (g1, g2, distance) Returns true if all of the
geometries are within the specified distance of one another
ST_DWithinG Returns true if the geometries are within the specified
distance of one another. For geometry units are in those of spatial
reference and For geography units are in meters and measurement is
defaulted to use_spheroid=true (measure around spheroid), for faster
check, use_spheroid=false to measure along sphere.
1. g1, g2, distance_of_srid
2. gg1, gg2, distance_meters
3. gg1, gg2, distance_meters, use_spheroid
ST_MakeEnvelope2 (xmin, ymin, xmax, ymax, srid=unknown) Creates a
rectangular Polygon formed from the given minimums and maximums. Input values
must be in SRS specified by the SRID.
ST_MakePolygon3d Creates a Polygon formed by the given shell. Input
geometries must be closed LINESTRINGS.
1. linestring
2. outerlinestring, interiorlinestrings
2 of 6
101
ST_Equalsmm (A, B) Returns true if the given geometries represent
the same geometry. Directionality is ignored.
ST_HasArc3d (geomA) Returns true if a geometry or geometry
collection contains a circular string
PostGIS 2.0 Cheat Sheet v2.0.2
Geometry Accessors
2 3d
GeometryType
(geomA) Returns the type of the geometry as a string. Eg:
'LINESTRING', 'POLYGON', 'MULTIPOINT', etc.
ST_Boundarymm 3d (geomA)
boundary of this Geometry.
Returns the closure of the combinatorial
ST_CoordDimmm 3d (geomA)
ST_Geometry value.
Return the coordinate dimension of the
1. geomA, geomB
2. geogA, geogB
2 mm
ST_Dimension
(g) The inherent dimension of this Geometry object, which
must be less than or equal to the coordinate dimension.
ST_EndPointmm 3d (g)
POINT.
Returns the last point of a LINESTRING geometry as a
ST_Envelopemm (g1) Returns a geometry representing the double precision
(float8) bounding box of the supplied geometry.
ST_ExteriorRingmm 3d (a_polygon) Returns a line string representing the
exterior ring of the POLYGON geometry. Return NULL if the geometry is not a
polygon. Will not work with MULTIPOLYGON
ST_GeometryN2 mm 3d (geomA, n) Return the 1-based Nth geometry if the
geometry is a GEOMETRYCOLLECTION, (MULTI)POINT, (MULTI)LINESTRING,
MULTICURVE or (MULTI)POLYGON, POLYHEDRALSURFACE Otherwise, return
NULL.
ST_GeometryType2 mm 3d (g1)
value.
Return the geometry type of the ST_Geometry
mm 3d
ST_InteriorRingN
(a_polygon, n) Return the Nth interior linestring ring of
the polygon geometry. Return NULL if the geometry is not a polygon or the given N
is out of range.
ST_IsClosed2 mm 3d (g) Returns TRUE if the LINESTRING's start and end
points are coincident. For Polyhedral surface is closed (volumetric).
ST_IsCollection3d (g) Returns TRUE if the argument is a collection (MULTI*,
GEOMETRYCOLLECTION, ...)
ST_IsEmptymm (geomA) Returns true if this Geometry is an empty
geometrycollection, polygon, point etc.
ST_IsRingmm (g)
Returns TRUE if this LINESTRING is both closed and simple.
ST_IsSimplemm 3d (geomA) Returns (TRUE) if this Geometry has no anomalous
geometric points, such as self intersection or self tangency.
ST_IsValidmm g3.3
Returns true if the ST_Geometry is well formed.
ST_Lengthmm G Returns the 2d length of the geometry if it is a
linestring or multilinestring. geometry are in units of spatial reference
and geography are in meters (default spheroid)
1. a_2dlinestring
2. geog, use_spheroid=true
ST_Length2D (a_2dlinestring) Returns the 2-dimensional length of
the geometry if it is a linestring or multi-linestring. This is an alias for
ST_Length
ST_3DLength3d (a_3dlinestring) Returns the 3-dimensional or
2-dimensional length of the geometry if it is a linestring or multilinestring.
ST_Length_Spheroid3d (a_linestring, a_spheroid) Calculates the
2D or 3D length of a linestring/multilinestring on an ellipsoid. This is
useful if the coordinates of the geometry are in longitude/latitude and a
length is desired without reprojection.
ST_Length2D_Spheroid (a_linestring, a_spheroid) Calculates the
2D length of a linestring/multilinestring on an ellipsoid. This is useful if
the coordinates of the geometry are in longitude/latitude and a length is
desired without reprojection.
ST_3DLength_Spheroid3d (a_linestring, a_spheroid) Calculates the
length of a geometry on an ellipsoid, taking the elevation into account.
This is just an alias for ST_Length_Spheroid.
ST_LongestLine (g1, g2) Returns the 2-dimensional longest line
points of two geometries. The function will only return the first longest
line if more than one, that the function finds. The line returned will
always start in g1 and end in g2. The length of the line this function
returns will always be the same as st_maxdistance returns for g1 and
g2.
ST_OrderingEqualsmm (A, B) Returns true if the given geometries
represent the same geometry and points are in the same directional
order.
ST_Overlapsmm (A, B) Returns TRUE if the Geometries share
space, are of the same dimension, but are not completely contained by
each other.
1. g
2. g, flags
ST_IsValidReason1 g3.3
ST_Intersectsmm G Returns TRUE if the Geometries/Geography
"spatially intersect in 2D" - (share any portion of space) and FALSE if
they don't (they are Disjoint). For geography -- tolerance is 0.00001
meters (so any points that close are considered to intersect)
Returns text stating if a geometry is valid or not and if
not valid, a reason why.
1. geomA
2. geomA, flags
ST_IsValidDetail1 g3.3 Returns a valid_detail (valid,reason,location) row stating
if a geometry is valid or not and if not valid, a reason why and a location where.
ST_Perimetermm G Return the length measurement of the boundary
of an ST_Surface or ST_MultiSurface geometry or geography.
(Polygon, Multipolygon). geometry measurement is in units of spatial
reference and geography is in meters.
1. g1
2. geog, use_spheroid=true
ST_Perimeter2D (geomA) Returns the 2-dimensional perimeter of
the geometry, if it is a polygon or multi-polygon. This is currently an
alias for ST_Perimeter.
1. geom
2. geom, flags
ST_Mmm 3d (a_point) Return the M coordinate of the point, or NULL if not
available. Input must be a point.
ST_3DPerimeter3d (geomA) Returns the 3-dimensional perimeter of
the geometry, if it is a polygon or multi-polygon.
ST_NDims3d (g1) Returns coordinate dimension of the geometry as a small int.
Values are: 2,3 or 4.
ST_PointOnSurfacemm 3d (g1)
on the surface.
ST_NPoints2 3d (g1)
ST_Project1 G (g1, distance, azimuth) Returns a POINT projected
from a start point using a distance in meters and bearing (azimuth) in
radians.
ST_NRings3d (geomA)
number of rings.
Return the number of points (vertexes) in a geometry.
If the geometry is a polygon or multi-polygon returns the
ST_NumGeometries2 mm 3d (geom) If geometry is a
GEOMETRYCOLLECTION (or MULTI*) return the number of geometries, for single
geometries will return 1, otherwise return NULL.
ST_NumInteriorRingsmm (a_polygon) Return the number of interior rings of the
first polygon in the geometry. This will work with both POLYGON and
MULTIPOLYGON types but only looks at the first polygon. Return NULL if there is
no polygon in the geometry.
ST_NumInteriorRingmm (a_polygon) Return the number of interior rings of the
first polygon in the geometry. Synonym to ST_NumInteriorRings.
Returns a POINT guaranteed to lie
ST_Relate2 mm Returns true if this Geometry is spatially related to
anotherGeometry, by testing for intersections between the Interior,
Boundary and Exterior of the two geometries as specified by the
values in the intersectionMatrixPattern. If no intersectionMatrixPattern
is passed in, then returns the maximum intersectionMatrixPattern that
relates the 2 geometries.
1. geomA, geomB, intersectionMatrixPattern
2. geomA, geomB
3. geomA, geomB, BoundaryNodeRule
ST_NumPatches1 mm 3d (g1) Return the number of faces on a Polyhedral
Surface. Will return null for non-polyhedral geometries.
ST_RelateMatch1 g3.3 (intersectionMatrix, intersectionMatrixPattern)
Returns true if intersectionMattrixPattern1 implies
intersectionMatrixPattern2
ST_NumPointsmm (g1) Return the number of points in an ST_LineString or
ST_CircularString value.
ST_ShortestLine (g1, g2)
between two geometries
3 of 6
102
Returns the 2-dimensional shortest line
PostGIS 2.0 Cheat Sheet v2.0.2
ST_PatchN1 mm 3d (geomA, n) Return the 1-based Nth geometry (face) if the
geometry is a POLYHEDRALSURFACE, POLYHEDRALSURFACEM. Otherwise,
return NULL.
ST_PointNmm 3d (a_linestring, n) Return the Nth point in the first linestring or
circular linestring in the geometry. Return NULL if there is no linestring in the
geometry.
ST_SRIDmm (g1) Returns the spatial reference identifier for the ST_Geometry
as defined in spatial_ref_sys table.
ST_StartPointmm 3d (geomA)
geometry as a POINT.
ST_SummaryG
Returns the first point of a LINESTRING
Returns a text summary of the contents of the geometry.
1. g
2. g
ST_XMax3d (aGeomorBox2DorBox3D)
or 3d or a geometry.
Returns X maxima of a bounding box 2d
ST_XMin3d (aGeomorBox2DorBox3D)
or 3d or a geometry.
Returns X minima of a bounding box 2d
ST_YMax3d (aGeomorBox2DorBox3D)
or 3d or a geometry.
Returns Y maxima of a bounding box 2d
ST_YMin3d (aGeomorBox2DorBox3D)
or 3d or a geometry.
Returns Y minima of a bounding box 2d
ST_Zmm 3d (a_point) Return the Z coordinate of the point, or NULL if not
available. Input must be a point.
Returns Z minima of a bounding box 2d
ST_Zmflag3d (geomA) Returns ZM (dimension semantic) flag of the geometries
as a small int. Values are: 0=2d, 1=3dm, 2=3dz, 3=4d.
Returns Z minima of a bounding box 2d
ST_AddPoint
Adds a point to a LineString before point (0-based index).
ST_Affine2 3d Applies a 3d affine transformation to the geometry to do things
like translate, rotate, scale in one step.
1. geomA, a, b, c, d, e, f, g, h, i, xoff, yoff, zoff
2. geomA, a, b, d, e, xoff, yoff
ST_Force_2D2 3d (geomA) Forces the geometries into a "2-dimensional mode"
so that all output representations will only have the X and Y coordinates.
ST_Force_3D
(geomA)
alias for ST_Force_3DZ.
Forces the geometries into XYZ mode. This is an
ST_Force_3DZ2 3d (geomA)
synonym for ST_Force_3D.
Forces the geometries into XYZ mode. This is a
ST_Force_3DM (geomA)
Forces the geometries into XYM mode.
ST_Force_4D3d (geomA)
Forces the geometries into XYZM mode.
ST_Force_Collection2 3d (geomA)
GEOMETRYCOLLECTION.
ST_BuildArea (A) Creates an areal geometry formed by the constituent
linework of given geometry
ST_Collect3d
Return a specified ST_Geometry value from a collection of
other geometries.
ST_ConcaveHull1 (geomA, target_percent, allow_holes=false) The
concave hull of a geometry represents a possibly concave geometry that
encloses all geometries within the set. You can think of it as shrink wrapping.
ST_ConvexHullmm 3d (geomA) The convex hull of a geometry represents
the minimum convex geometry that encloses all geometries within the set.
ST_CurveToLinemm 3d Converts a CIRCULARSTRING/CURVEDPOLYGON
to a LINESTRING/POLYGON
1. curveGeom
2. curveGeom, segments_per_qtr_circle
ST_Differencemm 3d (geomA, geomB) Returns a geometry that represents
that part of geometry A that does not intersect with geometry B.
ST_DumpPoints2 3d (geom) Returns a set of geometry_dump (geom,path)
rows of all points that make up a geometry.
ST_FlipCoordinates1 3d (geom) Returns a version of the given geometry
with X and Y axis flipped. Useful for people who have built latitude/longitude
features and need to fix them.
ST_Intersectionmm G (T) Returns a geometry that represents the shared
portion of geomA and geomB. The geography implementation does a
transform to geometry to do the intersection and then transform back to
WGS84.
1. geomA, geomB
2. geogA, geogB
ST_LineToCurve3d (geomANoncircular) Converts a
LINESTRING/POLYGON to a CIRCULARSTRING, CURVED POLYGON
Attempts to make an invalid geometry valid w/out
ST_MemUnion3d (geomfield) Same as ST_Union, only memory-friendly
(uses less memory and more processor time).
2 3d
ST_ForceRHR
(g) Forces the orientation of the vertices in a polygon to
follow the Right-Hand-Rule.
ST_LineMerge (amultilinestring) Returns a (set of) LineString(s) formed by
sewing together a MULTILINESTRING.
ST_CollectionExtract (collection, type) Given a (multi)geometry, returns a
(multi)geometry consisting only of elements of the specified type.
ST_CollectionHomogenize1 (collection) Given a geometry collection, returns
the "simplest" representation of the contents.
ST_Multi (g1) Returns the geometry as a MULTI* geometry. If the geometry is
already a MULTI*, it is returned unchanged.
ST_Reverse (g1)
radius_of_buffer
radius_of_buffer, num_seg_quarter_circle
radius_of_buffer, buffer_style_parameters
radius_of_buffer_in_meters
ST_MakeValid1 3d (input)
loosing vertices.
Converts the geometry into a
ST_RemovePoint3d (linestring, offset)
is 0-based.
g1,
g1,
g1,
g1,
ST_DumpRings3d (a_polygon) Returns a set of geometry_dump rows,
representing the exterior and interior rings of a polygon.
1. linestring, point
2. linestring, point, position
2 3d
Geometry Processing
ST_Buffermm G (T) For geometry: Returns a geometry that represents all
points whose distance from this Geometry is less than or equal to distance.
Calculations are in the Spatial Reference System of this Geometry. For
geography: Uses a planar transform wrapper. Introduced in 1.5 support for
different end cap and mitre settings to control shape. buffer_style options:
quad_segs=#,endcap=round|flat|square,join=round|mitre|bevel,mitre_limit=#.#
ST_Dump2 3d (g1) Returns a set of geometry_dump (geom,path) rows, that
make up a geometry g1.
Geometry Editors
3d
Returns true if the geometry A is completely
1. g1field
2. g1, g2
3. g1_array
ST_Ymm 3d (a_point) Return the Y coordinate of the point, or NULL if not
available. Input must be a point.
ST_ZMin3d (aGeomorBox2DorBox3D)
or 3d or a geometry.
ST_Withinmm (A, B)
inside geometry B
1.
2.
3.
4.
ST_Xmm 3d (a_point) Return the X coordinate of the point, or NULL if not
available. Input must be a point.
ST_ZMax3d (aGeomorBox2DorBox3D)
or 3d or a geometry.
ST_Touchesmm (g1, g2) Returns TRUE if the geometries have at
least one point in common, but their interiors do not intersect.
Removes point from a linestring. Offset
Returns the geometry with vertex order reversed.
4 of 6
103
ST_MinimumBoundingCircle (geomA, num_segs_per_qt_circ=48)
Returns the smallest circle polygon that can fully contain a geometry. Default
uses 48 segments per quarter circle.
ST_Polygonize Aggregate. Creates a GeometryCollection containing
possible polygons formed from the constituent linework of a set of geometries.
1. geomfield
2. geom_array
ST_Node1 g3.3 3d (geom)
Node a set of linestrings.
ST_OffsetCurve1 g3.3 (line, signed_distance, style_parameters='') Return
an offset line at a given distance and side from an input line. Useful for
computing parallel lines about a center line
ST_RemoveRepeatedPoints1 3d (geom)
geometry with duplicated points removed.
Returns a version of the given
PostGIS 2.0 Cheat Sheet v2.0.2
ST_Rotate2 3d
Rotate a geometry rotRadians counter-clockwise about an
origin.
1. geomA, rotRadians
2. geomA, rotRadians, x0, y0
3. geomA, rotRadians, pointOrigin
ST_RotateX2 3d (geomA, rotRadians)
X axis.
Rotate a geometry rotRadians about the
ST_RotateY2 3d (geomA, rotRadians)
Y axis.
Rotate a geometry rotRadians about the
2 3d
ST_RotateZ
axis.
(geomA, rotRadians)
Rotate a geometry rotRadians about the Z
ST_Scale2 3d Scales the geometry to a new size by multiplying the ordinates
with the parameters. Ie: ST_Scale(geom, Xfactor, Yfactor, Zfactor).
1. geomA, XFactor, YFactor, ZFactor
2. geomA, XFactor, YFactor
ST_Segmentize (geomA, max_length) Return a modified geometry having no
segment longer than the given distance. Distance computation is performed in 2d
only.
ST_SetPoint3d (linestring, zerobasedposition, point)
linestring with given point. Index is 0-based.
ST_SetSRID (geom, srid)
value.
3d
ST_SnapToGrid
1.
2.
3.
4.
geomA,
geomA,
geomA,
geomA,
Replace point N of
Sets the SRID on a geometry to a particular integer
ST_Transform2 mm (g1, srid) Returns a new geometry with its coordinates
transformed to the SRID referenced by the integer parameter.
ST_Translate3d Translates the geometry to a new location using the numeric
parameters as offsets. Ie: ST_Translate(geom, X, Y) or ST_Translate(geom, X,
Y,Z).
1. g1, deltax, deltay
2. g1, deltax, deltay, deltaz
ST_TransScale3d (geomA, deltaX, deltaY, XFactor, YFactor) Translates the
geometry using the deltaX and deltaY args, then scales it using the XFactor,
YFactor args, working in 2D only.
Geometry Outputs
2 mm G 3d
ST_AsBinary
Return the Well-Known Binary (WKB) representation of
the geometry/geography without SRID meta data.
g1
g1, NDR_or_XDR
g1
g1, NDR_or_XDR
ST_SimplifyPreserveTopology (geomA, tolerance) Returns a "simplified"
version of the given geometry using the Douglas-Peucker algorithm. Will
avoid creating derived geometries (polygons in particular) that are invalid.
ST_Split1 (input, blade)
splitting a geometry.
Returns a collection of geometries resulting by
ST_SymDifferencemm 3d (geomA, geomB) Returns a geometry that
represents the portions of A and B that do not intersect. It is called a
symmetric difference because ST_SymDifference(A,B) =
ST_SymDifference(B,A).
ST_Unionmm
Returns a geometry that represents the point set union of the
Geometries.
1. g1field
2. g1, g2
3. g1_array
ST_UnaryUnion1 g3.3 3d (geom)
geometry component level.
Like ST_Union, but working at the
ST_Line_Interpolate_Point3d (a_linestring, a_fraction) Returns a
point interpolated along a line. Second argument is a float8 between 0
and 1 representing fraction of total length of linestring the point has to
be located.
ST_Line_Locate_Point (a_linestring, a_point) Returns a float
between 0 and 1 representing the location of the closest point on
LineString to the given Point, as a fraction of total 2d line length.
ST_Line_Substring3d (a_linestring, startfraction, endfraction)
Return a linestring being a substring of the input one starting and
ending at the given fractions of total 2d length. Second and third
arguments are float8 values between 0 and 1.
ST_LocateAlong (ageom_with_measure, a_measure, offset) Return
a derived geometry collection value with elements that match the
specified measure. Polygonal elements are not supported.
ST_LocateBetween (geomA, measure_start, measure_end, offset)
Return a derived geometry collection value with elements that match
the specified range of measures inclusively. Polygonal elements are
not supported.
ST_LocateBetweenElevations3d (geom_mline, elevation_start,
elevation_end) Return a derived geometry (collection) value with
elements that intersect the specified range of elevations inclusively.
Only 3D, 4D LINESTRINGS and MULTILINESTRINGS are supported.
ST_InterpolatePoint1 3d (line, point) Return the value of the
measure dimension of a geometry at the point closed to the provided
point.
Return the Well-Known Binary (WKB) representation of the
geometry with SRID meta data.
1. g1
2. g1, NDR_or_XDR
ST_AsEWKT2 G 3d Return the Well-Known Text (WKT) representation of the
geometry with SRID meta data.
1. g1
2. g1
ST_AddMeasure3d (geom_mline, measure_start, measure_end)
Return a derived geometry with measure elements linearly interpolated
between the start and end points. If the geometry has no measure
dimension, one is added. If the geometry has a measure dimension, it
is over-written with new values. Only LINESTRINGS and
MULTILINESTRINGS are supported.
Long Transactions Support
G 3d
ST_AsGeoJSON
1.
2.
3.
4.
ST_Simplify (geomA, tolerance) Returns a "simplified" version of the given
geometry using the Douglas-Peucker algorithm.
Linear Referencing
originX, originY, sizeX, sizeY
sizeX, sizeY
size
pointOrigin, sizeX, sizeY, sizeZ, sizeM
ST_AsEWKB2 3d
ST_Shift_Longitude2 3d (geomA) Reads every point/vertex in every
component of every feature in a geometry, and if the longitude coordinate is
<0, adds 360 to it. The result would be a 0-360 version of the data to be
plotted in a 180 centric map
Snap all points of the input geometry to a regular grid.
ST_Snap1 g3.3 (input, reference, tolerance) Snap segments and vertices of
input geometry to vertices of a reference geometry.
1.
2.
3.
4.
ST_SharedPaths1 g3.3 (lineal1, lineal2) Returns a collection containing
paths shared by the two input linestrings/multilinestrings.
AddAuth (auth_token)
current transaction.
Return the geometry as a GeoJSON element.
CheckAuth Creates trigger on a table to prevent/allow updates and
deletes of rows based on authorization token.
geom, maxdecimaldigits=15, options=0
geog, maxdecimaldigits=15, options=0
gj_version, geom, maxdecimaldigits=15, options=0
gj_version, geog, maxdecimaldigits=15, options=0
ST_AsGML2 G 3d
Add an authorization token to be used in
1. a_schema_name, a_table_name,
a_key_column_name
2. a_table_name, a_key_column_name
Return the geometry as a GML version 2 or 3 element.
DisableLongTransactions () Disable long transaction support. This
function removes the long transaction support metadata tables, and
drops all triggers attached to lock-checked tables.
1. geom, maxdecimaldigits=15, options=0
2. geog, maxdecimaldigits=15, options=0
3. version, geom, maxdecimaldigits=15, options=0,
nprefix=null
4. version, geog, maxdecimaldigits=15, options=0,
nprefix=null
EnableLongTransactions () Enable long transaction support. This
function creates the required metadata tables, needs to be called once
before using the other functions in this section. Calling it twice is
harmless.
5 of 6
104
PostGIS 2.0 Cheat Sheet v2.0.2
ST_AsHEXEWKB3d
Returns a Geometry in HEXEWKB format (as text) using
either little-endian (NDR) or big-endian (XDR) encoding.
1. g1, NDRorXDR
2. g1
ST_AsKML2 G 3d Return the geometry as a KML element. Several variants.
Default version=2, default precision=15
1.
2.
3.
4.
Set lock/authorization for specific row in table
1. a_schema_name, a_table_name, a_row_key,
an_auth_token, expire_dt
2. a_table_name, a_row_key, an_auth_token,
expire_dt
3. a_table_name, a_row_key, an_auth_token
UnlockRows (auth_token) Remove all locks held by specified
authorization id. Returns the number of locks released.
geom, maxdecimaldigits=15
geog, maxdecimaldigits=15
version, geom, maxdecimaldigits=15, nprefix=NULL
version, geog, maxdecimaldigits=15, nprefix=NULL
ST_AsSVGG
LockRow
Miscellaneous Functions
2 3d
ST_Accum
geometries.
Returns a Geometry in SVG path data given a geometry or
geography object.
ST_AsX3D1 3d (g1, maxdecimaldigits=15, options=0) Returns a Geometry in
X3D xml node element format: ISO-IEC-19776-1.2-X3DEncodings-XML
Return a GeoHash
ST_AsTextmm G Return the Well-Known Text (WKT) representation of the
geometry/geography without SRID metadata.
Box3D2 3d (geomA) Returns a BOX3D representing the maximum
extents of the geometry.
ST_Estimated_Extent Return the 'estimated' extent of the given
spatial table. The estimated is taken from the geometry column's
statistics. The current schema will be used if not specified.
1. schema_name, table_name, geocolumn_name
2. table_name, geocolumn_name
1. g1
2. g1
ST_AsLatLonText1
Aggregate. Constructs an array of
Box2D2 (geomA) Returns a BOX2D representing the maximum
extents of the geometry.
1. geom, rel=0, maxdecimaldigits=15
2. geog, rel=0, maxdecimaldigits=15
ST_GeoHash (geom, maxchars=full_precision_of_point)
representation (geohash.org) of the geometry.
(geomfield)
Return the Degrees, Minutes, Seconds representation of
the given point.
1. pt
2. pt, format
ST_Expand2 Returns bounding box expanded in all directions from
the bounding box of the input geometry. Uses double-precision
1. g1, units_to_expand
2. g1, units_to_expand
3. g1, units_to_expand
ST_Extent2 (geomfield) an aggregate function that returns the
bounding box that bounds rows of geometries.
ST_3DExtent2 3d (geomfield) an aggregate function that returns the
box3D bounding box that bounds rows of geometries.
Find_SRID (a_schema_name, a_table_name, a_geomfield_name)
The syntax is find_srid(db_schema, table,column) and the function
returns the integer SRID of the specified column by searching through
the GEOMETRY_COLUMNS table.
ST_Mem_Size3d (geomA)
the geometry takes.
Returns the amount of space (in bytes)
ST_Point_Inside_Circle (a_point, center_x, center_y, radius) Is the
point geometry insert circle defined by center_x, center_y, radius
Exceptional Functions
PostGIS_AddBBox (geomA)
PostGIS_DropBBox (geomA)
the geometry.
Add bounding box to the geometry.
Drop the bounding box cache from
PostGIS_HasBBox (geomA) Returns TRUE if the bbox of this
geometry is cached, FALSE otherwise.
This work is licensed under a Creative Commons Attribution
.
Feel free to use this material for private or commercial purposes, but we ask that you please retain the
http://www.postgis.us PostGIS in Action website link.
PostGIS in Action BostonGIS.com
Paragon Corporation
Postgres OnLine Journal
6 of 6
105
PostGIS 2.0 Raster Cheat Sheet v. 2.0.2
PostGIS 2.0 Raster Cheatsheet
New in this release 1 Enhanced in this release 2 Requires GEOS 3.3 or higherg3.3 2.5/3D support3d SQL-MMmm Supports geography G
Raster Support Data types
geomval
band).
A spatial datatype with two fields - geom (holding a geometry object) and val (holding a double precision pixel value from a raster
histogram
raster
A composite type used as record output of the ST_Histogram and ST_ApproxHistogram functions.
raster spatial data type.
reclassarg
A composite type used as input into the ST_Reclass function defining the behavior of reclassification.
summarystats
A composite type used as output of the ST_SummaryStats function.
Raster Management
1
AddRasterConstraints
Adds raster constraints to a loaded raster table for a specific column that constrains spatial ref, scaling, blocksize,
alignment, bands, band type and a flag to denote if raster column is regularly blocked. The table must be loaded with data for the constraints to
be inferred. Returns true of the constraint setting was accomplished and if issues a notice.
1. rasttable, rastcolumn, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment,
regular_blocking, num_bands=true, pixel_types=true, nodata_values=true, out_db=true, extent=true
2. rasttable, rastcolumn, VARIADIC constraints
3. rastschema, rasttable, rastcolumn, VARIADIC constraints
4. rastschema, rasttable, rastcolumn, srid=true, scale_x=true, scale_y=true, blocksize_x=true,
blocksize_y=true, same_alignment=true, regular_blocking=true, num_bands=true, pixel_types=true,
nodata_values=true, out_db=true, extent=true
DropRasterConstraints1
your raster column data.
Drops PostGIS raster constraints that refer to a raster table column. Useful if you need to reload data or update
1. rasttable, rastcolumn, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment,
regular_blocking, num_bands=true, pixel_types=true, nodata_values=true, out_db=true, extent=true
2. rastschema, rasttable, rastcolumn, srid=true, scale_x=true, scale_y=true, blocksize_x=true,
blocksize_y=true, same_alignment=true, regular_blocking=true, num_bands=true, pixel_types=true,
nodata_values=true, out_db=true, extent=true
3. rastschema, rasttable, rastcolumn, constraints
PostGIS_Raster_Lib_Build_Date ()
PostGIS_Raster_Lib_Version ()
ST_GDALDrivers1 ()
ST_AsGDALRaster.
Reports full raster library build date.
Reports full raster version and build configuration infos.
Returns a list of raster formats supported by your lib gdal. These are the formats you can output your raster using
Raster Constructors
ST_AddBand Returns a raster with the new band(s) of given type added with given initial value in the given index location. If no index is
specified, the band is added to the end.
1.
2.
3.
4.
rast, pixeltype, initialvalue=0, nodataval=NULL
rast, index, pixeltype, initialvalue=0, nodataval=NULL
torast, fromrast, fromband=1, torastindex=at_end
torast, fromrasts, fromband=1
ST_AsRaster1
Converts a PostGIS geometry to a PostGIS raster.
1. geom, ref, pixeltype, value=1, nodataval=0, touched=false
2. geom, ref, pixeltype=ARRAY['8BUI'], value=ARRAY[1], nodataval=ARRAY[0], touched=false
3. geom, scalex, scaley, gridx, gridy, pixeltype, value=1, nodataval=0, skewx=0, skewy=0,
touched=false
4. geom, scalex, scaley, gridx=NULL, gridy=NULL, pixeltype=ARRAY['8BUI'], value=ARRAY[1],
nodataval=ARRAY[0], skewx=0, skewy=0, touched=false
5. geom, scalex, scaley, pixeltype, value=1, nodataval=0, upperleftx=NULL, upperlefty=NULL, skewx=0,
skewy=0, touched=false
6. geom, scalex, scaley, pixeltype, value=ARRAY[1], nodataval=ARRAY[0], upperleftx=NULL,
upperlefty=NULL, skewx=0, skewy=0, touched=false
7. geom, width, height, gridx, gridy, pixeltype, value=1, nodataval=0, skewx=0, skewy=0,
touched=false
8. geom, width, height, gridx=NULL, gridy=NULL, pixeltype=ARRAY['8BUI'], value=ARRAY[1],
nodataval=ARRAY[0], skewx=0, skewy=0, touched=false
9. geom, width, height, pixeltype, value=1, nodataval=0, upperleftx=NULL, upperlefty=NULL, skewx=0,
skewy=0, touched=false
10. geom, width, height, pixeltype, value=ARRAY[1], nodataval=ARRAY[0], upperleftx=NULL,
upperlefty=NULL, skewx=0, skewy=0, touched=false
1 of 7
106
PostGIS 2.0 Raster Cheat Sheet v. 2.0.2
ST_Band1
Returns one or more bands of an existing raster as a new raster. Useful for building new rasters from existing rasters.
1. rast, nbands = ARRAY[1]
2. rast, nbands, delimiter=,
3. rast, nband
ST_MakeEmptyRaster Returns an empty raster (having no bands) of given dimensions (width & height), upperleft X and Y, pixel size and
rotation (scalex, scaley, skewx & skewy) and reference system (srid). If a raster is passed in, returns a new raster with the same size, alignment
and SRID. If srid is left out, the spatial ref is set to unknown (0).
1. rast
2. width, height, upperleftx, upperlefty, scalex, scaley, skewx, skewy, srid=unknown
3. width, height, upperleftx, upperlefty, pixelsize
Raster Accessors
ST_GeoReference (rast, format=GDAL)
Default is GDAL.
ST_Height (rast)
Returns the georeference meta data in GDAL or ESRI format as commonly seen in a world file.
Returns the height of the raster in pixels.
ST_MetaData (rast)
Returns basic meta data about a raster object such as pixel size, rotation (skew), upper, lower left, etc.
ST_NumBands (rast)
Returns the number of bands in the raster object.
ST_PixelHeight (rast)
Returns the pixel height in geometric units of the spatial reference system.
ST_PixelWidth (rast)
Returns the pixel width in geometric units of the spatial reference system.
ST_ScaleX (rast)
Returns the X component of the pixel width in units of coordinate reference system.
ST_ScaleY (rast)
Returns the Y component of the pixel height in units of coordinate reference system.
ST_Raster2WorldCoordX
at 1.
Returns the geometric X coordinate upper left of a raster, column and row. Numbering of columns and rows starts
1. rast, xcolumn
2. rast, xcolumn, yrow
ST_Raster2WorldCoordY
rows starts at 1.
Returns the geometric Y coordinate upper left corner of a raster, column and row. Numbering of columns and
1. rast, yrow
2. rast, xcolumn, yrow
ST_Rotation (rast)
ST_SkewX (rast)
ST_SkewY (rast)
ST_SRID (rast)
Returns the rotation of the raster in radian.
Returns the georeference X skew (or rotation parameter).
Returns the georeference Y skew (or rotation parameter).
Returns the spatial reference identifier of the raster as defined in spatial_ref_sys table.
ST_UpperLeftX (rast)
Returns the upper left X coordinate of raster in projected spatial ref.
ST_UpperLeftY (rast)
Returns the upper left Y coordinate of raster in projected spatial ref.
ST_Width (rast)
Returns the width of the raster in pixels.
ST_World2RasterCoordX Returns the column in the raster of the point geometry (pt) or a X and Y world coordinate (xw, yw) represented in
world spatial reference system of raster.
1. rast, pt
2. rast, xw
3. rast, xw, yw
ST_World2RasterCoordY Returns the row in the raster of the point geometry (pt) or a X and Y world coordinate (xw, yw) represented in
world spatial reference system of raster.
1. rast, pt
2. rast, xw
3. rast, xw, yw
ST_IsEmpty (rast)
Returns true if the raster is empty (width = 0 and height = 0). Otherwise, returns false.
Raster Band Accessors
ST_BandMetaData (rast, bandnum=1)
Returns basic meta data for a specific raster band. band num 1 is assumed if none-specified.
ST_BandNoDataValue (rast, bandnum=1)
ST_BandIsNoData1
Returns the value in a given band that represents no data. If no band num 1 is assumed.
Returns true if the band is filled with only nodata values.
1. rast, band, forceChecking=true
2. rast, forceChecking=true
2 of 7
107
PostGIS 2.0 Raster Cheat Sheet v. 2.0.2
Raster Pixel Accessors and Setters
ST_PixelAsPolygon (rast, columnx, rowy)
ST_PixelAsPolygons (rast, band=1)
raster coordinates of each pixel.
Returns the geometry that bounds the pixel for a particular row and column.
Returns the geometry that bounds every pixel of a raster band along with the value, the X and the Y
ST_Value2 Returns the value of a given band in a given columnx, rowy pixel or at a particular geometric point. Band numbers start at 1 and
assumed to be 1 if not specified. If exclude_nodata_value is set to false, then all pixels include nodata pixels are considered to intersect and
return value. If exclude_nodata_value is not passed in then reads it from metadata of raster.
1.
2.
3.
4.
rast,
rast,
rast,
rast,
pt, exclude_nodata_value=true
bandnum, pt, exclude_nodata_value=true
columnx, rowy, exclude_nodata_value=true
bandnum, columnx, rowy, exclude_nodata_value=true
ST_SetValue Returns modified raster resulting from setting the value of a given band in a given columnx, rowy pixel or at a pixel that
intersects a particular geometric point. Band numbers start at 1 and assumed to be 1 if not specified.
1.
2.
3.
4.
rast,
rast,
rast,
rast,
pt, newvalue
bandnum, pt, newvalue
columnx, rowy, newvalue
bandnum, columnx, rowy, newvalue
Raster Editors
ST_SetGeoReference (rast, georefcoords, format=GDAL) Set Georeference 6 georeference parameters in a single call. Numbers should be
separated by white space. Accepts inputs in GDAL or ESRI format. Default is GDAL.
ST_SetRotation (rast, rotation)
ST_SetScale
Set the rotation of the raster in radian.
Sets the X and Y size of pixels in units of coordinate reference system. Number units/pixel width/height.
1. rast, xy
2. rast, x, y
ST_SetSkew
Sets the georeference X and Y skew (or rotation parameter). If only one is passed in, sets X and Y to the same value.
1. rast, skewxy
2. rast, skewx, skewy
ST_SetSRID (rast, srid)
Sets the SRID of a raster to a particular integer srid defined in the spatial_ref_sys table.
ST_SetUpperLeft (rast, x, y)
Sets the value of the upper left corner of the pixel to projected X and Y coordinates.
1
ST_Resample
Resample a raster using a specified resampling algorithm, new dimensions, an arbitrary grid corner and a set of raster
georeferencing attributes defined or borrowed from another raster. New pixel values are computed using the NearestNeighbor (english or
american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. Default is NearestNeighbor.
1. rast, width, height, srid=same_as_rast, gridx=NULL, gridy=NULL, skewx=0, skewy=0,
algorithm=NearestNeighbour, maxerr=0.125
2. rast, srid=NULL, scalex=0, scaley=0, gridx=NULL, gridy=NULL, skewx=0, skewy=0,
algorithm=NearestNeighbor, maxerr=0.125
3. rast, ref, algorithm=NearestNeighbour, maxerr=0.125, usescale=true
4. rast, ref, usescale, algorithm=NearestNeighbour, maxerr=0.125
ST_Rescale1 Resample a raster by adjusting only its scale (or pixel size). New pixel values are computed using the NearestNeighbor (english
or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. Default is NearestNeighbor.
1. rast, scalexy, algorithm=NearestNeighbour, maxerr=0.125
2. rast, scalex, scaley, algorithm=NearestNeighbour, maxerr=0.125
ST_Reskew1 Resample a raster by adjusting only its skew (or rotation parameters). New pixel values are computed using the
NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. Default is NearestNeighbor.
1. rast, skewxy, algorithm=NearestNeighbour, maxerr=0.125
2. rast, skewx, skewy, algorithm=NearestNeighbour, maxerr=0.125
ST_SnapToGrid1 Resample a raster by snapping it to a grid. New pixel values are computed using the NearestNeighbor (english or american
spelling), Bilinear, Cubic, CubicSpline or Lanczos resampling algorithm. Default is NearestNeighbor.
1. rast, gridx, gridy, algorithm=NearestNeighbour, maxerr=0.125, scalex=DEFAULT 0, scaley=DEFAULT 0
2. rast, gridx, gridy, scalex, scaley, algorithm=NearestNeighbour, maxerr=0.125
3. rast, gridx, gridy, scalexy, algorithm=NearestNeighbour, maxerr=0.125
3 of 7
108
PostGIS 2.0 Raster Cheat Sheet v. 2.0.2
ST_Transform1 Reprojects a raster in a known spatial reference system to another known spatial reference system using specified
resampling algorithm. Options are NearestNeighbor, Bilinear, Cubic, CubicSpline, Lanczos defaulting to NearestNeighbor.
1. rast, srid, scalex, scaley, algorithm=NearestNeighbor, maxerr=0.125
2. rast, srid, algorithm=NearestNeighbor, maxerr=0.125, scalex, scaley
Raster Band Editors
ST_SetBandNoDataValue Sets the value for the given band that represents no data. Band 1 is assumed if no band is specified. To mark a
band as having no nodata value, set the nodata value = NULL.
1. rast, nodatavalue
2. rast, band, nodatavalue, forcechecking=false
ST_SetBandIsNoData1 (rast, band=1)
Sets the isnodata flag of the band to TRUE.
Raster Band Statistics and Analytics
1
ST_Count
Returns the number of pixels in a given band of a raster or raster coverage. If no band is specified defaults to band 1. If
exclude_nodata_value is set to true, will only count pixels that are not equal to the nodata value.
1.
2.
3.
4.
rast, nband=1, exclude_nodata_value=true
rast, exclude_nodata_value
rastertable, rastercolumn, nband=1, exclude_nodata_value=true
rastertable, rastercolumn, exclude_nodata_value
ST_Histogram1 Returns a set of histogram summarizing a raster or raster coverage data distribution separate bin ranges. Number of bins
are autocomputed if not specified.
1.
2.
3.
4.
5.
6.
7.
rast, nband=1, exclude_nodata_value=true, bins=autocomputed, width=NULL, right=false
rast, nband, bins, width=NULL, right=false
rast, nband, exclude_nodata_value, bins, right
rast, nband, bins, right
rastertable, rastercolumn, nband, bins, right
rastertable, rastercolumn, nband, exclude_nodata_value, bins, right
rastertable, rastercolumn, nband=1, exclude_nodata_value=true, bins=autocomputed, width=NULL,
right=false
8. rastertable, rastercolumn, nband=1, bins, width=NULL, right=false
ST_Quantile1 Compute quantiles for a raster or raster table coverage in the context of the sample or population. Thus, a value could be
examined to be at the raster's 25%, 50%, 75% percentile.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
rast, nband=1, exclude_nodata_value=true, quantiles=NULL
rast, quantiles
rast, nband, quantiles
rast, quantile
rast, exclude_nodata_value, quantile=NULL
rast, nband, quantile
rast, nband, exclude_nodata_value, quantile
rast, nband, quantile
rastertable, rastercolumn, nband=1, exclude_nodata_value=true, quantiles=NULL
rastertable, rastercolumn, nband, quantiles
ST_SummaryStats1 Returns summary stats consisting of count,sum,mean,stddev,min,max for a given raster band of a raster or raster
coverage. Band 1 is assumed is no band is specified.
1.
2.
3.
4.
rastertable, rastercolumn, exclude_nodata_value
rast, exclude_nodata_value
rastertable, rastercolumn, nband=1, exclude_nodata_value=true
rast, nband, exclude_nodata_value
ST_ValueCount1 Returns a set of records containing a pixel band value and count of the number of pixels in a given band of a raster (or a
raster coverage) that have a given set of values. If no band is specified defaults to band 1. By default nodata value pixels are not counted. and
all other values in the pixel are output and pixel band values are rounded to the nearest integer.
1.
2.
3.
4.
5.
6.
7.
8.
9.
rast, nband=1, exclude_nodata_value=true, searchvalues=NULL, roundto=0,
rast, nband, searchvalues, roundto=0,
rast, searchvalues, roundto=0,
rast, searchvalue, roundto=0
rast, nband, exclude_nodata_value, searchvalue, roundto=0
rast, nband, searchvalue, roundto=0
rastertable, rastercolumn, nband=1, exclude_nodata_value=true, searchvalues=NULL, roundto=0,
rastertable, rastercolumn, searchvalues, roundto=0,
rastertable, rastercolumn, nband, searchvalues, roundto=0,
4 of 7
109
PostGIS 2.0 Raster Cheat Sheet v. 2.0.2
10. rastertable, rastercolumn, nband, exclude_nodata_value, searchvalue, roundto=0
11. rastertable, rastercolumn, searchvalue, roundto=0
12. rastertable, rastercolumn, nband, searchvalue, roundto=0
Raster Outputs
ST_AsBinary (rast)
Return the Well-Known Binary (WKB) representation of the raster without SRID meta data.
ST_AsGDALRaster 1 (rast, format, options=NULL, srid=sameassource) Return the raster tile in the designated GDAL Raster format. Raster
formats are one of those supported by your compiled library. Use ST_GDALRasters() to get a list of formats supported by your library.
ST_AsJPEG1 Return the raster tile selected bands as a single Joint Photographic Exports Group (JPEG) image (byte array). If no band is
specified and 1 or more than 3 bands, then only the first band is used. If only 3 bands then all 3 bands are used and mapped to RGB.
1.
2.
3.
4.
5.
rast,
rast,
rast,
rast,
rast,
options=NULL
nband, quality
nband, options=NULL
nbands, options=NULL
nbands, quality
ST_AsPNG1 Return the raster tile selected bands as a single portable network graphics (PNG) image (byte array). If 1, 3, or 4 bands in
raster and no bands are specified, then all bands are used. If more 2 or more than 4 bands and no bands specified, then only band 1 is used.
Bands are mapped to RGB or RGBA space.
1.
2.
3.
4.
5.
rast,
rast,
rast,
rast,
rast,
ST_AsTIFF1
1.
2.
3.
4.
options=NULL
nband, compression
nband, options=NULL
nbands, compression
nbands, options=NULL
Return the raster selected bands as a single TIFF image (byte array). If no band is specified, then will try to use all bands.
rast,
rast,
rast,
rast,
options='', srid=sameassource
compression='', srid=sameassource
nbands, compression='', srid=sameassource
nbands, options, srid=sameassource
Raster Processing
Box3D (rast)
Returns the box 3d representation of the enclosing box of the raster.
ST_Clip1 Returns the raster clipped by the input geometry. If no band is specified all bands are returned. If crop is not specified, true is
assumed meaning the output raster is cropped.
1. rast, geom, nodataval=NULL, crop=true
2. rast, geom, crop
3. rast, band, geom, crop
ST_ConvexHull (rast) Return the convex hull geometry of the raster including pixel values equal to BandNoDataValue. For regular shaped and
non-skewed rasters, this gives the same result as ST_Envelope so only useful for irregularly shaped or skewed rasters.
ST_DumpAsPolygons (rast, band_num=1)
specified, band num defaults to 1.
ST_Envelope (rast)
Returns a set of geomval (geom,val) rows, from a given raster band. If no band number is
Returns the polygon representation of the extent of the raster.
1
ST_HillShade (rast, band, pixeltype, azimuth, altitude, max_bright=255, elevation_scale=1) Returns the hypothetical illumination of an
elevation raster band using provided azimuth, altitude, brightness and elevation scale inputs. Useful for visualizing terrain.
ST_Aspect1 (rast, band, pixeltype)
1
ST_Slope (rast, band, pixeltype)
Returns the surface aspect of an elevation raster band. Useful for analyzing terrain.
Returns the surface slope of an elevation raster band. Useful for analyzing terrain.
ST_Intersection2 Returns a raster or a set of geometry-pixelvalue pairs representing the shared portion of two rasters or the geometrical
intersection of a vectorization of the raster and a geometry.
1.
2.
3.
4.
5.
6.
7.
geom, rast, band_num=1
rast, geom
rast, band_num, geom
rast1, rast2, nodataval
rast1, rast2, returnband='BOTH', nodataval=NULL
rast1, band_num1, rast2, band_num2, nodataval
rast1, band_num1, rast2, band_num2, returnband='BOTH', nodataval=NULL
5 of 7
110
PostGIS 2.0 Raster Cheat Sheet v. 2.0.2
ST_MapAlgebraExpr1 1 raster band version: Creates a new one band raster formed by applying a valid PostgreSQL algebraic operation on
the input raster band and of pixeltype provided. Band 1 is assumed if no band is specified.
1. rast, band, pixeltype, expression, nodataval=NULL
2. rast, pixeltype, expression, nodataval=NULL
ST_MapAlgebraExpr1 2 raster band version: Creates a new one band raster formed by applying a valid PostgreSQL algebraic operation on
the two input raster bands and of pixeltype provided. band 1 of each raster is assumed if no band numbers are specified. The resulting raster
will be aligned (scale, skew and pixel corners) on the grid defined by the first raster and have its extent defined by the "extenttype" parameter.
Values for "extenttype" can be: INTERSECTION, UNION, FIRST, SECOND.
1. rast1, rast2, expression, pixeltype=same_as_rast1_band, extenttype=INTERSECTION, nodata1expr=NULL,
nodata2expr=NULL, nodatanodataval=NULL
2. rast1, band1, rast2, band2, expression, pixeltype=same_as_rast1_band, extenttype=INTERSECTION,
nodata1expr=NULL, nodata2expr=NULL, nodatanodataval=NULL
ST_MapAlgebraFct1 1 band version - Creates a new one band raster formed by applying a valid PostgreSQL function on the input raster
band and of pixeltype prodived. Band 1 is assumed if no band is specified.
1.
2.
3.
4.
5.
6.
7.
8.
rast,
rast,
rast,
rast,
rast,
rast,
rast,
rast,
onerasteruserfunc
onerasteruserfunc, VARIADIC args
pixeltype, onerasteruserfunc
pixeltype, onerasteruserfunc, VARIADIC args
band, onerasteruserfunc
band, onerasteruserfunc, VARIADIC args
band, pixeltype, onerasteruserfunc
band, pixeltype, onerasteruserfunc, VARIADIC args
ST_MapAlgebraFct1 2 band version - Creates a new one band raster formed by applying a valid PostgreSQL function on the 2 input raster
bands and of pixeltype prodived. Band 1 is assumed if no band is specified. Extent type defaults to INTERSECTION if not specified.
1. rast1, rast2, tworastuserfunc, pixeltype=same_as_rast1, extenttype=INTERSECTION, VARIADIC userargs
2. rast1, band1, rast2, band2, tworastuserfunc, pixeltype=same_as_rast1, extenttype=INTERSECTION,
VARIADIC userargs
ST_MapAlgebraFctNgb1 (rast, band, pixeltype, ngbwidth, ngbheight, onerastngbuserfunc, nodatamode, VARIADIC args) 1-band version:
Map Algebra Nearest Neighbor using user-defined PostgreSQL function. Return a raster which values are the result of a PLPGSQL user
function involving a neighborhood of values from the input raster band.
ST_Polygon (rast, band_num=1) Returns a polygon geometry formed by the union of pixels that have a pixel value that is not no data value. If
no band number is specified, band num defaults to 1.
ST_Reclass1 Creates a new raster composed of band types reclassified from original. The nband is the band to be changed. If nband is not
specified assumed to be 1. All other bands are returned unchanged. Use case: convert a 16BUI band to a 8BUI and so forth for simpler
rendering as viewable formats.
1. rast, nband, reclassexpr, pixeltype, nodataval=NULL
2. rast, VARIADIC reclassargset
3. rast, reclassexpr, pixeltype
ST_Union1 Returns the union of a set of raster tiles into a single raster composed of 1 band. If no band is specified for unioning, band num 1
is assumed. The resulting raster's extent is the extent of the whole set. In the case of intersection, the resulting value is defined by p_expression
which is one of the following: LAST - the default when none is specified, MEAN, SUM, FIRST, MAX, MIN.
1.
2.
3.
4.
rast
rast, band_num
rast, p_expression
rast, band_num, p_expression
Raster Processing Builtin Functions
1
Raster processing function that calculates the minimum pixel value in a neighborhood.
1
ST_Max4ma (matrix, nodatamode, VARIADIC args)
Raster processing function that calculates the maximum pixel value in a neighborhood.
ST_Sum4ma1 (matrix, nodatamode, VARIADIC args)
Raster processing function that calculates the sum of all pixel values in a neighborhood.
ST_Min4ma (matrix, nodatamode, VARIADIC args)
1
ST_Mean4ma (matrix, nodatamode, VARIADIC args)
1
ST_Range4ma (matrix, nodatamode, VARIADIC args)
neighborhood.
ST_Distinct4ma1 (matrix, nodatamode, VARIADIC args)
neighborhood.
Raster processing function that calculates the mean pixel value in a neighborhood.
Raster processing function that calculates the range of pixel values in a
Raster processing function that calculates the number of unique pixel values in a
6 of 7
111
PostGIS 2.0 Raster Cheat Sheet v. 2.0.2
ST_StdDev4ma1 (matrix, nodatamode, VARIADIC args)
neighborhood.
Raster processing function that calculates the standard deviation of pixel values in a
Raster Operators
&& (A, B)
Returns TRUE if A's bounding box overlaps B's.
&< (A, B)
Returns TRUE if A's bounding box is to the left of B's.
&> (A, B)
Returns TRUE if A's bounding box is to the right of B's.
Raster and Raster Band Spatial Relationships
2
ST_Intersects
Return true if the raster spatially intersects a separate raster or geometry. If the band number is not provided (or set to
NULL), only the convex hull of the raster is considered in the test. If the band number is provided, only those pixels with value (not NODATA) are
considered in the test.
1.
2.
3.
4.
5.
rasta, nbanda, rastb, nbandb
rasta, rastb
rast, nband, geommin
rast, geommin, nband=NULL
geommin, rast, nband=NULL
ST_SameAlignment1
Returns true if rasters have same skew, scale, spatial ref and false if they don't with notice detailing issue.
1. rastA, rastB
2. ulx1, uly1, scalex1, scaley1, skewx1, skewy1, ulx2, uly2, scalex2, scaley2, skewx2, skewy2
This work is licensed under a Creative Commons Attribution
.
Feel free to use this material for private or commercial purposes, but we ask that you please retain the
http://www.postgis.us PostGIS in Action website link.
PostGIS in Action BostonGIS.com
Paragon Corporation
Postgres OnLine Journal
7 of 7
112
オープンソースGISを用いた自然環境解析講座
PostGISコース
テキストブック
<執筆・編集・デザイン>
今木 洋大
PacificTSpatialTSolutions,TLLC
Email:[email protected]
URL:Twww.pacificspatial.com
URL:Twww.geopacific.org
<発行>
2013年4月
<発行者>
特定非営利活動法人 地域自然情報ネットワーク
TheTGeoecologicalTConservationTNetworkT(GCN)
Email:[email protected]
URL:Thttp://www.geo-eco.net
本書は、2013年4月にGCN主催で開催したGIS講座のテキストとして作成された
ものです。複写や転載が必要な場合は、著者または発行者にご相談下さい。