2011年11月30日水曜日

QGISでジオリファレンス

スキャンしたjpg画像などに座標をつけてGISで重ねられるようにすることをジオリファレンスと呼んでます。多分正確な定義は違います。ArcGISではやったことがあったのでQGISでもできるだろうってことでやってみる。

QGISでジオリファレンスをするにはGDALジオリファレンサープラグインを使います。

[PDF] QGIS によるジオリファレンス(幾何補正について)
http://kanagawa-hozen-igaku.cocolog-nifty.com/blog/files/QGIS.pdf



[caption id="attachment_2068" align="alignnone" width="519" caption="いただいた画像なのでモザイクをかけています"][/caption]

ジオリファレンサープラグインを入れたらアイコンをクリックして起動。「ラスタを開く」アイコンで重ねたい画像を選択、「ポイントの追加」アイコンをクリックして画像をクリックするとその場所の座標入力を求められます。

「マップキャンパスより追加」ボタンではQGIS本体に戻って座標をクリックして指定できるらしいのですがなぜかできませんでした。

なので手動で座標を入力していきます。

国内ならウォッ地図で座標を知ることができるのですが、国外だとそうもいかないのでGoogleMapを利用しました。まじGoogle先生。

お決まりのGoogleMapで右上の歯車アイコンをクリックして「マップ Labs」>"緯度経度マーカー"を"オンにする"にチェック、「保存」



マップに戻って座標を調べたいところで右クリック>「緯度経度マーカーを設置」


座標が表示されます。

この座標をジオリファレンサーに入力していきます。Y,Xの順になってるので注意。

4ヶ所以上入力します。終わったとこ。



「ジオリファレンスの開始」アイコンをクリックします。ダイアログが現れますので設定画面にいきます。



"変換タイプ"とかもうわかりません。とりあえず"出力ラスタ"に適当な名前をいれて"ターゲットSRS"を(EPSG:4326(WGS84))にして"実行された時にQGISにロードします"のチェックを入れて「OK」

暫く待つとジオリファレンスが完了します。



非常にわかりにくいですが、できてます。

次は道をshpファイル化(デジタイズ)。

あと結局等高線もDEMも2枚のデータにまたがってるからマージとモザイク?しないと。

2011年11月28日月曜日

植生データ作成①

新しい評価基準に基づき、植生ファイルを修正。ArcPyで県別植生shpファイルを1次メッシュで切り取る。


植生shpファイルは例によって生物多様性センターから新潟と群馬をダウンロード。

生物多様性センター(環境省 自然環境局)
http://www.biodic.go.jp/

1次メッシュはESRIのサイトから。

標準地域メッシュ作成ユーティリティ
http://www.esrij.com/products/arcview3/faq/file/make/makemesh.html

ダウンロードした1次メッシュshpファイルはなぜか座標系が指定されてないのでArcCatalogでファイルを右クリック>「プロパティ」からWGS1984に指定してあげる。


1次メッシュshpファイル、都道府県界shpファイル、新潟県植生shpファイルを表示させたとこ。グンマーいらなかったですね。


1次メッシュshpファイルの必要なところだけ選択してエクスポート。



ArcGISでの作業はここまで。本当はこういうのもArcPyでできるんだろうなあ。
次はいよいよArcPyの出番。コードはESRIのサポートページにログインしてQ&Aで"サンプルコード"とかで検索すれば出てくると思います。"Python スクリプトを ArcGIS Desktop を起動せずに実行する方法"という記事です。

Esri製品サポート|サポート|ESRIジャパン株式会社
http://www.esrij.com/support/esri/

エクスポートした1次メッシュshpファイルと新潟の植生shpファイルを同じディレクトリに入れてpyファイルにパスを指定、それぞれのshpファイルを指定してメインメニュー「Run」>「Run Module」

失敗したときはエラーメッセージが表示されますが、成功時は何も表示されません。結構時間かかります。

できたファイルをArcGISで確認。

クリップできてました。

次は植生の分類をpythonで書いて楽にやりたい。
DSMが手に入らなかったから○○群生と○○・△△群生とかで点数変えるかー。

