qgisで一気に地物を移動する
QGISで、選択したフィーチャを一気に指定量移動したかったが、そんな機能見当たらなかったのでpythonコンソールから以下スクリプトで一発。 10がX方向の移動量、20がY方向の移動量。
l = qgis.utils.iface.activeLayer() l.startEditing() for i in l.selectedFeaturesIds(): l.translateFeature(i, 10, 20) l.commitChanges()
FOSS4Gの為にプログラム勉強するならPythonだろJK
FOSS4G Advent Calendar 向けの記事ですよー。
えー、現在21:32。23:59を目標にがんばります(体温 37.5℃)
FOSS4Gを使うということ
ってどういうこと?
FOSS4Gはデータの取得/整備 から 解析 そしてビジュアライズまでをカバーできるツール群です。
それぞれのツールのUIはプログラミングやUnix等に精通してなくても操れるぐらい進歩してきています。
しかし、ツール間の連携が微妙だったり、バッチ処理できなかったり、MapServerって行っても実はCのCGIだったり(orz)、かゆいところに手が届かなかったりという事態は発生します。
でもね。ここでPythonを使えるようになると幸せになれるかもしれません。っていうPythonの啓蒙記事です。
FOSS4Gは位置情報を扱うライブラリ群という側面があります(こっちがメインか?)。それをうまくPythonから簡単に利用したいよね。っていう。
なーんでPythonなのよ?
好きだから。うそ。
まぁ。本当はこれが一番大きいですが、それではちょっと・・・
- 学習コストの低さ
言語仕様が小さいので比較的覚えやすいです。 チュートリアルなど 日本語ドキュメント も充実しています。
- コアなFOSS4Gで採用
Mapserver 、 GDAL/OGR 、 GEOS 、 QGIS 、 GRASS 、 GeoServer などなどコアなプロダクトでPythonのインターフェースが用意されています。 GRASSのバッチ処理をシェルスクリプトで書いたことがあるのですが(M○pionの等高線)、結局シェルスクリプトからPythonプログラム呼んだりなど複雑な処理はかなり面倒でした。
- マルチパラダイム
最近のプログラミング言語では関数型のプログラミング言語がもてはやされていますが、Pythonは関数型っぽくかけたり、Object指向でかけたり、手続き的にかけたりします。バッチ処理や簡単なデータ処理に使うのであればシェルスクリプトの用に手続き的に書けます。使う人のバックグラウンドや目的に応じて好みの書き方ができるのはとてもいいです。手続き的に書いてもPythonであればそこまで読むのに苦労するプログラムにはならないでしょう(ほんとか?)。
例えば何に使うのよ
実際に使ったところしかあまり語れないけど少し例を出します(体温 37.8℃)
Mapserver
地図作製には書かせないMapserverです。
MapFile書いてshp2img叩いたり、CGI使ったりしてやっていた地図生成や配信もPythonからできます。
Mapserverでは MapScript というJAVAやPHP、Python向けのインターフェースが用意されています。こいつを使えば、大規模な地図タイルをマルチスレッドで作成する仕組みや、MapScriptを使った地図配信サーバなどを構築可能です。
MapFileの読み込み、解析、編集もできるので、動的にデザインを偏向したり等夢は膨らむばかりです。
GDAL / OGR
位置情報の分野では「データが無いと始まらない」といっても過言ではないぐらいデータは大事です。
GDAL / OGRは多くのラスター / ベクターフォーマットに対応しており相互変換や空間的な解析など数多くの機能を備えています。 GDAL / OGRにはコマンドラインベースのユーティリティツールが含まれており、データの投影変換やフォーマット変換、情報取得、タイル生成などが手軽に行えます。
個人的にはPythonを覚えてみてGDAL / OGRのライブラリに比較的簡単にアクセスできるようになったことが、一番利益があったと思っています。
FOSS4Gを利用するには入力可能なファイルフォーマットに変換する必要があります。例えば基盤地図情報。XMLでGMLをサポートしたバージョンもありますが、なぜか文字コードがShift_JISだったりするので変換に苦労します。変換ツールもWindowsでしか動かなかったり…。
ここで、基盤地図情報の一部のデータをESRI Shapefileに変換する例をお示ししましょう。
...
...
...
すいません。今熱でダウンして間に合いませんでした。そのうちのせます。
QGIS
FOSS4GのデスクトップGISの代表格(偏向報道とかいわない)です。
QGISのプラグインはPythonで書けます。また、QGISのLibraryを使って独自UIでツールを作成することもできます(かなりハードル高いと思うけど…)
あ、書く事無い。勉強します。
Webサービスで
pythonを有名にしたのはgoogle app engineやweb Frameworkのdjangoだと思います。最近ではWebサービスで多く採用されていますよね。
pythonでもちろん地図サイトだって作れると思います。その上で空間DBがさくっと使えるとかなりうれしいです。 そんなのがあります。
GeoAlchemy です。SQLAlchemyというPythonのOR/マッパーの空間拡張です。こいつを使えばPostGISやSpatialite、MySQL、Oracle Spatialなどとお話しできます。
これと、Mapserverなど組み合わせれば地図サイトぐらい簡単につくれますよ!(言い過ぎ。)
まとめと2012年の豊富
え?もうまとめんの?技術的な内容全然なくね?とか思いますよね。ええ。HPが足りません。
PythonじゃなくてJavaやPHPからでも十分上に書いた事はできますが、Pythonを私はお勧めします。
そう好きだから。
個人的な2012年抱負
- プロダクト作成と発信
今後、書き溜めスクリプトとかデータ変換ツールをコードきれいにして発信するとか、自分サービス作るとかしたい。
OSGeo日本支部の運営員としての抱負
- Webページの運営がんばります
OSGeo日本支部のWebページをさらに皆様にわかりやすく見ていただけるようがんばりますよ。
- 関東のGeoな学生の発掘、FOSS4Gの啓蒙
FOSS4G Osakaで奈良大学の学生さんやFOSS4G Tokyoでの首都大学東京の学生さんの発表を見て、若い力は必要だと痛感しました。同時に、他のコミュニティに比べると学生の占める割合がかなり低いのも痛感しました。自分の母校や他の大学、特に自分の住んでいる関東の学生さんたちにどんどん参加してもらいたい!そのための活動をがんばります。(体温 38.0℃)
pythonをredhat el 6系(scientific, centos)
概要
64bitでもOK。
shared libraryも作るからdevパッケージと同じ環境だお。
install python
install
yum install make gcc autoconf readline-devel openssl-devel ncurses-devel lib-devel bzip2-devel sqlite-devel tcl-devel tk-devel LDFLAGS="-Wl,-rpath=/opt/lang/python/2.7.2/lib" ./configure --prefix=/opt/lang/python/2.7.2 --enable-shared make make install
after install
sudo vim /etc/ld.so.conf.d/python.conf /opt/lang/python2/libdev ldconfig -v
あとは適当に/opt/python/2.7.2/binにPATH通せばOK
mongo dbでatomicにデータ探して更新して結果を得たい
db.evalでやりゃいいやとかおもったけど、morphiaからevalたたく方法がわからんかった。
とりあえず、Datastore.findAndModifyを使えばいい事がわかったよ。アトミックだよと書いてあるので信用する。
scalaのコンストラクタの制約
補助コンストラクタは必ずそれ以前に定義されたコンストラクタを呼び出す必要がある。
呼び出しはコンストラクタの最初の文でなければならない。
mongo dbが正しく終了しなくて起動できないとき
pidファイルが残ったり、色々な理由で起動できなくなったときに復活の呪文を唱える。
mongod --repair
iPhone4sに傷ついてんじゃんよ!
買ったばかりのiPhone4s。家で開封の儀を執り行ったが、画面に傷を発見。
初期不良じゃんとショップに電話したが、対応を上に聞くのでといわれ待たされ中。
いらいら。
本日交換できた。
妻が受け取ったので、開封の儀は今夜に持ち越し。
交換は以外にも迅速だった。日曜に発注だから。
iPhone4s入荷しました!の連絡
まだー?
地元のさびれたSoftBankショップに行ったのはいいアイディアではなかったと言うことですね。
時間も夕方だったしさ。
いいよいいよ。3gsとの残り少ない時間を大切にするんだもん。
![(please configure the [header_logo] section in trac.ini)](/t/chrome/site/img/logo.png)
rss