6.4. Lesson: アクション

前のレッスンでは既定のアクションを見てきました。今度はあなた独自のアクションを定義します。アクションは地物をクリックしたときに起きるものです。それは地図に多くの特別な機能を追加できます。たとえば、オブジェクトに関する追加情報を取得することができます。アクションを割り当てることで地図に全く新しい次元を追加できます!

このレッスンの目標: カスタムアクションを追加する方法を学びます。

6.4.1. basic Follow Along: 画像を開く

以前作成した school_property レイヤーを使用します。コース資料にはあなたがデジタイズした3つの地所のそれぞれの写真が含まれます。私たちが次にやろうとしていることはそれぞれの地所とその画像を関連付けることです。それでは、地所をクリックした時にその画像を開くアクションを作成しましょう。

6.4.2. basic Follow Along: 画像のためのフィールドの追加

school_property レイヤーにはまだ画像と地所を関連付ける方法がありません。まずこの目的のためのフィールドを作成します。

  • レイヤーのプロパティ ダイアログを開きます。

  • フィールド タブをクリックします。

  • 編集モードに切り替えます:

../../../_images/toggle_editing_mode.png
  • 新しい列を追加します:

../../../_images/add_new_column.png
  • 下記の値を入力します:

../../../_images/column_settings.png
  • フィールドを作成した後、新しいフィールドの横にある 行編集 ボタンをクリックします。

  • そこで ファイル名 を設定します:

../../../_images/select_file_name.png
  • レイヤーのプロパティ ダイアログの OK をクリックします。

  • 地物情報表示 ツールを使用して school_property レイヤーの3つの地物のいずれかをクリックします。

編集モードのままなので、ダイアログがアクティブになり、このようになるはずです:

../../../_images/school_property_no_image.png
  • 参照ボタンをクリックします (image フィールドの横の ...)。

  • 画像のパスを選択します。画像は exercise_data/school_property_photos/ にあり、関連付けられるべき地物と同じ名前が付けられています。

  • OK をクリックします。

  • この方法ですべての画像と地物を正しく関連付けます。

  • 編集内容を保存し、編集モードを終了します。

6.4.3. basic Follow Along: アクションの作成

  • school_property レイヤーの アクション フォームを開きます。

  • アクションプロパティ パネルで 名称 フィールドに 画像表示 と入力します:

../../../_images/show_image_action.png

次に何をすべきかはオペレーティングシステムによって異なりますので、次で適切なコースを選択して下さい:

6.4.3.1. Windows

  • タイプ ドロップダウンリストをクリックし、 開く を選択します。

6.4.3.2. Ubuntu Linux

  • Gnome Image Viewer を使用する場合は Actioneog と入力します。 ImageMagick を使用する場合は display と入力します。コマンドの後に空白を1つ入れることを覚えておいて下さい!

6.4.3.3. MacOS

  • タイプ ドロップダウンリストをクリックし、 Mac を選択します。

  • アクションopen と入力します。コマンドの後に空白を1つ入れることを覚えておいて下さい!

6.4.3.4. コマンドの入力の続き

あなたは画像を開きたい。そしてQGISは画像の場所を知っている。あとは アクション に画像がどこにあるかを知らせるだけです。

  • リストから image を選択します:

../../../_images/select_image.png
  • フィールドを挿入 ボタンをクリックします。QGISは アクション フィールドに [% "image" %] の句を追加します。

  • アクションリストへの追加 ボタンをクリックします。

  • レイヤーのプロパティ ダイアログの OK をクリックします。

さて新しいアクションをテストしましょう:

  • Click on the school_property layer in the Layers list so that it is highlighted.

  • 地物アクションの実行 ボタンを見つけます (属性テーブルを開く ボタンと同じツールバーにあります):

    actionRun

  • このボタンの右にある下向き矢印をクリックします。これまでのところ、このレイヤーにはあなたが今定義した1つのアクションだけがあります。

  • ボタン自体をクリックしてツールをアクティブにします。

  • このツールを使用して、3つの地所のいずれかをクリックします。

  • その地所の画像が表示されます。

6.4.4. moderate Follow Along: インターネットを検索する

私たちは地図を見ていて農場がある地域についてもっと知りたくなったとしましょう。その地域について何も知らず、それについての一般的な情報を見つけたいとします。あなたが今コンピュータを使用しているならば、あなたの最初の衝動はおそらく地域の名前をGoogleで検索することでしょう。では、QGISにそれを自動的にさせてみましょう!

  • landuse レイヤーの属性テーブルを開きます。

name フィールドを使ってそれぞれの土地利用地域をGoogleで検索するようにします。

  • 属性テーブルを閉じます。

  • レイヤープロパティアクション に戻ります。

  • アクションプロパティ ‣ 名称 フィールドに Google検索 と入力します。

次に何をすべきかはオペレーティングシステムによって異なりますので、次で適切なコースを選択して下さい:

6.4.4.1. Windows

  • タイプ開く を選択します。これはWindowsにInternet Explorer等の既定のブラウザでインターネットアドレスを開かせます。

6.4.4.2. Ubuntu Linux

  • アクションxdg-open と入力します。これはUbuntuにChromeやFirefox等の既定のブラウザでインターネットアドレスを開かせます。

6.4.4.3. MacOS

  • アクションopen と入力します。これはMacOSにSafari等の既定のブラウザでインターネットアドレスを開かせます。

6.4.4.4. コマンドの入力の続き

