地理空間とOSGeoとPostGISとを簡
   単に紹介してみます
        寺元郁博
自己紹介
○ 福山市在住
○ (独)農業・食品産業技術総合研究機構
  近畿中国四国農業研究センター
  営農・環境研究領域 所属
○ http://www.finds.jp/ を運営
はじめに
○ 前半
○   OSGeoという団体があります
○   様々なソフトが出ています
○ 後半
○   PostGISをちょっと紹介します
    • 具体性ゼロです
    • 具体的な使用法については「続きはWebで」
ご注意
○ 時々   Finds.jp とか出ます
○   私が運営しているから
○ 時間調整能力が無い
○   だいたい15分が限度
○   余ったらFinds.jpの紹介でもする (私物化)
OSGeoについて
OSGeoとは
○ オープンなジオを応援する財団
○ ジオ   = 地理空間情報
○   地理空間情報=現実の空間と絡む情報
○   「地図」など
オープンなジオ=Google Maps ?
○ たしかに地図が絡んでるし無料




           Google
しかし
○ 右下にある利用規約




              Google
オープンと呼ぶにはキツい
 ○ 地図はゼンリンさんから購入品
 ○ 印刷できない!
   (私的利用でない場合)


2. …ユーザーは、事前に Google…の書面による同
意を得ることなく、…できません:
…
(b) コンテンツまたはその一部を複製…または派生
物を作成すること、
(c) …再配布、再使用許諾…すること、
オープンソースでできないか?
○ たとえばこんなん
 (http://www.finds.jp/damimp/)




              基盤地図情報 (国土地理院)
              位置参照情報 (国土計画局)
必要なもの
○ サクサク動くJavaScript地図ライブラリ
○ 空間データベース
○   ジオなデータを貯めておく + インデクス
○ 地図画像作成
○   空間データベースのデータは線、多角形
○   色や線幅を決めてビットマップデータとして描き出す
必要なもの 1/3
○ サクサク動くJavaScript地図ライブラリ
○ 空間データベース
○   ジオなデータを貯めておく + インデクス
○ 地図画像作成
○   ビットマップデータとして描き出す
あります !
○ OpenLayers (http://openlayers.org/)
○ JavaScriptアプリ
必要なもの 2/3
○ サクサク動くJavaScript地図ライブラリ
○ 空間データベース
○   ジオなデータを貯めておく + インデクス
○ 地図画像作成
○   ビットマップデータとして描き出す
これもあります!
○ PostGIS   (http://postgis.refractions.net/)
 ○   PostgreSQL の拡張
 ○   ジオなデータが入る
 ○   空間インデクス
 ○   幾何関数等
必要なもの 3/3
○ サクサク動くJavaScript地図ライブラリ
○ 空間データベース
○   ジオなデータを貯めておく + インデクス
○ 地図画像作成
○   ビットマップデータとして描き出す
これもあるんです!
○ MapServer
 (http://mapserver.org/)
 ○   CGIとして動作




      基盤地図情報 (国土地理院)
国内で無償入手可能データ
○ 基盤地図情報
○   国土地理院刊行
○   無償配布 (再配布は要承認)
○   1:25000地図 1:2500地図
○ 国土数値情報
○   国土交通省国土計画局発行
○   無償配布,再配布は出典明記のみ
○   一般的な地図とは異なる
ベクタデータからブラウザまで


              ブラウザ
       地図画像




    基盤地図情報
OSSさまさま
○ http://www.finds.jp/ の構成   (本当に)
 ○   GeoWebCaceは地図画像のキャッシュ
  OpenLayers                         ブラウザ
                     地図画像
     MapServer

 Apache HTTPD     PostGIS     GeoWebCache

                 基盤地図情報

                  FreeBSD
オープンソースでできちゃった
○ ダム貯水率マップ
 (http://www.finds.jp/damimp/)




              基盤地図情報 (国土地理院)
              位置参照情報 (国土計画局)
もっと違うデータは ?
○ 基盤地図情報は無償配布だけど…
○   再配布には承認が必要
○   「白地図」
    • 例: 道路や河川は縁を表示
    • 道路トポロジを構築できない → 経路探索は無理
○ これらを解決できないか?
○ しかも世界中の
実はあります !
○ OpenStreetMap
 ○   寄ってたかって地図を作る 地図のWikiPedia
○ オープンなデータ
 ○   CC‐BY‐SA
     • 著作権表示
     • ライセンス継承
○ 未整備地域は
 整備すれば良い
東北関東大震災関連
○ http://sinsai.info/
sinsai.info
○ 現地情報をマッピングする
 ○   モデレータはボランティア
○ http://www.ushahidi.com/ を利用
○ 地図データは     OSM
ところでデスクトップGIS
○ GIS = Geographical Information System
 ○   地理情報システム
○ 分析やデータ加工に利用
 ○   国勢調査データから商圏分析
 ○   標高データから浸水域分析
 ○   空中写真から植生分布の推定
○ 今回は詳細は爽やかに無視
 ○   あまり知らないんだもん…
こんなかんじ
○ 国勢調査  (平17) + 国土数値情報(行政区域)
○ 人口(左,福山濃い) 人口密度 (右, 広島濃い)
デスクトップGISは高い
○ 某市販品
○   基本で40万円
    • データ表示・作成まで
○   追加機能は本体以上の値段
    • 空間解析で68万円
    • ○○で68万円
       … etc
OSSなデスクトップGISあります !
○ QGIS (http://www.qgis.org/)
○ GRASS (http://grass.osgeo.org/)
前半のまとめ
○ ジオなものでもオープンなものはかなりある
○ OSGeoが応援している
○ うちのサイトは相当世話になってる
○   もちろんApacheもFreeBSDも
後半につづく
○ 12時20分に達していないなら質疑応答もありか
  もしれない
○ 12時30分を過ぎていると早口になると思う
PostGIS
なぜPostGIS ?
○ 一番しゃべりやすかったから
○ 非ジオとジオとの中間に居るから
○   非ジオな人 = ジオな部分が分からん
○   ジオな人 = SQLとかよく分からん
PostGISとは
○ PostgreSQL   + GIS
 ○   PostgreSQLは…となりでやってるよね….
○ PostgreSQL   を拡張
 ○   ジオな図形 (点,線,ポリゴン)
 ○   空間インデクス (図形に適したインデクス)
 ○   幾何関数 (図形の結合,AがBに含むかテスト)
○ ライセンスはGPL
マニュアル日本語訳
○ http://www.finds.jp/docs/pgisman/
空間データベース構築方法
○ まずはインストール
○   PostgreSQLのWindows用インストーラにはPostGISもつ
    いてくるのでそこから入れる
○   ソースからのビルド、インストールも可
○ とりあえずPostgreSQL データベース作成
○ データベースに叩き込む
○   次のどちらか
    • psql (DB名) –f /(path) /postgis.sql
    • createdb ‐T template_postgis (DB名)
PostgreSQLとPostGISの違い
○ インデクス
○ テスト関数
○ 集計関数
インデクス
○ インデクスには感謝しても足りない
 ○   初心者がインデクス付けてないのを見てキれたことも
     ありますよね?
○ CREATE INDEX IX_市町村コード   T_市町村(市町
 村コード);
PostGISでは
○ CREATE INDEX IX_市町村geom
      USING GiST T_市町村(geom);
○ PostGIS独自インデクスをGiSTで実現
なんら変わらない
○ USING GiST   が付くだけ
テスト関数
○ SELECT * FROM T_市町村 WHERE
  人口 >= 20000;
○ 人口2万人以上の市町村を抜き出す
PostGISでは
○ SELECT * FROM T_市町村 WHERE
   geom && BBOX(130,30,135,35);
○ 130E 30N – 135E 35E の範囲にひっかかる市町
  村を抜き出す.
なんら変わらない
○ 関数の効果は当然ちがうんですけどね
集計関数
○ SELECT
     Sum(人口) FROM T_市町村 GROUP BY 
  都道府県;
○ 都道府県ごとの人口を集計する
PostGISでは
○ SELECT ST_Union(geom) FROM T_市町村 GROUP 
  BY 都道府県;
○ 市区町村を都道府県ごとにつなぎあわせる
  → 市区町村ポリゴンから都道府県ポリゴンがで
  きる




              ST_UNION(A,B)
なんら変わらない
とはちょっと言いにくいけど,そんなに変ではない
と思うんだけどどうでしょう
PostGISでひっかかるところ
○ データの入手
○ 空間参照系
PostGISでひっかかるところ
○ データの入手
○ 空間参照系
データの入手
○ 初めから自作は厳しい
○ とりあえずなら国土数値情報
○   国土交通省国土計画局刊行
○   “JPGIS” (XMLベース)
○ PostGISが対応するのはシェープ形式
○   SQL/ダンプ以外の話ね
○   ESRI社策定
○   GISでは「いったんシェープに変換」が多い
    ○   ほとんどのGISが対応
国土数値情報をPostGISに
○ 国土数値情報→シェープ
 ○   国土数値情報サイトで配布
 ○   Windows専用 (パス区切りが ’¥’ 固定)
     • Javaなのに (´・ω・`)
○ シェープ→SQL/ダンプ
 ○   PostGIS添付の shp2pgsql を使用
○ SQL/ダンプ→PostGIS
 ○   PostgreSQL添付の psql を使用
PostGISでひっかかるところ
○ データの入手
○ 空間参照系
PostGISは空間参照系に厳しい
○ データ投入時に空間参照系が違うとエラー
○ 「空間参照系ってなんだよー!?」
地図は投影変換する
○ 直交座標系に変換した方が楽に決まってる
○   Sqrt(緯度差^2+経度差^2) で距離計算できない
○ 目的に応じて投影法を変える
○   メルカトル(近世海図)とか
○   縦メルカトル(戦後の地形図)とか
地図上の位置を決める要素
○ 測地系×投影法×パラメータ
○   測地系: 測量の基準(適用回転楕円体等)
○   投影法: メルカトルとか縦メルカトルとか
○   パラメータ: 原点位置,係数等
○ ひとつでも違うと値が異なる
 → 重ね合わせができない
空間参照系
○ 測地系、投影法、パラメータごとに
 コード番号を振る
 ○   コードが違うと基本的には重ね合わせ不可
○ EPSG (European Petroluem   Survey Group)
  が有名
○ “EPSG:4612”等と表記
日本測地系と世界測地系
○ 日本測地系     (Tokyo Datum) 2001年度まで
○ 世界測地系 (JGD2000) 2002年度から
○ 南西方向に400mほどのズレが出る
○ 2001年度までに作製された地図は日本測地系
  なので変換が必要
○ WGS84 (GPS用)とJGD2000はほぼ同じ
 ○   JGD2000はGPSの位置を変換なく重ねてOK
日本でよく使う空間参照系
コード                測地系           投影法      その他
EPSG:4612          JGD2000       緯度経度
EPSG:2443‐2461     JGD2000       横メルカトル   平面直角1系から19系
EPSG:3097‐3101     JGD2000       横メルカトル   UTM ゾーン51から55
EPSG:4326          WGS84         緯度経度
EPSG:32651‐32656   WGS84         横メルカトル   UTM ゾーン51から55
EPSG:4301          Tokyo Datum   緯度経度
EPSG:30161‐30179   Tokyo Datum   横メルカトル   平面直角1系から19系
EPSG:3092‐3096     Tokyo Datum   横メルカトル   UTM ゾーン51から55
                   半径6378137m    メルカトル
EPSG:900913
                   球体
※ EPSG:900913 は非公式コード
PostGISは空間参照系に厳しい
○ データ投入時にCRSが違うとエラー発生
○   「このカラムはEPSG:4612でしばってるけど EPSG:4301
    のデータを入れようとしてるぜ」
    • 400mズレたらかなり悲しい
○ これがないとユーザが泣く
○   「元データがEPSG:4612のつもりがEPSG:4301のデータ
    だったの間違えてた、これまでデータ加工で長時間回
    してたジョブが無・意・味 … orz」
    を防ぐ
後半のまとめ
○ PostGIS
       = PostgreSQL + GIS
○ SQLでしかない、Postgresで書くのと大差ない
○ シェープデータがあればPostGISに格納可能
 ○   シェープに変換できれば勝ち
○ 空間参照系はキツいけどおさえるべし
ここに具体的な使用法が!?
○ http://lets.postgresql.jp/documents/tutorial/Pos
  tGIS
○ ごめん宣伝です…
OSGeo日本のイベント
○ FOSS4G Tokyo/Osaka
 ○   Tokyo: 11/5,6,7
 ○   Osaka: 11/11,12 (関西オープンフォーラム)
○ つづきはWebで
   http://www.osgeo.jp/
○ PostGISのハンズオンがあるらしい
 ○   私ではないので安心ですね
ありがとうございました

地理空間とOSGeoとPostGISとを簡単に紹介してみます