Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "オープンソースGISを用いた 自然環境解析講座"— Presentation transcript:

1 オープンソースGISを用いた 自然環境解析講座
PostGISコース 2012年6月24日 講師: 今木洋大

2 自己紹介 GCNの紹介、スタッフの紹介 各自の自己紹介 (参加者全員で) 専門、バックグラウンド、何でも GISを何に使っているか?
各自の自己紹介 (参加者全員で) 専門、バックグラウンド、何でも GISを何に使っているか? なぜオープンソースに興味があるか? 講習会に期待するもの

3 1.はじめに (60min) 講義内容・日程について オープンソース GISについて ソフトウェアーインストールの確認 実習

4 講習会内容 1.はじめに(60min) 4.PostGIS -応用編-(90min)
講義内容・日程について オープンソース GISについて ソフトウェアーインストールの確認 実習 2.PostGISと オープンソースツール(60min) PostGIS、PostgreSQLとは QGISについて データベースの作成方法 ベクタデータのPostGISへのインポート方法 日本語対応 3.PostGIS-入門編-(90min) PostGISとPostgreSQLについて (PostGISとは何か) pgAdminとSQL (基本的なSQL構文について) SQL入門 PostGISデータの作り方  テーブルの結合 ビューの作成 実習 4.PostGIS -応用編-(90min) PostGISによる空間情報の検索 (SQL応用編) PostGISによるジオメトリー操作 (基本的なコマンド紹介。intersection, bufferなど) より複雑な検索 5.PostGISラスタ解析(30min) ラスタデータの取り扱い ラスタ解析の例

5 オープンソースGISとは何か オープンソースソフトウェアーとは、あるライセンス契約の元、ソースコードが公開されているソフトウェアーのことであり、そのライセンス下ではソフトウェアーの改変とその再配布が許されている。 ( 2007).

6 オープンソースGISとは何か ということは、 オープンソースソフトウェアーは必ずしも無料ではない さまざまなライセンスの種類がある
GNU GPL、BSD、Apache ライセンスなど 改変、再配布においてもオープンソースである必要がある

7 オープンソースGISとは何か フリーウェアはフリーソフトと違う フリーソフトとオープンソースは似ている そこで、まとめてFOSS4G
GoogleEarth,GoogleMap Virtual Earth, BingMaps ArcExplorer ERDAS VeiwFinder フリーソフトとオープンソースは似ている そこで、まとめてFOSS4G Free and Open Source Software for Geospatial 350以上のFOSS4G製品が利用できる(freegis.org)

8 なぜオープンソースGISを使わないか すでに市販製品を使っていて満足している オープンソースGISを知らない 自分のニーズがよくわからない
いろいろ自分で勉強するのが面倒くさい

9 どっちを使う? どうやって仕事を確実にそして早く終わらせられるか? 自分のGIS使用の目的を明確にする 自分のリソースを知る(人的、金銭的)

10 PostGISの歴史 2001年Refractions Research(カナダ)によって開発開始
2005年4月、安定バージョン1.0リリース GNU General Public License 2012年4月、バージョン2.0リリース データベース構成の変更 各種コマンドの強化 ラスターの取り扱い シェープファイルローダーの改善 新しいインデックスの実装

11 PostGISの良さ データベース クエリと多様なファンクションにより細部に渡り、解析をコントロールしやすい
データの安全性 大きなデータの取扱 クエリと多様なファンクションにより細部に渡り、解析をコントロールしやすい クエリを書くことにより質問に集中できる SQL自体が履歴ファイル 解析の繰り返し、やり直しがやりやすい ビューがレイヤとして扱える R、Pythonなどと連携しやすい(オープンソース)

12 PostGISリソース Refractions: http://postgis.refractions.net/
BostonGIS:  OpenGeo:  Paul Ramseyのブログ: 私のサイト:  英語の本 PostGIS in Action Regina O. Obe and Leo S. Hsu, Manning

13 WWW.GeoPacific.org WWW.GeoPacific.orgとは
日本におけるオープンソースGIS(FOSS4G)の活用を促進するための双方向の知識ベース 最新のGISおよび周辺ソフトウェアーの動向、利用 方法、トラブルシューティングなど実践的な情報を集め共有 統計パッケージR、やPython、そのほかオープンソースで刺激的で面白いものはどんどん取り入れる オープンソースコンテンツマネージメントシステムPloneを使ってサイトを構築 ユーザー登録すれば誰でも独自のページを作れる。 一般公開するためには管理者や編集者の許可が必要 ページの作成、編集、画像のアップなどが簡単 参加型のホームページでありながら、内容を公開前に吟味できる 情報の共有に最適のツール

14 実習1 ソフトウェアーインストールの確認 PGAdminⅢを使って、PostgreSQL/PostGIS環境を見る QGISの動作確認
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ファイルをダブルクリックする

15 PostgreSQL・pgAdmin IIIを開く
2.「データベース」の+マークをクリックしてデータベースリストを展開 PostGIS Shapefile and DBF Loader 2.0を開く SQLエディターを開く 3.「template_postgis_20」をクリックしてデータベースにアクセスした後、現れる+マークをクリックしてデータベースを展開

16 データベースtemplate_postgis_20を調べる
以下の内容がpgAdminⅢで確認できるか サーバ データベース スキーマ Public テーブル Spatial_ref_sys ビュー Geometry_columns

17 テーブルの中身の確認 1 対象テーブルをリストから選択 「データをビュー」ボタンをクリック テーブルの表示 2 3

18 SQLエディタとSQLの実行 クエリの実行 SQLアイコンをクリック SQLエディタにクエリを書く 「クエリの実行」ボタンをクリック

19 QGIS可動の確認 postgis_training.qgsファイルをダブルクリックしてQGISを起動

