読者です 読者をやめる 読者になる 読者になる

waigani's diary

QGISを中心にFOSS4Gをいじくる

QGISで人口が半分になるように2分割してみた

QGIS

人口が半分になるように都道府県を二分割してみた

togetter.com
というのがtwitterでまわっていましたね。
これをQGISでやるプラグインを作って、FOSS4G Advent Calendar
FOSS4G Advent Calendar 2016 - Qiita
のネタにしようと思っていました。ただ朝の時点で出来ていなかったので、他の投稿をしておきました。
UIを作るところで思いの外ハマったのでですが、なんとなくできたので晒しておきます。

QGISプラグイン

GitHubにおいておきました。
github.com

プラグインの動作

インストールして実行してもらうと、ベクトルレイヤ(ポリゴンのみ)を選択→レイヤ内の使用するカラムの選択を行えます。
合わせてスライダーで割合を指定します。
f:id:waigani:20161201224121p:plain
この画像の例だと、

  • h22ka01204レイヤを
  • JINKO カラムを使って
  • 人口上位の地域から加えていって30%になる地域:それ以外の地域で色分け(30%超えたところで止めてるのでだいたいね)

になります。

e-stat から平成22年の小地域をダウンロードしてきて試してみました。

  • 旭川市を、人口上位の地域から数えていって30%になるところまでを青:それ以外を赤で色分け

f:id:waigani:20161201224811p:plain

  • 札幌市を、人口上位の地域から数えていって50%になるところまでを青:それ以外を赤で色分け

f:id:waigani:20161201225042p:plain

処理の仕方

大事なところだけ。

  • comboboxとsliderから値を持ってきて
  • 指定のlayerの指定のカラムの値を全部足す
  • sliderの値の割合をかけて、目標の数字とする
  • 指定カラムの値をソート
  • ソートしたものを足していって、目標の数字を超えたところでストップ
  • この条件でQgsRuleBasedRendererV2を作成
  • layerにセットして再描画

としています。

QtDesinger with QGIS 2.14 custom widgets

どこでハマってたかというと。気づいてなかったのですがQGISをインストールすると、QtDesingerがついてくるんですね。
このQtDesingerにはQGISのcustom widgetsがついています。

例えばQgsFieldComboBoxだと、レイヤを渡すと勝手にFieldでComboBoxを作ってくれます。
ただ作ったUIを実行しようとすると、エラーが出てしまいました。このあたりを参考に修正しています。
osgeo-org.1560.x6.nabble.com

QGIS 3.0を後押ししよう

QGIS

FOSS4G Advent Calendar 2016

今年もFOSS4G Advent Calendarを行います。
例年のような勧誘もしておりませんので、まだまだ参加に余裕がある状況です。
どのソフトに興味があるとか、この処理で困っているとか、些細なことで結構ですので、みなさまのご参加お待ちしております。
qiita.com

Let’s make a big funding push for QGIS 3.0!

QGISみなさん使ってますよね?
お仕事で各所回っていても、現場で広まっているのがわかるようになってきました。"QGIS"と提案して、すでに使ってる/検討しているというレベルでお話が通じるようになって来ています。

さて、そこでみなさんにお願い。

QGIS projectからQGIS 3.0リリースへ向けて、みなさまからの後押しのお願いがきております。
本来なら下記ブログを翻訳して各国で紹介してね、と言われているのですが、時間がなくて放置しててすいません。。。
blog.qgis.org

かいつまんで、

  • 2017年にQGIS 3.0のリリースが予定されています
  • 2.xシリーズで解決できなかった多くの問題を取り除くために、モダンな構造となります
  • 例えば、Qt5、Python3への移行、古いコードの見直し、多くのQGISにパフォーマンスの改善と安定性をもたらす調整を行います
  • その他のキーとなる問題としては.... (省略)

みなさまへのお願いとしては、

  • 個人ユーザの方には寄付の検討

Donations

  • 企業で働いている方は、スポンサーの検討

Sponsorship Program Overview

  • 社内にQGIS開発者がいる場合は、QGIS3.0開発への貢献に時間を割くことへの考慮を

などなどとなっていますので、ぜひご検討ください。

日本でも、QGIS3.0リリースの前には日本語環境での動作検証や、ドキュメントの翻訳など、さまざまな作業が必要になると思われます。この辺はOSGeo.JP内でも調整して追々。

みなさま、ご協力の程よろしくお願い致します。

合同会社MIERUNEを設立いたしました

