日本語文字をUnicodeのコード値に変換する方法

170 views
Skip to first unread message

TJ

unread,
Jul 18, 2018, 3:06:38 AM7/18/18
to fm...@googlegroups.com
FME 2018.0.1.1

数百万単位のポリゴン同士の空間検索を行う必要がある、試しに FME で処理してみましたが、フィーチャ単位で処理するため、とても時間がかかりました。試に QGIS で処理してみたところ、数分の1ぐらいの時間で処理できました。

数十回類似処理が必要のため、QGIS バッチで処理すると考えています。バッチ処理のパラメータを1つ1つ手動指定するのが間違いやすいし、時間がかかります。QGIS ではバッチ処理の設定ファイル(json形式)をエクスポート、インポートする機能があります。FME から json 形式の設定ファイルを生成し、設定をインポートすると考えました。

しかし、手動で設定した値をエクスポートし、エクスポートした json ファイルの中身をみると、日本語文字の部分が Unicode のコードに変換されています。FME で日本語文字をこのようなコード値に変換する方法がありますでしょうか。

QGIS バッチ設定画面


json 設定ファイル中身
[{"PARAMETERS": {"INPUT": "'H:/Input/\u30c6\u30b9\u30c8\u30d5\u30a9\u30eb\u30c0/pt.shp'"},...

Auto Generated Inline Image 1

Takashi Iijima

unread,
Jul 18, 2018, 3:18:15 AM7/18/18
to FMEユーザーフォーラム
TextEncoder かな。
Encoding Type: Unicode Code Point - Surrogate Pairs (\uXXXX or \uXXXX\uXXXX)

しかし、Unicode Code Point にエンコードしなくても、Text File ライターの Character Encoding を UTF-8 にして出力したものならば、日本語文字も正しく認識されるような気がします。

TJ

unread,
Jul 18, 2018, 3:34:31 AM7/18/18
to FMEユーザーフォーラム
ありがとうございます。TextEncoder は今回の目的にピッタリです。


>しかし、Unicode Code Point にエンコードしなくても、Text File ライターの Character Encoding を UTF-8 にして出力したものならば、日本語文字も正しく認識されるような気がします
実はこの方法は質問する前に試してみました。FME で日本語文字の UTF-8 の json ファイルを作成し、QGIS にインポートするところでエラーになりました。上記のコード値形式でないとだめのようです。

Takashi Iijima

unread,
Jul 18, 2018, 3:45:20 AM7/18/18
to FMEユーザーフォーラム
単に UTF-8 で出力しただけではダメでしたか。残念!
別法として、Python の json モジュールの dumps メソッドで Python 辞書をJSONドキュメントに変換すると、自動的に Unicode Code Point になるみたいです。

# PythonCaller Script Example
import json
class FeatureProcessor(object):
    def __init__(self):
        pass
        
    def input(self,feature):
        d = {
            'INPUT' : feature.getAttribute('input'),
        }
        feature.setAttribute('_result', json.dumps(d))
        self.pyoutput(feature)
        
    def close(self):
        pass

Takashi Iijima

unread,
Jul 18, 2018, 3:47:22 AM7/18/18
to FMEユーザーフォーラム
ところで、どのような空間検索でしょうか?
確かにFMEは他のソフトウェアよりパフォーマンスが悪いことがありますが、内容によっては改善の余地がある場合もあります。

TJ

unread,
Jul 18, 2018, 4:25:17 AM7/18/18
to fm...@googlegroups.com
json モジュール使う例のご提示ありがとうございます。
json モジュールを使ったことがないのですが、UTF-8 の json ファイルをインポートエラー時、エラーメッセージを見ますと、"Python36\lib\json\__init__.py" の処理でエラーになっていました。このファイルを開いて眺めたら、json.dumps が記載されているところもありました。もうしかして、QGIS 自体も json.dumps を使って設定ファイルを保存しているのかもしれません。

>ところで、どのような空間検索でしょうか?
今回の空間検索内容は A のアウトラインが横切る B を抽出するような空間検索でした。A、Bともポリゴンで、A の数は数万単位、B の数は数百万単位です。以下の方法で処理してみました。
1.GeometryCoercer で A をラインに変換
2.GeometryCoercer の Coerced ポートを SpatialFilter の Filter ポートに接続
3.B を SpatialFilter の Candidate ポートに接続
4.Filter Type:Filter First 、Spatial Predicates to Test:"Filter Crosses Candidate" に指定

SpatialFilter で結構時間かかりました。

Takashi Iijima

unread,
Jul 18, 2018, 5:04:57 AM7/18/18
to FMEユーザーフォーラム
FMEのワークスペースとしては、すでに最善のパフォーマンスが得られるワークフローになっており、改善の余地はなさそうです。
さらに速さが求められる場合は、QGISなど他のツールの利用を検討するのが妥当だと思います。
Reply all
Reply to author
Forward
0 new messages