20 2.PostGISと オープンソースツール (60min)
PostGIS、PostgreSQLとは QGISについて データベースの作成方法 ベクタデータのPostGISへのインポート方法 日本語対応 実習

21 GISデータの変換、メタデータの閲覧、視覚化
PostGIS、QGIS、、、 数値データの 解析 プログラミング ベクタデータの保存、解析 GISデータの変換、メタデータの閲覧、視覚化 ラスタデータの 解析

22 PostGISとは? 空間情報データベースの一種
他にはOracle、MySQL、SQLite、IBM DB2、SQL Server2008、Ingres等がある このうちオープンソースは、 PostgreSQL、MySQL、 SQLite、Ingres 空間情報データベースとは? リレーショナルデータベース ジオメトリー情報を格納 空間情報の検索やジオメトリーの操作を可能にした PostgreSQLのライブラリ PostGISという単独のGISソフトウェアーではない PostgreSQLの機能拡張

23 他のGISとどこが違うか? SQLで空間情報を解析 オープンソース(GNU General Public License) 無料
ローカル、サーバ両環境 様々なGISのバックエンドとして活躍 空間データの視覚化機能がない 最新のPostGISではpgAdminⅢからはデータの簡単な視覚化が可能になっている

24 なぜPostGISを使うか GISサーバーとして使える 強力なジオメトリ解析機能+標準のデータベース機能 オープンソースである
大きなデータを扱える ウェブマッピングなどのバックエンドで使える MapServer, GeoServer, GeoDjangoなど 安定 とにかくおもしろい などなど

25 いつPostGISを使わないか 地図作成 GISデータ入力・編集 GISデータ視覚化 ラスターデータ解析(まだ開発途上)
GRASS、QGIS、MapServer、GeoServer、 市販製品、 GISデータ入力・編集 GRASS、QGIS、市販製品、 GISデータ視覚化 QGIS、GRASS、UDig、 MapServer、GeoServer、市販製品、 ラスターデータ解析(まだ開発途上) GRASS、GDAL、市販製品、 データフォーマット変換 QGIS、GDAL/OGR、 メタデータ閲覧

26 PostGISのユーザーインターフェース
PostGISを使う=SQLを書いて実行する GUI管理・開発ツールpgAdminⅢを使う コマンドラインのpsqlを使う QGISのアドインを使う

27 pgAdminⅢ PostgreSQLデータベースの管理、データ検索などに用いられる、オープンソースプログラム
データベースの作成、テーブルの管理、クエリーの作成などがGUIで行える

28 pgAdmin ⅢとSQLエディタ

29 QGISとは オープンソースGIS データの視覚化、管理、編集、分析、地図の作成など 日本語化されている(OSGeo-Japan)
ユーザーインターフェースが洗練、使い安い 開発速度が速い 多様なラスター、ベクターデータを扱える アドインを使うことで機能を拡張できる 比較的軽い PostGISのビュアーとして使える PostGISのジオメトリを編集できる PostGISの様々なアドインが用意されている

30 QGISによるPostGISデータの表示 (データベースへの新規接続)
1 3 2

31 QGISによるPostGISデータの表示
データベースを選択し テーブルを選択し 加える

32 PostGISを使う準備 データベースの作成 データのインポート template_Postgis_20データベースをテンプレートとする
Shapefileローダーを使ったシェープファイルのインポート

33 データベースの作成 pgAdminⅢの起動 サーバーへアクセス データベースの新規作成 サーバーアイコンをダブルクリック
サーバーアイコンで右クリックして新規作成 テンプレート:template_postgis_20 エンコーディング: utf8 オーナー:postgres

34 PostGISデータベースの新規作成 テンプレート: template_postgis_20

35 PostGISへのデータのインポート Shp2pgsql (シェープファイル) OGR(OGRでカバーされているファイル形式)
コマンドライン GUI OGR(OGRでカバーされているファイル形式) QGIS・SPITプラグイン(シェープファイル)

36 pgAdminⅢからシェープファイルローダーを呼び出す

37 Shp2pgsqlでシェープファイルを インポート
データベース接続設定 SRS、テーブル名の指定 シェープファイルの指定 オプション

38 PostGIS Shapefile and DBF loader 2.0
複数のシェープファイルがインポートしやすくなった 複数のシェープファイルのインポート 複数のDBFファイルのインポート PostGISデータのシェープファイルとしてのエクスポートができるようになった

39 PostGIS Shapefile and DBF loader 2.0
PostgreSQLサーバーへの接続設定 インポート先のデータベース名 サーバー接続のテスト

40 PostGIS Shapefile and DBF loader 2.0
シェープファイルの指定 スキーマ名 インポート後のテーブル名 インポート後のジオメトリ列名 EPSGコード 各項目を編集する場合は、その項目をダブルクリック

41 PostGIS Shapefile and DBF loader 2.0
列名の大文字、小文字の使用を保存するか。ディフォルトでは小文字を使用 Bigintデータタイプを許可するか 空間インデックスを作成するか DBFのみをインポートするか データインポート挿入ではなくコピーを使うか ジオメトリをGEGRAPHY列に読み込むか

42 pgsql2shpとshp2pgsql PostGISデーターをshapefileに変換またはその逆
Postgresqlのフォルダない、binフォルダに収められている コマンドラインツール Pgsql2shp -f shepefile名 -h localhost -u postgres データベース名 テーブル名

43 日本語エンコーディング PostgreSQL8.4から、データベースごとにロケールの設定が可能 詳しくは、
ロケールの設定を「C」に設定するとエンコーディングの設定に柔軟性が出る 日本語のエンコーディングは、UTF8がお勧め 詳しくは、