上でどのコマンドを使った場合でも次に、開くべきインターネットアドレスを知らせなければいけません。Googleを訪問させて語句を自動的に検索させます。

Usually when you use Google, you enter your search phrase into the Google Search bar. But in this case, you want your computer to do this for you. The way you tell Google to search for something (if you don’t want to use its search bar directly) is by giving your Internet browser the address http://www.google.com/search?q=SEARCH_PHRASE, where SEARCH_PHRASE is what you want to search for. Since we don’t know what phrase to search for yet, we’ll just enter the first part (without the search phrase).

  • In the Action field, write http://www.google.com/search?q=. Remember to add a space after your initial command before writing this in!

QGISでクリックされた地物の name の値をブラウザで Google検索するようにしましょう。

  • 名称 フィールドを選択します。

  • フィールドを挿入 をクリックします:

../../../_images/google_search_action.png

これはQGISに次の句を追加させます:

../../../_images/google_search_entry.png

What this means is that QGIS is going to open the browser and send it to the address http://www.google.com/search?q=[% "name" %]. But [% "name" %] tells QGIS to use the contents of the name field as the phrase to search for.

So if, for example, the landuse area you click on is named Marloth Nature Reserve, then QGIS is going to send the browser to http://www.google.com/search?q=Marloth%20Nature%20Reserve, which will cause your browser to visit Google, which will in turn search for “Marloth Nature Reserve”.

  • もしまだ出来ていないなら、上で説明したように設定して下さい。

  • アクションリストへの追加 ボタンをクリックします。新しいアクションが上のリストに表示されます。

  • レイヤーのプロパティ ダイアログの OK をクリックします。

では新しいアクションをためします。

  • With the landuse layer active in the Layers list, click on the Run feature action button.
  • 地図上の任意の土地利用地域をクリックします。ブラウザが起動し、自動的に、地域の name の値として記録されている町の Google検索が開始されます。

ノート

アクションがうまく動作しない場合は、すべてが正しく入力されたことをチェックしてください。タイプミスはこの種の作業でよくあることです!

6.4.5. hard Follow Along: QGISで直接Webページを開く

これまで外部のブラウザでWebページを開く方法を見てきました。このアプローチには不可知な依存関係を追加するという点で若干の欠点があります。エンドユーザーが自分のシステムでアクションを実行するのに必要なソフトウェアを持っているでしょうか? これまで見てきたように、どのOSを使っているかわからなければ同じようなアクションのための同じような基本コマンドでさえあるとは限りません。OSのバージョンによってはブラウザを開く上記コマンドがまったく動作しないかもしれません。これは克服できない問題である可能性があります。

しかし、QGISは信じられないほど強力で汎用性の高いQt4ライブラリの上にあります。さらにQGISのアクションには任意でトークン化された(すなわち、フィールドの属性の内容にもとづいた変数情報を使用する)Pythonコマンドが使えます!

ではPythonアクションを使用してWebページを表示する方法を説明します。それは外部のブラウザでサイトを開くのと大体同じ考えですが、Qt4のQWebViewクラス(webkitベースのHTMLウィジェット)を使用してポップアップウィンドウにコンテンツを表示するのでユーザーのシステムにはブラウザは必要ありません。

今回はGoogleの代わりにWikipediaを使ってみましょう。そうするとリクエストのURLは次のようになります:

http://wikipedia.org/wiki/SEARCH_PHRASE

レイヤーアクションを作成するには:

  • レイヤープロパティ ダイアログを開いて アクション タブへ向かいます。

  • 次のアクションのプロパティを使って新しいアクションを設定します。

    • Type: Python
    • Name: Wikipedia
    • Action (all on one line): from PyQt4.QtCore import QUrl; from PyQt4.QtWebKit import QWebView;  myWV = QWebView(None); myWV.load(QUrl('http://wikipedia.org/wiki/[% "name" %]')); myWV.show()
../../../_images/python_action_example.png

ここでは:

  • すべてのPythonのコードはコマンドがセミコロンで区切られて1行になっています(通常Pythonのコマンドは改行で区切ります)。

  • [% "name" %] はアクションが呼び出される時に実際の属性値と置き換えられます(これまでのように)。

  • コードは単に新しい QWebView インスタンスを作成し、そのURLを設定し、ユーザーのデスクトップ上のウィンドウとして表示させる show() を呼び出します。

これはいくぶん不自然な例であることに注意してください。Pythonでは意味的に重要なインデントが使われますので、セミコロンで区切ることは記述の最良の方法ではありません。ですから現実の世界では、Pythonモジュールからロジックをインポートして、引数にフィールド属性をとる関数を呼び出す可能性が高いと思います。

同様にしてユーザーのシステムに特定のイメージビューアがあることを要求せずに画像を表示するアプローチを使用できるでしょう。

  • 今しがた作成したWikipediaアクションを使用してWikipediaのページを読み込む上記の方法を試して下さい。

6.4.6. In Conclusion

アクションを使えば地図に特別な機能を与えることができます。それはQGISで同じ地図を見るエンドユーザーに役立ちます。Pythonだけでなく任意のオペレーティングシステムのシェルコマンドも使用することができます。あなたが具体化できる機能に関して不可能はありません!

6.4.7. What’s Next?

あなたはあらゆる種類のベクターデータ作成を行いました。問題を解決するためにこのデータを分析する方法を学びます。それは次のモジュールのトピックです。