FME Python API FMETile について

31 views
Skip to first unread message

TJ

unread,
May 29, 2018, 3:37:53 AM5/29/18
to FMEユーザーフォーラム
FME 2018.0.1.0

FME Python API と KnowLedge Center のサンプルを参照して Python でのラスタの扱い方を勉強しています。
API ドキュメントに各クラスの相互関係を表す図及びコードサンプルがないため、FMETile の位置付け、使い方はまだわかっていません。可能であれば、簡単な解説をしていただけますでしょうか。
Auto Generated Inline Image 1

Takashi Iijima

unread,
May 29, 2018, 4:25:03 AM5/29/18
to FMEユーザーフォーラム
Knowledge Center Q&A のこのスレッドをご覧になっていますか?
Python FME Objects API for Raster Manipulation

FMEのラスターデータにおけるタイルとは、2次元マトリクスの数値データを保持するためのデータ構造であり、バンドの Interpretation (解釈) 別の型(Real64, UInt8 など) が用意されている、と考えると分かり易いかも知れません。
FMETile のインスタンスが単独で使われることはなく、ラスターバンドの内容を定義するためのデータ構造です。

典型的には、バンドのセル値を設定したり抽出したりするために使われますが、そればかりでなく、Nodata値 (1 x 1行列)、パレット値 (エントリー数 x バンド数) などを定義するためにも使われています。
「タイル」というと、なんかラスターを分割したようなものをイメージしますが、その名称にはとらわれない方が良いと思います。
私も最初は随分と考え込みましたが、「データ構造」であると考えることで、すっきりしました。

Takashi Iijima

unread,
May 29, 2018, 4:36:29 AM5/29/18
to FMEユーザーフォーラム
Python FME API の Getting Started > Working with Rasters に載っているサンプルコードのうち、次のコードは間違っていますね。
----------
        # creating the new FMERaster
        rasterProperties = fmeobjects.FMERasterProperties(numRows, numCols,
                                                          xCellOrigin,
                                                          yCellOrigin, xSpacing,
                                                          ySpacing, xOrigin,
                                                          yOrigin, xRotation,
                                                          yRotation)
----------

(xCellOrigin, yCellOrigin) と (xSpacing, ySpacing) が逆です。次が正解。
----------
        # creating the new FMERaster
        rasterProperties = fmeobjects.FMERasterProperties(numRows, numCols,
                                                          xSpacing, ySpacing,
                                                          xCellOrigin, yCellOrigin,
                                                          xOrigin, yOrigin,
                                                          xRotation, yRotation)
----------

TJ

unread,
May 29, 2018, 5:08:58 AM5/29/18
to FMEユーザーフォーラム
>Knowledge Center Q&A のこのスレッドをご覧になっていますか?
はい、拝見させていただきました。

>「タイル」というと、なんかラスターを分割したようなものをイメージしますが、その名称にはとらわれない方が良いと思います。
私もその名前でラスターを分割したようなもののイメージをして、なかなか理解できなかった。ラスターのマトリクスを格納するための「データ構造」ですね、確かにこれだと分かりやすいです。そうすると、クラスの名前も FMERasterArray とかにすれば分かりやすいかもしれないですね。
また理解しない部分が多いですが、いろいろ試してみます。分からないことがあったらまた質問させてください。

TJ

unread,
May 31, 2018, 1:30:45 AM5/31/18
to FMEユーザーフォーラム
今Python FME API の Getting Started > Working with Rasters に載っているサンプルコードの引数は正しい順に直っていることを確認しました。


Takashi Iijima

unread,
May 31, 2018, 1:33:05 AM5/31/18
to FMEユーザーフォーラム
ご確認ありがとうございます。
はい。直してもらいました。

TJ

unread,
May 31, 2018, 1:45:24 AM5/31/18
to FMEユーザーフォーラム
FMEBandTilePopulator についての追加質問です。

① Knowledge Center Q&Aのサンプルの clone 定義の説明部分に、新しいバンドを作成するとき複数回呼び出されますと書いてありますが、複数回呼び出される理由はなんでしょうか?
  1. # It will be called multiple times while creating a new band.
  2. def clone(self):
setDeleteSourceOnDestroysetOutputSize はどういう使い道想定できますでしょうか?

Takashi Iijima

unread,
May 31, 2018, 2:23:11 AM5/31/18
to FMEユーザーフォーラム
> ① Knowledge Center Q&Aのサンプルの clone 定義の説明部分に、新しいバンドを作成するとき複数回呼び出されますと書いてありますが、複数回呼び出される理由はなんでしょうか?

テストしたとき複数回呼び出されることが確認できたので、調査結果として事実関係をメモしたものであり、理由は分かりません。
fmeobjects モジュールのソースは公開されていないので、調べることもできません。

> ② setDeleteSourceOnDestroy と setOutputSize はどういう使い道想定できますでしょうか?

これらのメソッドがいつ、どのように使われるのかは分かりません。
テストした際には、サンプルの方法でラスターを作成する場合にこれらが呼び出されることはなかったと記憶しています。
ドキュメントでは "This method must be implemented in the FMEBandTilePopulator subclass." を書かれていたのでサンプルに書きましたが、実際には実装する必要はないようです。
Getting Started > Working with Rasters のサンプルでは省略されているので、削除(無視)しても良いと思います。 

TJ

unread,
May 31, 2018, 3:45:23 AM5/31/18
to FMEユーザーフォーラム
ご返答ありがとうございます。①、②ともブラックボックスな訳ですね。

実際使用上、その辺の中身を知らなくても、 clone と getTile を実装した定型的な書き方を覚えれば特に支障がないと思いますので、それで使ってみたいと思います。もし質問内容に関する何か新な情報があったらまた教えてください。
Reply all
Reply to author
Forward
0 new messages