44 実習2 PostGISデータベースを作成 データベースmacacaにデータをインポート エンコーディング:SHIFT-JIS
テンプレート: template_postgis_20 エンコーディング: UTF-8 データベースmacacaにデータをインポート エンコーディング:SHIFT-JIS 国勢調査データ(ポリゴン) \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  (テーブル名) 国勢調査データ(テーブル) \census\male_female_en.dbf  census_male_female  (テーブル名) \census\occupation_en.dbf  census_occupation  (テーブル名)

45 3.PostGIS -入門編- (90min) PostGISとPostgreSQLについて pgAdminとSQL SQL入門
テーブルの結合 ビューの作成 実習

46 PostGISとPostgreSQLについて (PostGISとは何か)
空間情報の検索、作成、操作ができる 現在は、ベクターデータのみを扱える 近い将来、ラスターも扱える

47 DBMSとSQL PostGISを使うには、データベースの基礎知識が必要となる。
そのためここでは少し、データベース操作の基礎となる、データベースマネージメントとSQLについてpgAdmin III を使って勉強する

48 pgAdmin III データベースのリスト データベースの中身

49 データベースの構造 スキーマが収められている スキーマ PostGISのすべてのファンクションが収められている ファンクション
ジオメトリーコラム テーブル 各テーブルのジオメトリーについての情報が収められる 空間参照系 テーブル 空間参照系(SRS)についての情報が収められている ビュー ビューが収められている

50 データベース用語のまとめ データベース スキーマ テーブル ビュー データベースの下に作られるディレクトリー構造のようなもの
データを収める入れ物 ビュー データ自身ではなく、データを検索するクエリーを保存したもの

51 テーブル 実際にデータを保存 行がデータ単位 列で属性を示す

52 空間参照系テーブル 空間参照系(SRS)の定義に関する情報が収められている 独自のSRSを挿入する事もできる
spatialreference.orgを利用

53 ビュー SQLで作ったクエリ自体を保存したもの ビューを呼び出すごとにSQL文が実行される データは含まない
ひとつ以上のテーブルから任意のデータを選択、表示できる 使いこなせばとても便利

54 ジオメトリーコラムビュー 各テーブルのジオメトリーに関する情報を収めるビュー(PostGIS独自のもの)
PostGIS1.xではテーブルとして扱われていた GeoServerなどのアプリケーションはこのビューをメタデータとして参照する

55 スキーマとは? データベース内に作られるディレクトリーのようなもの スキーマ間の情報検索が可能 (データベース間は不可能)
スキーマ間の情報検索が可能 (データベース間は不可能) 例えば、基本的なデータは、 ‘base’というスキーマに保存し、プロジェクトAに関するデータは、’project_a’というスキーマに保存する。 データのバックアップなど、維持管理が簡単になる。 スキーマごとにテーブルへのアクセスの権限設定ができる

56 データベース用語のまとめ データベース スキーマ テーブル ビュー データベースの下に作られるディレクトリー構造のようなもの
データを収める入れ物 ビュー データ自身ではなく、データを検索するクエリーを保存したもの

57 空間参照ID (SRID) 座標参照系(CRS・SRS)が標準化されている
代表的なコード系はEPSG (European Petroleum Survey Group) コード 例えば、 参照系名 EPSGコード WGS84 4326 日本測地系2000:JGD2000 4612 WGS84 / UTM zone 54N 32654

58 SQL 101 Structured Query Language データの問い合わせに特化した言語 リレーショナルデータベースの操作
データ定義 CREATE TABLE, DROP TABLE,… データ操作 SELECT, DELETE, UPDATE,… データ制御 BEGIN,… PostGISは、SQLを使って空間的な情報の問い合わせを可能にしている

59 SQL 101 「市町村」テーブルから、「place」列にあるデータを返す SELECT 列名 FROM テーブル名;
SELECT place FROM 市町村; 「市町村」テーブルから、「place」列にあるデータを返す SELECT 列名 FROM テーブル名; 大文字小文字は関係ない SQL文の最後にはセミコロンを付ける すべての列を選択するには、「*」 SELECT * FROM in_table

60 データの検索、SELECT文 SELECT文を使い、必要な情報を検索する SELECT place FROM 市町村; 日光 今市 湯元
テーブル名:市町村 Id place the_geom 1 日光 E6……… 2 今市 3 湯元

61 実際にクエリを書いてみる クエリでは大文字小文字を気にしない -- 集落の名前とその人口を表示させる
SELECT moji, jinko FROM census; -- 集落の名前とその人口を人口の多い順に表示させる SELECT moji, jinko FROM census ORDER BY jinko DESC; --集落名に重複があるので、重複した集落はまとめて人口の多い順に集落名を表示する SELECT moji, SUM (jinko) FROM census GROUP BY moji ORDER BY sum DESC; --最も人口の多い集落名(moji)とその人口だけを表示 SELECT moji, SUM (jinko) FROM census GROUP BY moji ORDER BY sum DESC LIMIT 1;

62 SELECT文 「census」テーブルから、列「moji」、「jinko」を返す -- 集落の名前とその人口を表示させる
SELECT moji, jinko FROM census; 「census」テーブルから、列「moji」、「jinko」を返す

63 ORDER BY [列名] DESC (ASC)
-- 集落の名前とその人口を人口の多い順に表示させる SELECT moji, jinko FROM census ORDER BY jinko DESC; クエリの結果を並び替える 一つまたは複数の列名を指定する 昇順(asc)、降順(desc)を指定する 昇順がデフォルト

64 集約クエリ レコードを集約した結果を返す 合計「sum」、最大「max」、最小「min」、平均「avg」、サンプル数「count」
--集落名に重複があるので、重複した集落はまとめて人口の多い順に集落名を表示する SELECT moji, SUM (jinko) FROM census GROUP BY moji ORDER BY sum DESC; レコードを集約した結果を返す 合計「sum」、最大「max」、最小「min」、平均「avg」、サンプル数「count」

