オープンソース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講座のテキストとして作成された ものです。複写や転載が必要な場合は、著者または発行者にご相談下さい。
© Copyright 2024 Paperzz