SIS活用講座 第16回 SIS 8.0ならできる便利機能 Part2 Pythonの利用例紹介

はじめに

今回は、Pythonを使用した簡単なカスタマイズ例をご紹介します。以前の講座(第3回)でもPythonを使用したカスタマイズ例を簡単にご紹介しましたが、今回はもう少し掘り下げてご紹介します。

Pythonとは?

Pythonはプログラミング言語で、テキストエディタでもプログラムを作成することができ、他のプログラミング言語と比較して、文法がシンプルでわかりやすいと言われています。プログラミング言語と聞くと、それだけで難しそうだと感じる方も多いと思いますが、SIS Mapシリーズの基本機能でできないことを、少しコードを記述するだけで実行できる場合があり便利な機能です。

Pythonカスタマイズプログラムの実行方法

今回は、「Python in SIS」という、SIS内部に組み込まれたPythonの機能を使用するカスタマイズ手法をご紹介します。以下の2通りの方法があります。

1. プログラムコントロールバーに直接コードを入力する *1
2.「*.py」形式のスクリプトファイルを読み込み、定義された関数を実行する *1

いずれの場合も、「表示」タブの「表示/プログラム」をチェックして(図1)、プログラムコントロールバーを表示します。(図2)そして、プログラムコントロールバーにコードを記述します。(図2の赤い四角部分) *2
20180125_1

図1:「表示」タブの設定

20180125_2

図2:「プログラム」コントロールバー

*1 SIS 8.0 プログラミングマニュアル P.36参照
*2 SIS 8.0 プログラミングマニュアル P.35参照

では、Pythonを使用したサンプルで、実際の動作を見てみましょう。

選択アイテムの頂点座標を取得する

「1.」の方法で、選択した1つのアイテムの頂点座標を取得して、プログラムコントロールバーに表示します。

サンプル
コード
20180125_3
説明OpenSelで最初の選択アイテムをカレントにします。
GetNumGeomで取得したジオメトリコンポーネントの数分ループして、GetGeomNumPtで取得した頂点数分GetGeomPtで頂点座標を取得します。
コードを「;」で区切ることで、1行で記述することができます。
実行方法アイテムを1つ選択します。
プログラムコントロールバーにコードを入力し、「Enter」キーを押して実行します。
実行結果20180125_4

すべてのオーバーレイのブラシの透過度を「0」にする

デフォルトのブラシには透過度が設定されています。その設定を1つ1つコマンドで透過度「0」( 不透過)に変更するのは面倒です。「2.」の方法で、SISサポートページで公開されているプログラム「OverlayBrushAlpha.py」を使用すれば、すべてのオーバーレイのブラシの透過度を簡単に「0」に変更することができます。

サンプル
コード
20180125_5
説明オーバーレイのブラシ「_brush$」プロパティの値を取得します。
RGBAのAの値を「0」(不透過)に変更して、オーバーレイのブラシプロパティに設定します。
実行方法
  1. 「OverlayBrushAlpha.py」のあるフォルダを「PYTHONPATH* フォルダ」に設定して、SISを再起動します。*3
  2. プログラムコントロールバーのコマンドラインツールに以下を入力し、「Enter」キーを押します。
    import OverlayBrushAlpha
  3. 次に以下を入力し、「Enter」キーを押します。
    OverlayBrushAlpha.Alpha0()
実行結果20180125_6

ラインアイテムを複数のポリゴンアイテムで切断する

行政界と重なる道路中心線のラインアイテムを行政界のポリゴンアイテムで切断して抽出する作業には、「外側削除」コマンドを使用しますが、抽出するアイテムを選択しながら何度も操作しなければなりません。ここでも「2.」の方法で、SISサポートページで公開されているプログラム「SplitLinebyPolygon.py」を使用すれば、ラインアイテムとポリゴンアイテムのあるオーバーレイを指定して、一括で抽出することができます。

サンプル
コード
20180125_7
説明ポリゴンアイテムにジオメトリが交差するラインアイテムを抽出して、「編集」タブの「ジオメトリ/ 外側削除」コマンドと同等の処理を、ポリゴンアイテム数分繰り返します。
実行方法例えば、以下のように「Line」オーバーレイにラインアイテムが、「Polygon」オーバーレイにポリゴンアイテムがあるとします。20180125_8この場合、SplitLine(polygon_overlay_pos,line_overlay_pos)で指定する「polygon_overlay_pos」は「1」、「line_overlay_pos」は「0」になります。

  1. 「SplitLinebyPolygon.py」のあるフォルダを「PYTHONPATH* フォルダ」に設定して、SISを再起動します。*3
  2. プログラムコントロールバーのコマンドラインツールに以下を入力し、「Enter」キーを押します。
    import SplitLinebyPolygon
  3. 次に以下を入力し、「Enter」キーを押します。
    SplitLinebyPolygon.SplitLine(1,0)
実行結果20180125_9

*3 SIS 8.0 プログラミングマニュアル P.37 参照

おわりに

いかがでしたでしょうか?今回ご紹介したサンプルも含め、Pythonのサンプルプログラム集を、SISサポートページのFAQ で公開しています。SISサポートページにログインしていただき、FAQ のID「1075」をご覧ください。

FAQで公開しているサンプルプログラムは、今後も追加していく予定です。ぜひ、業務にご活用ください。

<地図データ出典>国土地理院 基盤地図情報

※この記事は、GIS NEXT第62号に掲載された記事を編集したものです。