65 集約クエリ --集落名に重複があるので、重複した集落はまとめて人口の多い順に集落名を表示する 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 6 200 moji SUM 今市 280 日光 180 湯元 30 降順

66 実際にクエリを書いてみる 国勢調査(census)を使ってクエリを書く練習をする。 データベース「macaca」を開く
SQLアイコンをクリックしてSQLエディタを開く

67 pgAdminⅢ SQLエディター 結果のエクスポート クエリの実行 実行したい文を選択 クエリの結果出力 クエリの実行に関するメッセージ

68 結果の出力 クエリで得られた結果は、pgAdminⅢの「ファイル」メニュー、「エクスポート」でテキストファイルとして出力できる

69 実習3-1:クエリの基本 国勢調査テーブル(census)から 集落の名前 (moji) とその人口 (jinko) を表示させる
人口の多い順に集落名を表示した結果をテキストファイルとして保存

70 データの検索、WHERE句 WHERE句で条件を絞り込む SELECT place FROM 市町村 WHERE id = 1; 日光
テーブル名:市町村 id place the_geom 1 日光 E6……… 2 今市 3 湯元

71 WHERE句では 条件の絞り込みには以下の比較演算子が使える
<、>、<=、>= <> != また、AND、OR、NOT、IN、LIKE、EXISTS、BETWEENなどの演算子も使える 詳しくは:

72 SQLのコツは、 細かいことは後にして、、、
SELECT place FROM 市町村; SELECT place FROM 市町村 WHERE id <= 2; SELECT place FROM 市町村 WHERE id <=2 AND place LIKE ‘東%’;

73 SQLのコツは、 細かいことは後にして、、、
SELECT place FROM 市町村 LIMIT 10; LIMITを使うことで、戻ってくるデータの件数を制限する クエリを試す際に便利

74 実習3-2:クエリの基本 国勢調査テーブル(census)から 市町村名(gst_name)「今市市」に該当するすべての列(データ)を表示

75 PostGIS用のテーブルを作る テーブルの作成 データの挿入 プライマリキーの設定 インデックスの作成 テーブル統計の取得
テーブル名:市町村 id place the_geom 1 日光 ……… 2 今市 3 湯元

76 今日のクエリー1 --PostGISテーブルを初めから作る
CREATE TABLE 市町村 (id int4, place varchar (20), geom geometry(Point, 4326)); INSERT INTO 市町村 VALUES (1, '日光', ST_GeomFromText ('POINT ( )', 4326)); INSERT INTO 市町村 VALUES (2, '今市', ST_GeomFromText ('POINT ( )', 4326)); INSERT INTO 市町村 VALUES (3, '湯元', ST_GeomFromText ('POINT ( )', 4326)); INSERT INTO 市町村 VALUES (4, '鹿沼', ST_GeomFromText ('POINT ( )', 4326)); ALTER TABLE 市町村 ADD CONSTRAINT pkey_市町村 PRIMARY KEY (id); CREATE INDEX idx_市町村 on 市町村 (id); CREATE INDEX gist_市町村 on 市町村 USING GIST (the_geom); --テーブルに関する情報を収集する VACUUM ANALYZE 市町村;

77 テーブルの作成 CREATE TABLE テーブル名 ( 列名1 データタイプ, 列名2 データタイプ, 列名3 データタイプ);
データを収納する空のテーブルを作成する テーブル名、列名には日本語も使用可能 ただし、列名に日本語を使うと、ダブルクオーテーションマークを使う必要があるため、半角英数字を使うほうが便利 列名にはName, tableなどの幾つかの予約語があるので使用を避ける CREATE TABLE テーブル名 ( 列名1 データタイプ, 列名2 データタイプ, 列名3 データタイプ); 列名1 列名2 列名3

78 テーブルの作成 PostgreSQLのデータタイプ データタイプ 説明 例 int4 整数 3 float4 浮動小数点数 1.023
varchar() テキスト ‘Tokyo’ geometry ジオメトリー E6**** date 日付 Wed Dec 17 time 時間 07:37: PST

79 テーブルの作成 CREATE TABLE 市町村 (id int4, place varchar (20)); テーブルを作るコマンド
列名とデータタイプ 列名とデータタイプ テーブル名 セミコロン Id place

80 PostGIS用のテーブルを作る 通常のテーブルとの違いは、 PostGISテーブル作成の手順 ジオメトリ列を含むだけ PostGIS2.X
テーブル作成時にジオメトリー列も作成 CREATE TABLE 通常のテーブルにジオメトリー列を追加 ALTER TABLE *** ADD COLUMN PostGIS1.X 通常のテーブルを作成した後、ジオメトリー列を入れる命令を実行 SELECT ADDGEOMETRYCOLUMN

81 PostGISテーブルの作成 CREATE TABLE 市町村 (id int4, place varchar (20));
CREATE TABLE 市町村 (id int4, place varchar (20), geom geometry(POINT, 4326)); ジオメトリ列名 ジオメトリタイプとSRS データタイプ Id place geom

82 ジオメトリータイプ POINT LINESTRING POLYGON ジオメトリーとは、表現したい対象の幾何的な形状
 ジオメトリーとは、表現したい対象の幾何的な形状 実際の世界をモデル化するためにいくつかのジオメトリーが考えられるが、点、線、面であらわすのが一般的 PostGISのジオメトリータイプには、点、線、面、に対応する、POINT、LINESTRING、POLYGONが用意されて いる。 PostGISでは、代表的な3タイプの他に多数のジオメトリータイプがある

83 ジオメトリー列の挿入 テーブルの変更(ALTER TABLE)
すでにあるテーブルに列を加えたり、削除したり、列名を変更したり、様々な制限を加えたりする ALTER TABLE 市町村 ADD COLUMN geom geometry(Point, 4326); テーブル名:市町村 Id place geom Id place

