Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
ArcGISの便利な印刷周りの機能に、QGIS APIを駆使して挑んでみたお話     北海道地図株式会社       朝日 孝輔       長船 翔太
disってるわけではありません       2
QGISのAPIとかいじってます●   趣味です●   会社黙認    シーッ! d( ゚ε゚;)                    3
QGISに詳しいの?●   編集ツールとして使ってます●   GRASS?何それおいしいの?●   幾何演算とかするなら他のツール使っちゃってるかも●   APIいじってるけど、仕事でAPI使ったことは実は無いの                 4
そうは言っても業務で使ってるよ●   紙地図をスキャンしてのジオリファレンス                5
そうは言っても業務で使ってるよ●   ベクトルデータの編集●   小規模なものから大規模まで●   例えば    ● 数百万ポリゴン        PostgreSQL/PostGISで管理   各種地図                    ...
会社では他のGISも使われてます       7
会社では他のGISも使われてます       8
ある日 ArcGIS10 チョー便利 帳票印刷簡単に 作れますよ QGISで 出来ないでしょうw 9
ある日お、disってんのか??よろしいならば戦争検証だ               10
お題11
お題 広域図         学校校区エリアを         包含する地図    学校校区エリア分     自動で作るべし 属性表示             凡例              スケール・ページ数・作成者タイトルなど       ...
お題 使用するデータ●背景地図(弊社GISMAPシリーズ)●国土数値情報ダウンロードサービス ・小学校区データ ・公共施設データ●数値地図5mメッシュ DEM             13
ArcGIS10 便利なレイアウト機能●   ArcGIS10より標準搭載された「データドリブン」機能を活かす                               ArcGISブログ~図郭ごとにマップを出力する方法           ...
ArcGIS 作業の流れ1●   マップデータの構築                  2hぐらい    →データレイヤの追加、色スタイル設定、ラベル発生、フィルタ処     理…etc      データ読込初期状態        作り込み後の...
ArcGIS 作業の流れ2                               2hぐらい●   帳票のレイアウトの構築    →タイトル、凡例、広域図、属性情報、方位、ページ数…etc      既存のテンプレート          ...
ArcGIS 作業の流れ3●   校区ポリゴン毎にドリブン化設定             0.5hぐらい       校区1          校区2         校区3                    17
ArcGIS 作業の流れ4                                                GUI操作上で0.5hぐらい●   PDF連続出力              GUIでも出力可能だけど、ArcPy(Pyt...
ArcGIS 作業完了●   作業時間トータル6h●   マップデータの表示設定と帳票レイアウトの作り込みには多少のコ    ツがいるが、基本的にはプログラム不要の”えいやー”感覚で作れる。                   19
QGIS●   プリントコンポーザーという機能がある●   各種部品をGUIで配置出来る●   特定箇所を特定    レイアウトで出せる●   連続で出力するような    機能はない                20
QGIS●   PythonコンソールからQGIS APIを使えるよ●   QGIS API(Python)使用方法    ● Pythonコンソールから    ●   Pythonでプラグインを作っちゃう    ●   カスタムアプリケーショ...
QGIS●   選択されているベクトルレイヤーの図形の属性(0)を表示     l = qgis.utils.iface.activeLayer()     provider = l.dataProvider()     feat = QgsF...
QGIS●   メニューバーを全部消してしまう     iface = qgis.utils.iface     childrenList = iface.mainWindow().children()     for item in chil...
QGIS●   今回使ったのは ”Script Runner” プラグイン●   マクロのイメージ●   “Add Script”    → “Run Script”●   プラグインを作るより    少しだけ気がラク             ...
QGIS作1っ日てでみ出ま来しるたと こ ま で      25
QGIS●   データ取り込み、表現設定は先に行っておく●   200行くらいのスクリプトです    ●   選択されているレイヤーの図形でループ        –   図形の外接矩形を取得            ●   周辺図用画面キャプチャ...
QGIS                                                                                抜粋です●   外接矩形に合わせて画面を移動     self.canvas...
QGIS                                                                              抜粋です●   文字描画     pen = QPen(Qt.black)   ...
QGIS vs ArcGIS●   注記、記号 orz                 29
QGIS vs ArcGIS●   広域図 orz                    30
QGIS vs ArcGIS●   スケール orz●   ラスタ凡例 orz                     31
ここまでの結論●   商用GISは気が効いてるよね●   でも、少し手間かければ似たようなことが出来るよ    #ということにしておこう●   もう1レベル上のクラスをきちんと使えれば・・・●   情報が少ないので、誰かが公開しててくれれば・・...
そこのあなた●   私もFOSS4G 2010 Tokyoで始めて触りました●   PyQGISの世界へようこそ    まだまだやってる人少ないです●   便利なプラグインを作ろう●   情報を公開しよう●   今年もFOSS4G 2012 T...
さらに●   QGISはC++で書かれています●   開発しちゃいなよ●   特に日本語周りはみなさん苦労してるので、    解決しちゃって    #でもgdal/ogrの問題かな                34
QGISの名前は        Developer        Meetingの場所   35
こんなのだってありえる     36
ご清聴ありがとうございました   37
Upcoming SlideShare
Loading in …5
×

ArcGISの便利な印刷周りの機能に、QGIS APIを駆使して挑んでみたお話

8,507 views

Published on

foss4g 2012 hokkaido
どちらが良いとか悪いとかの話ではなく、あくまでやってみたというお話です。
ラスタ凡例出来るよ、とか勉強不足で突っ込まれたところもありますが、内容的にはそのまま公開します。
公開にあたり1枚だけ外しているスライドがありますが、気にせずに。

  • Be the first to comment

ArcGISの便利な印刷周りの機能に、QGIS APIを駆使して挑んでみたお話

  1. 1. ArcGISの便利な印刷周りの機能に、QGIS APIを駆使して挑んでみたお話 北海道地図株式会社 朝日 孝輔 長船 翔太
  2. 2. disってるわけではありません 2
  3. 3. QGISのAPIとかいじってます● 趣味です● 会社黙認 シーッ! d( ゚ε゚;) 3
  4. 4. QGISに詳しいの?● 編集ツールとして使ってます● GRASS?何それおいしいの?● 幾何演算とかするなら他のツール使っちゃってるかも● APIいじってるけど、仕事でAPI使ったことは実は無いの 4
  5. 5. そうは言っても業務で使ってるよ● 紙地図をスキャンしてのジオリファレンス 5
  6. 6. そうは言っても業務で使ってるよ● ベクトルデータの編集● 小規模なものから大規模まで● 例えば ● 数百万ポリゴン PostgreSQL/PostGISで管理 各種地図 データ ● 複数人で編集 6
  7. 7. 会社では他のGISも使われてます 7
  8. 8. 会社では他のGISも使われてます 8
  9. 9. ある日 ArcGIS10 チョー便利 帳票印刷簡単に 作れますよ QGISで 出来ないでしょうw 9
  10. 10. ある日お、disってんのか??よろしいならば戦争検証だ 10
  11. 11. お題11
  12. 12. お題 広域図 学校校区エリアを 包含する地図 学校校区エリア分 自動で作るべし 属性表示 凡例 スケール・ページ数・作成者タイトルなど 12
  13. 13. お題 使用するデータ●背景地図(弊社GISMAPシリーズ)●国土数値情報ダウンロードサービス ・小学校区データ ・公共施設データ●数値地図5mメッシュ DEM 13
  14. 14. ArcGIS10 便利なレイアウト機能● ArcGIS10より標準搭載された「データドリブン」機能を活かす ArcGISブログ~図郭ごとにマップを出力する方法 http://blog.esrij.com/arcgisblog/2011/03/post-5653.html 14
  15. 15. ArcGIS 作業の流れ1● マップデータの構築 2hぐらい →データレイヤの追加、色スタイル設定、ラベル発生、フィルタ処  理…etc データ読込初期状態 作り込み後のマップイメージ 15
  16. 16. ArcGIS 作業の流れ2 2hぐらい● 帳票のレイアウトの構築 →タイトル、凡例、広域図、属性情報、方位、ページ数…etc 既存のテンプレート 作り込みテンプレート 16
  17. 17. ArcGIS 作業の流れ3● 校区ポリゴン毎にドリブン化設定 0.5hぐらい    校区1        校区2       校区3 17
  18. 18. ArcGIS 作業の流れ4 GUI操作上で0.5hぐらい● PDF連続出力           GUIでも出力可能だけど、ArcPy(Python)でスクリプト化 #mxdファイルの指定 mxd = arcpy.mapping.MapDocument(mxdFilePath) #ドリブンの更新 mxd.dataDrivenPages.refresh #ドリブンで構成したページのPDFを作成(複数PDF)1 for pageNum in range(1, mxd.dataDrivenPages.pageCount + 1): mxd.dataDrivenPages.currentPageID = pageNum print "Exp_pageNum: " + str(pageNum)  arcpy.mapping.ExportToPDF(mxd, cd + "pdfMap"+ str(pageNum) + ".pdf") 18
  19. 19. ArcGIS 作業完了● 作業時間トータル6h● マップデータの表示設定と帳票レイアウトの作り込みには多少のコ ツがいるが、基本的にはプログラム不要の”えいやー”感覚で作れる。 19
  20. 20. QGIS● プリントコンポーザーという機能がある● 各種部品をGUIで配置出来る● 特定箇所を特定 レイアウトで出せる● 連続で出力するような 機能はない 20
  21. 21. QGIS● PythonコンソールからQGIS APIを使えるよ● QGIS API(Python)使用方法 ● Pythonコンソールから ● Pythonでプラグインを作っちゃう ● カスタムアプリケーションにQGIS APIを埋め込む 21
  22. 22. QGIS● 選択されているベクトルレイヤーの図形の属性(0)を表示 l = qgis.utils.iface.activeLayer() provider = l.dataProvider() feat = QgsFeature() allAttrs = provider.attributeIndexes() provider.select(allAttrs) while provider.nextFeature(feat): att = feat.attributeMap() print att[0].toString() 22
  23. 23. QGIS● メニューバーを全部消してしまう iface = qgis.utils.iface childrenList = iface.mainWindow().children() for item in childrenList: if isinstance(item, PyQt4.QtGui.QToolBar): item.hide() 23
  24. 24. QGIS● 今回使ったのは ”Script Runner” プラグイン● マクロのイメージ● “Add Script” → “Run Script”● プラグインを作るより 少しだけ気がラク 24
  25. 25. QGIS作1っ日てでみ出ま来しるたと こ ま で 25
  26. 26. QGIS● データ取り込み、表現設定は先に行っておく● 200行くらいのスクリプトです ● 選択されているレイヤーの図形でループ – 図形の外接矩形を取得 ● 周辺図用画面キャプチャ ● 縮尺を変えて、広域図用画面キャプチャ – 図形の属性取得して描画 – その他整飾を描画 – PDF書き出し 26
  27. 27. QGIS 抜粋です● 外接矩形に合わせて画面を移動 self.canvas.setExtent(bound) self.canvas.zoomScale(self._adjustScale(self.canvas.scale())) self.canvas.refresh()● 枠を描画 pen = QPen(Qt.black) pen.setWidth(10) paint.setPen(pen) paint.drawRect(self._mm2dotX(11.0), self._mm2dotY(11.0), self._mm2dotX(270.0), self._mm2dotY(190.0)) paint.drawLine(self._mm2dotX(11.0), self._mm2dotY(188.0), self._mm2dotX(281.0), self._mm2dotY(188.0)) paint.drawLine(self._mm2dotX(230.0), self._mm2dotY(194.0), self._mm2dotX(281.0), self._mm2dotY(194.0)) paint.drawLine(self._mm2dotX(230.0), self._mm2dotY(188.0), self._mm2dotX(230.0), self._mm2dotY(201.0)) 27
  28. 28. QGIS 抜粋です● 文字描画 pen = QPen(Qt.black) pen.setWidth(8) paint.setPen(pen) paint.setFont(QFont("Arial", 20)) paint.drawText(self._mm2dotX(55.0), self._mm2dotY(198.0), ur千葉県東金市・九十 九里町 小学校別防災MAP)● 画像を描画 imgArrow = QImage(urC:OSGeo4Wappsqgisimagesnorth_arrowsdefault.png) paint.drawImage(self._mm2dotX(95.0), self._mm2dotY(80.0), imgArrow.scaled(self._mm2dotX(5.0), self._mm2dotY(5.0))) 28
  29. 29. QGIS vs ArcGIS● 注記、記号 orz 29
  30. 30. QGIS vs ArcGIS● 広域図 orz 30
  31. 31. QGIS vs ArcGIS● スケール orz● ラスタ凡例 orz 31
  32. 32. ここまでの結論● 商用GISは気が効いてるよね● でも、少し手間かければ似たようなことが出来るよ #ということにしておこう● もう1レベル上のクラスをきちんと使えれば・・・● 情報が少ないので、誰かが公開しててくれれば・・・ 32
  33. 33. そこのあなた● 私もFOSS4G 2010 Tokyoで始めて触りました● PyQGISの世界へようこそ まだまだやってる人少ないです● 便利なプラグインを作ろう● 情報を公開しよう● 今年もFOSS4G 2012 Tokyoではハンズオンあるかな? 33
  34. 34. さらに● QGISはC++で書かれています● 開発しちゃいなよ● 特に日本語周りはみなさん苦労してるので、 解決しちゃって #でもgdal/ogrの問題かな 34
  35. 35. QGISの名前は Developer Meetingの場所 35
  36. 36. こんなのだってありえる 36
  37. 37. ご清聴ありがとうございました 37

×