植生の内訳まとめ
基礎調査目次
http://www.biodic.go.jp/kiso/fnd_f.html
3次メッシュ植生データのリンクから。

2011年11月27日日曜日

twitterBOTの作成③

タイムゾーンを東京(GMT+09:00)に直す。

datetime.datetime.now()はタイムゾーンを引数にとれるみたい。でも引数がちょっと面倒。

以下を参考にさせていただきました。

Pythonでタイムゾーンを扱うメモ « taichino.com
http://taichino.com/programming/1876

タイムゾーンが設定できたところでdatetime.datetime(2012,1,21) - datetime.datetime.now(JST())をすると今度はnaiveがどーたらこーたら。

今度は以下を参考にdatetime.datetime(2012,1,21)の引数にtzinfo=JST()を加える。

あるエンジニアの不定期勉強記録
http://abalone.ununu.org/archives/705



できました。この画像からはよくわかりませんが…。

現在のsotsuprobot.py

[sourcecode language="python"]
# -*- coding: utf-8 -*-
import twitter
import datetime

api = twitter.Api(
cache = None,
consumer_key = '****',
consumer_secret = '****',
access_token_key = '****',
access_token_secret = '****')

# タイムゾーンの設定
class JST(datetime.tzinfo):
def utcoffset(self, dt):
return datetime.timedelta(hours=9)
def dst(self, dt):
return datetime.timedelta(0)
def tzname(self, dt):
return 'JST'

# 残り時間の算出
teisyutsubi = datetime.datetime(2012,1,21,23,59,tzinfo=JST())
ima = datetime.datetime.now(JST())
nokorijikan = teisyutsubi - ima

# tweet
text = u"現在時刻"+ str(ima) + u" 卒プロ成果登録締め切りまで あと" + str(nokorijikan.days) + u"日 #sfc_sotsupro"

api.PostUpdate(status=text)
[/sourcecode]

cron.yaml

[sourcecode language="text"]
cron:
- description: tweet
url: /sotsuprobot
schedule: every 3 hours
timezone: Asia/Tokyo
[/sourcecode]

[twitter-follow screen_name='sotsupro2012' show_count='no']

twitterBOTの作成②

今日はBOT用アカウントを作成してアプリを刺してGoogleAppEngineで自動的に実行させる。

まずBOT用アカウントを作成。これは一般登録と同じ。同じメールアドレスは使えないんだね。昨年のBOT名を参考にしたら卒論じゃなくて卒プロでした。

次にBOT用アカウントにログインした状態で前回oauth2認証に使ったPythonを実行する。すると別のAccess tokenとAccess token secretが取得できる。

GoogleAppEngineに載せる。

以下を参考にさせて頂きました。

ほげおメモ: Python Twitter API python-twitter の使い方 (Part4): Google App Engine
http://blog.hogeo.jp/2011/06/python-twitter-api-python-twitter-part4.html

twitter.pyやhttplib2/やoauth2/は/Library/Python/2.7/site-packagesからコピーしたりPython-twitterをインストールする際にダウンロードしたフォルダからコピーしたり。

cron.yamlはとりあえず2分毎にツイートするように設定。これらを同じフォルダに格納。

GoogleAppEngineLauncherを起動してメインメニュー>「File」>「Add Existing Application」でフォルダを追加。あとhttps://appengine.google.com/で保存?するアプリケーション?を作成。「Deploy」



いろいろあったけどとりあえずこれで2分おきに発言するBOTができました。

Deploy中にいろいろいじるとDeployされなくなってしまうので、そのときはDeployしてる上のフォルダにいってrollbackする。

アプリをappcfgでrollbackせよ - CaMiL
http://d.hatena.ne.jp/beso/20110521/rollback

appcfg.py rollback /フォルダ名 でよかったはず。

結果がこちら。



タイムゾーンがおかしくなってる…。GoogleAppEngineは米国のサービスだからか。

つづく

2011年11月26日土曜日

twitterBOTの作成

