2012/06/29

Google Earthを使ってWMSを見る

WMS (Web Map Service)を使えば色々なクライアントで勝手に閲覧ポータルを作ることも出来るからご自由にドウゾ的なところはあるわけです.

が,単に見たいだけの人にとって(かつ,GISじゃない人)そんなこと言われても何のことだか分かりませんね.というわけで,まぁまぁ汎用なGoogle EarthでWMSを見るための手順を書いてみました.

今回対象にしているのは,産総研GEO Girdが出しているベースマップのWMSで,URLは,
です.まず,このリンクをクリックしたら,
"No query information to decode. QUERY_STRING is set, but empty."
とか言われておしまいですね.何もQueryが無いから何も答えられないと言っている(この場合は,MapServer)わけです.じゃ,WMSとして正しくやると, 今度は何か返って来ました.が,これを読んでどうしろ?と思いますね.じゃ,ここから先はGoogle Earthにお任せで.

まずは,イメージオーバーレイの追加を選択します.普通は分からないところで,【更新】メニューをみると,【WMSパラメータ】を設定できるようになっています.
イメージオーバーレイの追加の更新メニュー
【WMSパラメータ】ボタンを押すと,WMSのURLを選択できるようになっています.ここでは,自分が知っている他のWMSを貼り付けるので,【追加】ボタンをクリックします.
WMS URL追加メニュー
【追加】ボタンをクリックすると,URLを入力するウインドウが開くので,そこに,
http://ows.geogrid.org/basemap
を入力します.
WMS URL入力画面
【OK】を押すと,画面左側に何かがリストされます.実はこの時,上のGetCapabilitiesリクエストがサーバに送信されていて,よくわからないXMLが解釈されて左側のリストが出来上がっています.1行毎のエントリをレイヤと呼びます.このうちの1つ,Land Cover Map MOD12を選択して,【追加 ->】ボタンをクリックします.
レイヤーの追加画面
これで,WMS画像の貼り付けは完了なのですが,実際には見た目が汚いため,少し調整が必要です.まずは,画像のフォーマットがgifになっているので,jpegもしくはpngにするほうが良いです.特別な画面があるわけではないので,【リンク:】の中で直接修正する必要があります.
画像フォマット変更画面
もう一つは画像のサイズです.デフォルトでは,512 x 512ピクセルの画像がリクエストされています.これだと,小さい画像を拡大表示してGoogle Earthの上にレンダリングしてしまうので,非常にぼけた画像になってしまいます.ディスプレイのサイズに合わせて,
WIDTH=2048&HEIGHT=2048
などとして下さい.ここでの上限値(サーバの設定)は,2048です(いずれ大きくなるかもしれません).
リクエスト画像サイズ変更画面
最後に【OK】をクリックすると,表示されます.
Google EarthでMOD12プロダクト(土地被覆図)WMSを貼りつけた結果
(補足)
  • キャプチャの取得には,Mac OS X版Google Earthバージョン6.2.2.6613を使いました 
  • 画像サイズである,WIDTHとHEIGHTは,GoogleのWMSクライアントが画面のサイズじ応じてリクエストしてくれても良いはずと思ってるのですが... 
  • KMLの中でWMSを定義して提供することも可能です.地震動マップ即時推定システムで,各地震毎にKMLでくるんだWMSを提供しています.


2012/06/22

たたき亭

高知,食べたぜ!


2012/06/11

天然ピンホール

今更だけど,5月21日の金環日食の時に撮影した天然ピンホールの場所をおおよそ同じ時刻に丸い太陽で撮影してみた!

2012年5月21日 午前7時50分,部分日食中に撮影

2012年6月10日 午前8時00分,普通の太陽で撮影
ようするに,普通の状態だと,ただの木陰で私にはこれがピンホールになっているのは分からないです....日食になって初めて気づく.

火山データベース

火山の「あたり」を定義する情報が欲しい.

スミソニアンが整備しているリストが一番大きいようで,情報がたくさんある.
一番単純なのはエクセルみたい.だけど,かっこよくない.が,KMLがある!しかもon-demand updateが出来るようになっていて,7日間で更新と定義されてる.やるなぁ〜.

参考


(思ったよりネタが少なかった)

on-demand updateなKMLを書くのはとても重要.普通にKMLに情報を書いて渡すのは良いけど,その後更新ができなくなってしまいます.これを回避するためには,小さいKMLを渡して,実体のデータはサーバ(CGIとか)で常時配信できるようにしておくのが良いです.

      <Link>
        <href>http://kml.example.com/volcano.pl</href>
        <refreshInterval>2</refreshInterval>
        <viewRefreshMode>onStop</viewRefreshMode>
        <viewRefreshTime>1</viewRefreshTime>
      </Link>

という感じでもろもろ設定できます.

2012/06/07

geometryカラムに対するPerl DBIからのinsert

geometryカラム(ここでは,the_geom)に対して,
     my $geom = "st_setsrid(st_makepoint($lon,$lat),4326)";
     my $sth = $dbh->prepare("insert into events (the_geom) values (?)");
     $sth->execute($geom);
すると,


     DBD::Pg::st execute failed: ERROR:  parse error - invalid geometry
     HINT:  You must specify a valid OGC WKT geometry type such as POINT, LINESTRING or POLYGON
とか言われてしまう.


が,
     my $sth = $dbh->prepare("insert into events (the_geom) values ($geom)");

     $sth->execute();
として,executeの引数じゃなくしちゃえば動く...

そんな話なのか....


あ,でもこれじゃ引数変えて実行出来ないじゃん.