84 ジオメトリー列の挿入 ALTER TABLE 市町村 ADD COLUMN geom geometry (Point, 4326);
テーブル名 ALTER TABLE 市町村 ADD COLUMN geom geometry (Point, 4326); 空間参照系 (EPSG) データタイプ ジオメトリータイプ ジオメトリー列名 テーブル名:市町村 Id place geom Id place

85 ジオメトリー列の挿入 ALTER TABLE 市町村 ADD COLUMN geom geometry(Point, 4326);
テーブル名:市町村 市町村にジオメトリーを保存するための列を挿入 geometry_columns ビューには自動的にテーブルに関する情報が収められる Id place geom 1 2 3 ビュー名:geometry_columns ADDGEOMETRYCOLUMNはPostGISコマンド 必要な情報は、 スキーマ名(省略可) : ‘public’ テーブル名 : ‘my_table’ ジオメトリー列名 : ‘the_geom’ 地理参照系ID (EPSG) : 4326 ジオメトリータイプ : ‘POINT’ 地理参照系の次元 : 2 Id Schema Table Name Geometry Column SRID Geometry Type Dimension 1 Public 市町村 the_geom 4326 POINT 2

86 実習3-3:クエリの基本 日光、今市、湯元の人口を示す以下の「人口」テーブルを作る 市町村の位置を示す「市町村」テーブルを作る
列名とデータタイプ Id (int4) Population (int4) 市町村の位置を示す「市町村」テーブルを作る ジオメトリタイプ:POINT EPSG:4326 id (int4) place (varchar(20)) geom (geometry) id population テーブル名:人口 id place geom テーブル名:市町村

87 PostGIS用のテーブルを作る テーブルの作成 データの挿入 プライマリキーの設定 インデックスの作成 テーブル統計の取得
テーブル名:市町村 id place geom 1 日光 ……… 2 今市 3 湯元

88 データの挿入 作成したテーブルにデータを挿入する
INSERT INTO テーブル名 (列名1, 列名2, 列名3) VALUES (値1, 値2, 値3); 列に左から順番に値を挿入する場合は列名の指定をしなくても良い INSERT INTO テーブル名 VALUES (値1, 値2, 値3);

89 ジオメトリを作る PostGISではジオメトリはバイナリで保存されている
SELECT ST_GeomFromText ( 'POINT ( )', 4326); バイナリのジオメトリーをテキスト表現から作るコマンド ジオメトリーをテキストで表現 SRID バイナリをテキスト表示 SELECT ST_AsText ( ST_GeomFromText ( 'POINT ( )', 4326) );

90 ジオメトリーを作る (経度 緯度) スペース!
ST_GeomFromText ('POINT ( )', 4326) ( ) スペース! (経度 緯度)