そうだ、卒業論文提出日までの日数を自動で発言するtwitterBOTをPythonで作成すれば勉強になるんじゃないかと思って。

Pythonでtwitterを扱うPython-twitterのインストールは以下。

Python Twitter のインストール
http://www.yukun.info/blog/2011/03/python-twitter-install.html

コードの作成はほとんど以下を参考にさせていただきました。

ほげおメモ: How to make Twitter Bot by Python (Part 1) python-twitter
http://blog.hogeo.jp/2011/05/how-to-make-twitter-bot-python-twitter.html

part1~5まであります。part1はなぜか英語なのでTwitter API ポケットリファレンス (POCKET REFERENCE)も参考にしました。

[sourcecode language="python"]
# -*- coding: utf-8 -*-
import twitter
import datetime

api = twitter.Api(
consumer_key = '****',
consumer_secret = '****',
access_token_key = '****',
access_token_secret = '****')

teisyutsubi = datetime.date(2012,1,21)
kyou = datetime.date.today()
nokorijikan = teisyutsubi - kyou
text = u"卒業論文提出日まで あと" + str(nokorijikan.days) + u"日"

api.PostUpdate(status=text)
[/sourcecode]

2011年11月24日木曜日

QGISでDEMのカラーマップを変更する。陰影図を作る。

パタゴニアの地図をもっとわかりやすくする。

プラグイン — GeoPacific.org
http://www.geopacific.org/opensourcegis/gcngisbook/GCN_book/4ed89332/4ed89332b/qgis_plugin

 

カラーマップの変更→1-Band Raster Color Table V1.x

一度作ったカラーマップを変更するのはカラーマップのデータを削除しなければエラーがでる。

陰影図→relief shader

使い方は上記URLを参照。

 



ほとんど氷河なんだなーと。氷河も入れたい。どうしたらいいんだろう。眠い。

2011年11月23日水曜日

QGISでDEMから等高線データを作る

卒業旅行でパタゴニア(特にフィッツロイ&セロトーレ)に行きたいんだけど地図が手に入らなーいということで自作する。まず等高線を作ろう。

まずGoogleMapからフィッツロイの座標を調べる。なんでフィッツロイなのかというとセロトーレより有名なので。

座標を調べるツールは右上歯車アイコンから「マップLabs」>"経緯度ツールチップ"で"オンにする"を選択して「保存」。これでShiftキーを押すことでだいたいの座標を知ることができます。





こんなかんじ。

DEMはASTER GDEMから。解凍してQGISで表示。心配なので2枚とってきてしまった。ArcGISでいうモザイクをしてもいいかもそれません。



等高線を作るにはメインメニュー「ラスタ」>「等高線」。やってることは過去記事と同じです。

"入力ファイル"に元のDEM、"等高線の出力ディレクトリ"には適当な名前、"等高線の間隔"は今回20.00(m)にしました。残り2つのチェックボックスにチェックして「OK」。



しばらくかかりますが等高線が作られます。それぞれやっても等高線は違わないみたいですね。



元のDEMはもう洋ナシなのでリストから削除。



GoogleMapと重ねたいので右下から座標系をGoogle Mercator(EPSG:900913)にして'オンザフライ'CRS変換を有効にする。

メインメニュー「プラグイン」>「OpenLayers plugin」>「OpenLayers Overview」で表示しているところのGoogleMapが表示されるので、がんばって対象地域を探して+印のボタンをクリック。



今日はここまで。

次はDEMから標高による色分けをしようか陰影図もつくろうか。でもトレッキングルートを入れないとなあ。山頂のポイントデータもほしい。

ASTER GDEMからGRASSフォーマットのDEMを作る②

エントリー2つに分けたけどやること前のと同じだったw

ワープしたASTER GDEMのtifファイルをGRASSにインポートする。



今回ロケーション、マップセットはこのようにしました。もちろん座標系はEPSG:32654

インポートの手順は前回と同じ。



Titan2Dは精神的に疲れるから次回にしよう。

ASTER GDEMからGRASSフォーマットのDEMを作る①