このたび合同会社MIERUNEを設立いたしました。
www.mierune.co.jp

オープンなデータ、オープンなソフトウェアを駆使して、みなさまと一緒に課題の解決に取り組みます。
設立メンバーは地理空間情報分野で特に豊富な経験を持っておりますが、そこにこだわらず広く、可視化、データ解析、データ共有の技術を駆使したコンサルティング、システム開発を行っていきます。
事務所は札幌に置いておりますが、どこへでも行きます(もしくはネットで繋げます)ので、気軽に声をお掛けください。

まだ設立したばかりの会社で、必要最低限の設備でのスタートとなっております。
amazonで欲しいものリストも公開してみました。MIERUNEへの応援よろしくお願い致します。
www.amazon.co.jp

QGISプログラミング入門 2016Osaka編

QGIS 資料 processing

QGISプログラミング入門

2013年に札幌と東京でハンズオンを行った際に資料を作成しました。
slideshareにあげてあるのですが、地味にいまでもアクセスあるんですよね。

大阪市大でワークショップの機会をいただきましたので、資料を最近のバージョンに合わせて修正いたしました。
内容は基本変更してないです。参考資料を紹介で済ましているデバックの部分や、プロセッシングの補足を充実させたいところなのですが、またの機会に気が向いたら。

GNOSIS Cartographer(まだまだα版)を使ってみたよ

GNOSIS

対応していただきありがとうございました

ecere.ca

GNOSISを試してみたいと思い、FOSS4G Seoulの後から開発者のJeromeさんと連絡を取ってみました。私のラップトップPCが貧弱なためインストールできず、ご迷惑をかけております。試してみたいというだけの問い合わせに、二か月くらいかかって対応していただくという手間を取らせてしまい、本当に申し訳ありませんでした。Jeromeさんとってもいい人です。

まだまだ開発中ということでα版ではありますが、GNOSIS Cartographerを動かしてみます。

まずはサンプルデータを表示

サンプルデータとして"12 Globe Gores by Giovanni Maria Cassini, Published in Rome, 1790"をいただいたので表示してみます。
Globo terrestre / Cassini, Giovanni Maria / 1790

つづいて同じくサンプルとしていただいた、SRTMを表示してみます。
DEMとして扱って陰影・段彩を設定できます。

基盤地図情報を表示

shapefile,GeoTIFFはそのまま読み込めるということなので、基盤地図情報から札幌市周辺をダウンロードして表示してみました。5mDEM(容量約200MBくらい)と基盤地図情報から水域・水涯線・海岸線・軌道の中心線・道路構成線・道路縁を入れています。


引き続き

まずは触ってみたところまででした。
タイル地図読み込めるのかとか、地理院地図標高タイル読み込める、とかとか聞いてみようかな。
SDK使うと何できるかも知りたいかな。

いつか役に立つかもしれないQGIS Tips-起動option編

QGIS

FOSS4G Advent Calendar 2015

一年経つのが本当に早いですね。今年は色々言いたいことがあるのですが、あとでこっそり聞いて下さい。それは置いておいて、FOSS4G Advent Calendar開始です。ここ数年のお決まり、一番手で登場いたします。
例年、強制的に招集していますが、今年は珍しく行っていません。それにも関わらず25名埋まってのスタートです。FOSS4G使ってる方増えたのかな?
http://qiita.com/advent-calendar/2015/foss4gqiita.com

2会場目も用意しておきましたので、みなさま好きなだけTipsをはき出してください。まだまだ参加募集中です。
http://qiita.com/advent-calendar/2015/foss4gvol2qiita.com

役に立たないからね

Advent Calendarの開幕らしくハードルの低い記事から始めたいと思います。
みなさんQGISを使っていると思いますが、QGISを起動する際にオプションを付けられることを知っていますか?
オプションをうまく使うことでメニューの表示非表示を切り替えるとか、設定ファイルの場所を切り替えるとか、とーっても役に立つ使い方ができます。でもこの記事ではそんなこと教えません、あえてまず使わないだろうという知識をみなさまに伝授したいと思います。

QGIS起動オプション

WindowsにOSGeo4WでQGISを入れているとします。
OSGeo4Wのshellを起動して、\OSGeo4W\binに移動しましょう(64bitの場合は、\OSGeo4W64\bin)。

そしておもむろにqgis.batと入れて、qgisが起動することを確認しましょう。

で、本来であれば、

qgis.bat --help