91 データの挿入 INSERT INTO 市町村 VALUES ( 1, ‘日光',
ST_GeomFromText ('POINT ( )‘, 4326) ); INSERT INTO 市町村 VALUES ( 2, '今市', ST_GeomFromText ('POINT ( )', 4326) ); INSERT INTO 市町村 VALUES ( 3, '湯元', ST_GeomFromText ('POINT ( )', 4326) ); テーブル名:市町村 id place geom 1 日光 E6……… 2 今市 3 湯元 Id place the_geom 1 日光 E6……… 2 今市 Id place the_geom 1 日光 E6………

92 実習3-4:クエリの基本 人口テーブルにデータを挿入 市町村テーブルにデータを挿入 列名 データ id population 1 30000
1, 30000 2, 62000 3, 1000 市町村テーブルにデータを挿入 Id, place, geom 1, 日光, POINT ( ) 2, 今市, POINT ( ) 3, 湯元, POINT ( ) 4, 鹿沼, POINT ( ) id population 1 30000 2 62000 3 1000 id place geom 1 日光 ……… 2 今市 3 湯元 4 鹿沼

93 PostGIS用のテーブルを作る テーブルの作成 データの挿入 プライマリキーの設定 インデックスの作成 テーブル統計の取得
テーブル名:市町村 id place geom 1 日光 ……… 2 今市 3 湯元

94 プライマリーキーの設定 プライマリーキーとは、テーブルの各行を一意に識別するための列。QGISでデータを見るために必要。この場合、Idをキーに設定。 テーブル名:市町村 id place the_geom 1 日光 E6……… 2 今市 3 湯元 ALTER TABLE 市町村 ADD CONSTRAINT pkey_市町村 PRIMARY KEY (id);

95 プライマリーキーの設定 データ(各行)が一意であることを保障する仕組み
制限名。この場合プライマリーキー名 テーブルに何かしらの規制を加えるためのコマンド ALTER TABLE 市町村 ADD CONSTRAINT pkey_my_table PRIMARY KEY (Id); 規制がプライマリーキーであることの宣言 プライマリーキーを設定する列名 テーブル名:市町村 id place the_geom 1 日光 E6……… 2 今市 3 湯元

96 空間インデックス・テーブル統計の取得 後ほど。。。 -- プライマリーキーの設定
ALTER TABLE 市町村 ADD CONSTRAINT pkey_市町村 PRIMARY KEY (id); -- インデックスの作成 CREATE INDEX idx_市町村 on 市町村 (id); -- 空間インデックスの作成 CREATE INDEX gist_市町村 on 市町村 USING GIST (the_geom); -- テーブルに関する情報を収集する VACUUM ANALYZE 市町村;

97 実際には、、、 テーブルをいちから作り上げることは少なく、既存のデータを使うことが多い
しかし、どの様にPostGISのデータが保存されているのか知ることは重要

98 実習3-5: クエリの基本 以下のクエリを実行して「市町村」テーブルを完成させる -- プライマリーキーの設定
ALTER TABLE 市町村 ADD CONSTRAINT pkey_市町村 PRIMARY KEY (id); -- インデックスの作成 CREATE INDEX idx_市町村 on 市町村 (id); -- 空間インデックスの作成 CREATE INDEX gist_市町村 on 市町村 USING GIST (the_geom); -- テーブルに関する情報を収集する VACUUM ANALYZE 市町村;

99 テーブルの結合 複数のテーブルを共通のキー(列)を使って結合する SELECT文で結合したテーブルの中から必要な列だけを選択できる
結合には様々な種類があるが、等結合(inner join)と外部結合(left join)が主 Inner join, left (right, full) outer join, cross joinなどがある Inner joinはテーブル間に共通するキーだけを元にレコードを表示する

100 等結合 左外部結合 id 市町村 1 日光 2 今市 3 鹿沼 id 人口 1 10000 2 50000 4 120000 id 市町村
市町村テーブル 人口テーブル 左外部結合 id 市町村 1 日光 2 今市 3 鹿沼 id 人口 1 10000 2 50000 4 120000 id 市町村 人口 1 日光 10000 2 今市 50000 3 鹿沼 NULL 市町村テーブル 人口テーブル

101 等結合 SELECT 市町村.id, 市町村.place, 人口.population FROM 市町村, 人口
1 日光 2 今市 3 鹿沼 id population 1 10000 2 50000 4 120000 id place population 1 日光 10000 2 今市 50000 市町村テーブル 人口テーブル SELECT 市町村.id, 市町村.place, 人口.population FROM 市町村, 人口 WHERE 市町村.id = 人口.id;

102 等結合 SELECT 市町村.id, 市町村.place, 人口.population FROM 市町村, 人口
1 日光 2 今市 3 鹿沼 id population 1 10000 2 50000 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;

103 左外部結合 SELECT 市町村.id, 市町村.place, 人口.population FROM 市町村 LEFT JOIN 人口
1 日光 2 今市 3 鹿沼 id population 1 10000 2 50000 4 120000 id place population 1 日光 10000 2 今市 50000 3 鹿沼 NULL 市町村テーブル 人口テーブル SELECT 市町村.id, 市町村.place, 人口.population FROM 市町村 LEFT JOIN 人口 ON 市町村.id = 人口.id;

104 実習3-6 テーブル結合に関する以下のクエリを試す -- テーブルの結合 (Inner Join)
SELECT 市町村.id, 市町村.place, 人口.population FROM 市町村, 人口 WHERE 市町村.id = 人口.id; FROM 市町村 INNER JOIN 人口 ON 市町村.id = 人口.id; -- テーブルの結合 (Left join) FROM 市町村 LEFT JOIN 人口

105 ビュー SQLで作ったクエリ自体を保存したもの ビューを呼び出すごとにSQL文が実行される データは含まない
ひとつ以上のテーブルから任意のデータを選択、表示できる 使いこなせばとても便利

106 ビューの作成 GISのデータとしてビューを利用する データを視覚化できる テーブルの変更を常に反映 サイズが小さい
CREATE VIEW 市町村別人口 AS SELECT 市町村.id, 市町村.place, 市町村.the_geom, 人口.population FROM 市町村, 人口 WHERE 市町村.id = 人口.id GISのデータとしてビューを利用する データを視覚化できる テーブルの変更を常に反映 サイズが小さい

107 QGISでテーブル及びビューを見る 名称: macaca ホスト: localhost データベース: macaca
ユーザー名:postgres パスワード:各自

108 QGISでテーブル及びビューを見る

109 実習3-7 市町村テーブルと人口テーブルを結合したビューを作り、ビューをQIGSで見る CREATE VIEW 市町村別人口 AS
SELECT 市町村.id, 市町村.place, 市町村.geom, 人口.population FROM 市町村, 人口 WHERE 市町村.id = 人口.id;

110 今日のクエリー2 エイリアス --年寄りの男女別人口を集落ごとに示し、年寄り率を求め、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;

111 エイリアス テーブル名の表記またはクエリを別の短い名前で表す。たとえば、
SELECT monkey.id, monkey.date FROM monkey; SELECT t1.id, t1.date FROM monkey t1; と表現できる。 複数のテーブルを使ったクエリでは、「テーブル名.列名」の形式で引っ張ってくる列を指定するので、特にエイリアスの利用が便利になる。 また、クエリの結果返される列名にもエイリアスを使える

112 今日のクエリー2 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;

113 SQLでの演算 基本的な算術演算子、+、ー、*、/、が使える 文字関数も多数用意されている
文字関数も多数用意されている

114 今日のクエリー 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; 2つのテーブルの 等結合 総人口が0のデータは除く

115 今日のクエリ2

116 DROP TABLE と DROP VIEW 作成したテーブルまたはビューを削除する
もしすでにテーブルがある場合に削除、ない場合にはコマンドを無視 DROP TABLE IF EXISTS テーブル名; 色々条件を変えながら行う作業に便利

117 今日のクエリー 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;

118 実習3-8 テーブルの結合 結合したビューをQGISで見てみる
国勢調査のテーブル(census)と男女別人口テーブル(census_male_female)を結合して、 65歳以上の人口(tot_egt_65)が一番多い集落名(moji)を見つける 国勢調査のテーブルと職業別人口テーブルを結合して、 農林水産業を営む人が一番多い集落と少ない集落(moji)を調べる 結合したビューをQGISで見てみる 年寄りの男女別人口を集落ごとに示し、年寄り率を求め、GISレイヤとして使えるようにジオメトリとプライマリキーを入れたビューを作る以下の属性値を各集落ポリゴン単位で表示できるようにする 総人口 (total) 65歳以上の人口 (tot_egt_65) 65歳以上の男性の人口 (m_gt65) 65歳以上の女性の人口 (f_gt65) 年寄り率= 65歳以上の人口 (tot_egt_65) /総人口 (total) * 100

119 4.PostGIS -応用編- (90min) PostGISによる空間情報の検索(SQL応用編) PostGISによるジオメトリー操作
より複雑な検索 実習

120 今日のクエリ―3 空間情報検索 --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;

121 PostGISによる空間情報の検索 空間情報のクエリーには、SQL文をベースにジオメトリーとPostGISのさまざまな機能を使う。
空間クエリーとは、空間に関した情報の検索で例えば、 サルの植生タイプの利用頻度を調べる 植生タイプはポリゴン、サルの位置は点 各テーブルは以下のようなフォーマット ID 植生タイプ the_geom 1 ミズナラ林 ******* 2 スギ林 3 水田 植生テーブル サルテーブル ID 日付 the_geom 1 2011/11/1 ******* 2 2011/11/6 3 2011/11/20

122 PostGISによる空間情報の検索 SELECT 植生.植生タイプ, COUNT(サル.ID) FROM 植生, サル
WHERE ST_INTERSECTS (植生.the_geom, サル.the_geom) GROUP BY 植生.植生タイプ; ID 植生タイプ the_geom 1 ミズナラ林 ******* 2 スギ林 3 水田 植生テーブル 植生タイプ COUNT ミズナラ林 2 スギ林 4 水田 ID 日付 the_geom 1 2011/11/1 ******* 2 2011/11/6 3 2011/11/20 サルテーブル

123 今日のクエリー4 ジオメトリ操作 DROP TABLE IF EXISTS riparian; --もしテーブルがあったら削除する
--河川から一定の距離にある植生の面積を求める --まず最初に植生図を河川のバッファーで切り抜く DROP TABLE IF EXISTS riparian; --もしテーブルがあったら削除する CREATE TABLE riparian AS SELECT t2.v_name, ST_INTERSECTION(t1.geom, t2.geom) geom FROM (SELECT 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 / ) area_km2 FROM riparian GROUP BY v_name ORDER BY area_km2 DESC;

124 PostGISによるジオメトリー操作 ジオメトリー操作とは、ジオメトリーに手を加えること。例えば、
二つのポリゴンの交わる面を取り出す 複雑なポリゴンを単純化する 線にバッファーを発生させる PostGISにはさまざまなジオメトリー操作のための機能がそろっている

125 PostGISによるジオメトリ操作 河川から200mのバッファを発生させ、植生ポリゴンを切り抜く 河川テーブル 植生テーブル
ID 県名 the_geom 1 広瀬川 ******* 2 名取川 3 北上川 河川テーブル ST_Buffer ( t1.the_geom, 200 ) ID 植生タイプ the_geom 1 ミズナラ林 ******* 2 スギ林 3 水田 植生テーブル ST_Intersection ( ST_Buffer ( t1.the_geom, 200 ), t2.the_geom )

126 PostGISによるジオメトリ操作 --まず最初に植生図を河川のバッファーで切り抜く CREATE TABLE riparian AS
SELECT t2.v_name, ST_INTERSECTION(t1.geom, t2.geom) geom FROM (SELECT ST_UNION(ST_BUFFER(geom, 200)) geom FROM river WHERE rin = '板穴川') t1, vegetation t2 WHERE ST_INTERSECTS(t1.geom, t2.geom);

127 サブクエリー クエリーの中で使われるクエリー SELECT t2.v_name,
ST_INTERSECTION(t1.geom, t2.geom) geom FROM (SELECT ST_UNION(ST_BUFFER(geom, 200)) geom FROM river WHERE rin = '板穴川') t1, vegetation t2 WHERE ST_INTERSECTS(t1.geom, t2.geom);

128 PostGISファンクション ST_Intersection (t1.geom, t2.geom) ST_Union (geom)
2つのジオメトリの交差を求める ST_Union (geom) ジオメトリを溶融させる ST_Buffer (geometry, distance ), バッファを発生させる ST_Intersects (t1.geom, t2.geom) 2つのレイヤの地物が重なるかどうか ST_Area (geom) 地物の面積を求める

129 PostGISによるジオメトリ操作 --次に新しい列を作って各植生ポリゴンの面積を求める
ALTER TABLE riparian ADD area_m2 float4; UPDATE riparian SET area_m2 = ST_Area ( the_geom ); --最後に植生タイプでポリゴンの面積を集計する SELECT v_name, SUM ( area_m2 / ) area_km2 FROM riparian GROUP BY v_name ORDER BY area_km2 DESC;

130 SQL:列追加とアップデート テーブルに新しい列を加える 列に値を入力する Alter Table テーブル名 ADD 列名 データタイプ;
Update テーブル SET 対象列 = 値 --次に新しい列を作って各植生ポリゴンの面積を求める ALTER TABLE riparian ADD area_m2 float4; UPDATE riparian SET area_m2 = ST_Area (geom);

131 PostGISによるジオメトリー操作 機能の一例 ST_Buffer ST_ConvexHull ST_Difference
バッファーのジオメトリーを返す ST_ConvexHull 最小凸型多角形のジオメトリーを返す ST_Difference ジオメトリーAのうち、ジオメトリーBと交わらない部分のジオメトリーを返す ST_Intersection ジオメトリーAとBが共有する部分のジオメトリーを返す ST_Simplify Douglas-Peuker アルゴリズムを使ってジオメトリーを単純化する ST_Union ジオメトリーを結合した結果出来上がる点集合のジオメトリーを返す

132 今日のクエリー4 ジオメトリ操作 DROP TABLE IF EXISTS riparian; --もしテーブルがあったら削除する
--河川から一定の距離にある植生の面積を求める --まず最初に植生図を河川のバッファーで切り抜く DROP TABLE IF EXISTS riparian; --もしテーブルがあったら削除する CREATE TABLE riparian AS SELECT t2.v_name, ST_INTERSECTION(t1.geom, t2.geom) geom FROM (SELECT 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 / ) area_km2 FROM riparian GROUP BY v_name ORDER BY area_km2 DESC;

133 今日のクエリ4

134 空間インデックス 空間インデックスとは、ジオメトリーにつけられるインデックスで、空間情報の検索を著しく早くすることができる。
PostGISでは、ジオメトリーがバウンディングボックス(BBox)という箱で各ジオメトリーを囲み、その箱同士の関係でインデックスを作る 複雑なジオメトリーでも、箱にすれば2つの点で表せる PostGISの情報検索は実は2段階で行われる バウンディングボックスによる検索 実際のジオメトリー情報による検索 インデックスは入れ子になった箱同士の関係を整理したもので、目的の情報にすばやくアクセスすることを可能にする

135 PostGIS用のテーブルを作る テーブルの作成 ジオメトリコラムの挿入 データの挿入 プライマリキーの設定 インデックスの作成
テーブル統計の取得 テーブル名:市町村 id place the_geom 1 日光 ……… 2 今市 3 湯元

136 空間インデックス 例えば、ネズミAとネズミBの行動圏の重複を調べるとする。
ネズミAの行動圏のBBOXはR8で表され、ネズミBはR19で表される この場合、実際のネズミAの行動圏のポリゴンは500点から、ネズミBは300点から構成されているとする。 AとBの行動圏が重複しないのは明らかだが、もし空間インデックスを使わないならば、ネズミBの300点がネズミAの500点から構成されるポリゴン内に落ちていないことを調べる必要がある。 空間インデックスを使えば、それぞれの上位インデックスのR3とR7が交差していないことから、これらの行動圏が重複していないことがインデックスの検索だけでわかる。 ネズミA ネズミB

137 空間インデックスの作成 インデックス名は自分でつける(何でもよい)
CREATE INDEX [インデックス名] ON [テーブル名] USING GIST ( [ジオメトリー列名] ); Vacuum Analyze  [テーブル名]; インデックス名は自分でつける(何でもよい) Vaccum Analyzeは、インデックスを実際にクエリーで使えるようにするために必須

138 そのほかのPostGIS機能 管理機能 (16) ジオメトリー作成 (28) ジオメトリー情報の取り出し (32)
ジオメトリー列の追加: ST_AddGeometryColumn() ジオメトリー作成 (28) テキストからジオメトリーを作成: ST_GeometryFromText() ジオメトリー情報の取り出し (32) ジオメトリータイプを調べる: ST_GeometryType() ジオメトリー編集 (25) ジオメトリーの投影系・座標系を変換する: ST_Transform() ジオメトリー出力 (10) ジオメトリーをテキスト表示で返す: ST_AsEWKT() バウンディングボックスの位置関係を調べる (13 オペレーター) バウンディングボックスの重なりを調べる: && 空間関係と計測 (33) ポリゴンの面積を返す: ST_Area() ジオメトリー操作 (18) バッファーを発生させる: ST_Buffer() リニアリファレンシング (6) 線上に落ちる点を発生させる:  ST_Line_Interpolate_Point() 長いトランザクションのサポート(6) 上で分類しにくい機能 (16) そのほかの機能 (3)

139 実習4 Ki群が1996年6月から9月に利用した植生タイプを求め、その頻度を示す Ki群の1996年6月から9月の行動圏(最外郭法)を描く
ST_ConvexHull(geom) QGISで行動圏を表示し、確認する Ki群の1996年6月から9月の行動圏内の植生割合を求める ST_Intersection(geom, geom) 利用可能な植生(行動圏内)と実際に利用した植生(サルのポイント)を比較する ボーナス:行動圏内にランダムに100ポイントを発生させ、その植生タイプを求め、サルの実際の利用と比較する

140 5.PostGISによるラスタ解析 (30min)
ラスタデータの取り扱い ラスタ解析の例 実習

141 PostGIS2.0 正式にラスタデータが取り扱える ラスタを取り込むraster2pgsql.exeを利用
QGISのPostGIS Rasterアドインを使ってラスター表示 機能はまだ限定的

142 raster2pgsql -s SRID -I -C -M -F -t 50x50 -l 2,4,8 in_raster out_table
ラスタのインポート コマンドラインツール、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が元のサイズ その他多数

143 ラスタのインポート 実際のインポートコマンドの例 Nikko10m.tif をdemというテーブル名でインポート SRSは32654、タイルサイズは50x50、オーバービューは2, 4, 8の3種類 空間インデックス、各種データ制限を加え、実行後にバキュームを実行 パイプ(|)を使って、結果を直接データベースmacacaに送る raster2pgsql -s I -C -M -F -t 50x50 -l 2,4,8 c:\gisdata\nikko10m.tif dem | psql -U postgres macaca

144 ラスタの表示 QGISの「Load Postgis Raster to QGIS 0.5.3」をインストール
インストールしたアドインで、表示したいラスタを指定して表示

145 ラスタの表示

146 ラスタのデータタイプ ラスタの代表的データタイプ rasterとgeomval raster geomval インポートしたデータ
複数のバンドを持てる geomval geomとvalの2つのフィールドから成るラスタデータタイプ geom: ジオメトリーオブジェクトを収納 val: 倍精度浮動小数点数でピクセル値を収納 ベクタデータとのインタラクションに使われる

147 ラスタの機能 ST_Clip() ST_Aspect(), ST_Slope(), ST_Hillshade()
ST_Intersection() ST_MapAlgebraExpr() ST_Polygon() ST_Reclass() ST_Union() ST_Interesects() … その他多数

148 ポイント上のラスタ値を求める -- 各点の標高を求める 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;

149 実習5 raster2pgsqlを使って、標高、傾斜、方位ラスタをインポート QGISで読み込んだラスタを表示
Ki群が1996年6月から9月に利用した場所の標高、斜面傾斜、斜面方位を求める


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

Similar presentations


Ads by Google