どうも数値地図10mメッシュ標高データだとTitan2Dが動かないので他のDEMデータでやってみることにする。

30m解像度だけど扱いやすいASTER GDEMをダウンロードしてきてQGISで座標系変換(←今回ここまで)、GRASSにインポートしてDEMを作る。

まず、ASTER GDEMのダウンロード。こちらから。日本語もあるから問題ないはず。ログインしたら左メニュー「検索」からです。一時期ダウンロードできなくなってたけど直ってました。

解凍して所定のフォルダ(DETA5)に入れる。



次にQGISで座標系をWGS84からWGS84UTMzone54Nに変換する。もしかしてWGS84のままでもTitan2D動く?

_demの方に雪崩発生地点を重ねたとこ。どっちもWGS84です。



座標系を変換します。

メインメニュー「ラスタ」>「ワープ(再投影)」

"出力ファイル"は元の_demとおなじtif形式がいいんじゃないかな。"ソースSRS"がEPSG:4326(WGS84)になっていることを確認、"ターゲットSRS"をEPSG:32654(WGS84UTMzone54N)に「選択」して「OK」





じょーずにできましたー。

ワープが実行できない人はこちらのエントリーを参照するといいかも。

2011年11月22日火曜日

Androidのremember the milkがproアカウントじゃなくても使えるようになって た。

表題の通り。

前回の投稿の時かそのすぐ後にはproアカウントじゃなくてもAndroidでremember the milkが使えるようになってたみたいですね…。

Remember The Milk 日本版 公式ブログ » Remember The Milk for Androidの大規模アップデート
http://blog.rememberthemilk.jp/2011/10/the-ginormous-remember-the-milk-for-android-update/

2011年11月17日木曜日

GoogleMapで指定範囲を拡大する方法、距離を測定する方法

指定範囲を拡大する方法

Googleマップ右上の歯車アイコンから「マップLabs」で「ドラッグ&ズーム」を"オンにする"にチェック。



左のスライドズームバーの下に虫眼鏡アイコンが現れるのでクリック



ドラッグして拡大したい範囲を囲む。



拡大されます。



距離を測定する方法

Googleマップ右上の歯車アイコンから「マップLabs」で「距離測定ツール」を"オンにする"にチェック。



左下のスケールバーの横に定規アイコンが現れるのでクリック。



測定したい二点間をそれぞれクリックすると距離が表示される。

2011年11月16日水曜日

(未完)VHubからTITAN2Dを動かす③

AvalancheProject2/tanigawa_demのmargeを使ってTITAN2Dを動かしてみた結果。

データはwebdav/GRASS/に入れました。VHubだと/home/username/GRASS/



途中は端折って結果。



またエラーorz



GRASSで見てみても特に問題ないんですが…。

 

考えられること:

そもそもDEMの大本のデータがおかしい。→ASTER GDEMでやってみる。

[GRASS]ロケーション、マップセットの作成、ラスタデータのインポート

じゃあQGISからGRASSに変換するとこにデータが抜けたんだ。(そういえばGRASSツールボックスを使ったときに警告マークがでていた)と思ってGRASSオンリーでtifファイル(DEM)をインポートする。

GRASSを起動。スタート画面から"GIS Data Directory"を設定して(GRASS)、「Location wizard」をクリック。



"Project Location"に新しいロケーションの名前(AvalancheProject2)を入力して「次へ」



上から2番目の"Select EPSG code of spatial reference system"にチェックを入れて「次へ」



マップの"EPSG code"を選択(今回は32654 WGS84 UTM zone 54N)。「次へ」



確認して「完了」



次にマップセットの作成。スタート画面から「Create mapset」をクリック。

マップセットの名前を入力(tanigawa_dem)。「OK」



確認して「Start GRASS」



続いてラスタデータのインポート。(今回はtifファイル)

メインメニュー>「File」>「Import raster data」>「Common import formats」

"Source name"の"File:"で「Browse」をクリックしてインポートしたいファイルを選択。"Format:"が正しいか確認して「Import」





いいですね。