と"--help"つけることで、オプションが表示されてほしいところです。でも表示してくれませんので諦めましょう。下記のようなオプションがあると思ってください。

[--snapshot filename] emit snapshot of loaded datasets to given file
[--width width] width of snapshot to emit
[--height height] height of snapshot to emit
[--lang language] use language for interface text
[--project projectfile] load the given QGIS project
[--extent xmin,ymin,xmax,ymax] set initial map extent
[--nologo] hide splash screen
[--noplugins] don't restore plugins on startup
[--nocustomization] don't apply GUI customization
[--customizationfile] use the given ini file as GUI customization

スナップショットしてみよう

QGISのプロジェクトファイルを用意しておきます。いくつかのファイルを読み込み済みで、スタイルの設定もしているものとします。
f:id:waigani:20151126220600p:plain

"--snapshot"オプションを使うと、この状態を画像ファイルに書き出せます。例えばプロジェクトファイル名が、asahikawa.qgsとして、500x500ピクセルの画像を書き出してみましょう。"--nologo"オプションはsplash screenを表示しない指定になります。

qgis.bat --nologo --snapshot asahikawa.png --width 500 height 500 asahikawa.qgs

一瞬、みなさまの見慣れたQGISが表示されるかもしれませんが、すぐに消えて画像が書き出されます。

また、表示範囲を"--extent"オプションで変更することもできます。

qgis.bat --nologo --snapshot asahikawa.png --width 500 height 500 --extent 142.237,43.778,142.247,43.788 asahikawa.qgs

オプションの一例としてまずは使わないと思いますので、覚えておく必要はありません。
使っている方がいるとすると、かなりの変態的なシステムを作っていると思われますので、ぜひお友達になりたいです。

本題:splash screenを変更してみよう

懐かしのFOSS4G Hokkaido 2012の懇親会ライトニングトークで、splash screenを変更しようというネタをやったことがあります。QGIS 1.8だとインストールしたディレクトリにsplash screenの画像が入っているので、それを入れ替えることができました。しかし、その後のバージョンでは実行ファイル内にsplash screenが組み込まれてしまったため、この方法は使うことができません。

さてここで、"--customizationfile"オプションに注目。本来はメニューの表示/非表示に使えるのですが、役に立つ使い方はこの記事の趣旨ではありませんので触れません。
やるべきことは2つ。ディレクトリ名、iniファイル名は適当に置き換えてください。ただし、splash.pngという名称は固定です。

  • splash screenに使う画像をsplash.pngとして、C:/work/qgiscustom/におきます。
  • custom.iniというファイルをC:/work/qgiscustom/に作ります。中身はsplash.pngを置いたディレクトリを指定します。
[Customization]
splashpath=C:/work/qgiscustom/

そして、"--customizationfile"オプションにcustom.iniを指定してあげると、

qgis.bat --customizationfile C:/work/qgiscustom/custom.ini

なんと、splash screenをsplash.pngに置き換えることができます!試してみてね。

注意

今後のバージョンでもできるのかわかりませんので、自己責任でね。

CartoDB Torqueを使ってみよう

CartoDB

オープンでよかった

FOSS4G Seoulでleafletの開発者 Vladimir Agafonkinさんがいらっしゃったので、ちょこっとleafletの質問をしてみました。詳細はナイショなんですが、その中で「CartoDBのtarqueを使うのがいい」とのアドバイスも頂きました。Vladimir AgafonkinさんMapboxの人なのですが。FOSS4GはMapboxの人からCartoDBを教えてもらえる、とっても優しくオープンな世界です。
折角教えてもらったし使ったことなかったので、CartoDBで地図作ってみました。

CartoDB Torque

位置情報を持ったデータをCartoDBに入れることで簡単に可視化できます。特に日時の情報を含むポイントデータであれば、torqueを使うことでアニメーション表示することができます。データさえ用意してしまえば簡単なので試してみましょう。

データの準備

日付を含むオープンデータが何かないかなと探していたところ、
 大阪市の犯罪発生情報
があったのでこれを使います。
平成25年~平成27年の"ひったくり"データをダウンロードしてきましょう。
ダウンロードしてきたままだと、下記のようなフォーマットです。

市区町村,町名,丁番,罪名,既遂未遂別,手口,ひったくり区分,年,月,日,時間,被害者の性別,被害者の年齢
大阪市北区,曾根崎,2丁目付近,窃盗,既遂,ひったくり,自動二輪,2013年,2月,24日,2時頃,女性,30代
大阪市北区,中崎,3丁目付近,窃盗,既遂,ひったくり,自動二輪,2013年,3月,6日,1時頃,女性,30代
大阪市北区,中崎,2丁目付近,窃盗,既遂,ひったくり,自動二輪,2013年,4月,19日,20時頃,女性,30代

3年分のデータを1ファイルにして、必要な情報のみ抜き出しました。
住所は1カラムにまとめています。また、年月日についても1カラムにまとめました。

大阪市北区曾根崎2丁目,自動二輪,2013/2/24
大阪市北区中崎3丁目,自動二輪,2013/3/6
大阪市北区中崎2丁目,自動二輪,2013/4/19

この状態では地図上にマッピングできませんので、住所から経緯度への変換が必要になります。変換には、東京大学空間情報科学研究センターが提供するCSVアドレスマッチングサービスを使用しました。
アドレスマッチングの結果、経度、緯度、マッチングレベルが追記されたファイルが作成されます。詳細なマッチングが必要な場合は、マッチングレベルを確認して情報を使用するか/しないか、住所情報の見直しが必要になりますが、ここではこだわらないことにします。

大阪市北区曾根崎2丁目,自動二輪,2013/2/24,大阪府/大阪市/北区/曽根崎/二丁目,135.50031,34.70002,5,6
大阪市北区中崎3丁目,自動二輪,2013/3/6,大阪府/大阪市/北区/中崎/三丁目,135.50510,34.70839,5,6
大阪市北区中崎2丁目,自動二輪,2013/4/19,大阪府/大阪市/北区/中崎/二丁目,135.50586,34.70853,5,6

CartoDBへのDataset作成

ユーザ作成工程は省略します。
Datasetsの画面から、"NEW DATASET"を選択します。
f:id:waigani:20150923211040p:plain

読み込むデータはDrag&Dropでブラウザに持ってきて指定できます。データを指定をしたら"CONNECT DATASET"を選択します。
f:id:waigani:20150923211733p:plain

読み込みが終わるとDATASET VIEWになり、データ内容が表示されます。
データセット名、フィールド名はダブルクリックすることで編集することができます。必要に応じてわかりやすい名称に変更しておきましょう。

  • field2がひったくりの区分
  • field5が経度
  • field6が緯度
  • field3が日付

であることを確認しておきます。特にfiled3はカラムのタイプが"date"になっていることを確認しておきましょう。"date"もしくは"number"のカラムを使ってしか、アニメーション表示はできません。
"date"になっていない場合は、新しいカラムを"date"で作成、SQLを使用してデータをdateに変換したうえでコピー、といった手順が必要になります。

さてdatasetを作成した際に一番重要になるのが、geometryのカラムです。ここを使って地図上へプロットを行います。今回のデータだと、読み込みが終わった段階ですべてnullになっています。オレンジの"GEO"ボタンからgeometryを設定します。
f:id:waigani:20150923212907p:plain

Longitude, Latitudeのカラムを指定したうえで、"CONTINUE"を選択します。
f:id:waigani:20150923213847p:plain
これでgeometryも設定された状態になります。

"MAPVIEW"に移動しましょう。
読み込んだデータがプロットされているのが確認できます。
f:id:waigani:20150923214227p:plain

wizardsを使う

プロットはされていますが、すべてのデータが同じ色で表示されている状態です。表現については、cartcssを自分で書いて細かく指定していくことも可能ですが、まずはwizardsを使用してみましょう。

CATEGORY

例えばcategoryを使用すると、簡単に凡例わけすることができます。
field2のひったくり区分を使用して凡例わけした例です。
f:id:waigani:20150923214800p:plain

TORQUE

アニメーション表示してみましょう。torqueを選んで、Time Columnを指定してあげるだけで、日時のスライダーが追加されます。TORQUE CATの方を使うと、凡例わけした状態にもできます。
f:id:waigani:20150923215810p:plain

HEATMAP

heatmapをアニメーション表示することもできます。HEATMAPを選んでおいて、animatedをONします。Time Columnを指定してあげましょう。
f:id:waigani:20150923220552p:plain

publish

表現を付け終わったら右上の"PUBLISH"を選択して公開用のURLや、埋め込み用のhtmlを作成することができます。
f:id:waigani:20150923221927p:plain

ここまで

ちょっと触ってみただけですが簡単にデータの可視化ができますね。
またCartoDBのすごいところはデータを見て表現をおすすめしてくるところです。いろいろなデータを上げて試してみましょう。