[PLATEAU] ある建物データファイルから建物IDで指定した建物(1以上)の要素を削除するには?

174 views
Skip to first unread message

Takashi Iijima

unread,
Feb 10, 2022, 6:12:05 AM2/10/22
to FMEユーザーフォーラム
いろいろと方法は考えられますが、削除する建物数がそれほど多くない場合は、ファイルごとに削除したい建物の「建物ID」リストを作成し、XMLXQueryUpdaterで次のXQuery式を実行するのが最も簡潔かも知れません。

XMLXQueryUpdaterに入力するフィーチャーが、建物IDを格納した _list{}.building_id リスト属性を持っているものとします。

declare namespace core="http://www.opengis.net/citygml/2.0";
declare namespace bldg="http://www.opengis.net/citygml/building/2.0";
declare namespace gen="http://www.opengis.net/citygml/generics/2.0";
let $ids := fme:get-list-attribute('_list{}.building_id')
return
delete nodes //core:cityObjectMember[bldg:Building[data(descendant::gen:stringAttribute[@name="建物ID"]/gen:value) = $ids]]

ただし、対象とする建物にテクスチャが設定されている場合は、テクスチャ画像を参照するためのXML要素までは削除されずに残ります。
それらが残っていても実害はないと思いますが、それらも含めてクリーンにしたいならば、もう少し複雑なワークスペースになりそうです。

Takashi Iijima

unread,
Feb 15, 2022, 2:38:53 AM2/15/22
to FMEユーザーフォーラム
削除対象とする建物のファイル名(*.gml)とgml_id(bldg:Building/@gml:id)のリスト(csv)に基づいて、bldgフォルダー内の各ファイルから当該建物の要素、テクスチャ関連要素を削除して別フォルダーに出力(削除対象建物がないファイルはそのままコピー)するとともに、削除すべきテクスチャ画像ファイルがあった場合はそのURIのリスト(csv)を出力するワークスペース例を作りましたので、共有します。

添付ファイルを解凍すると、ワークスペース例(fmw)と削除対象建物リストのサンプル(csv)が展開されます。
詳細については、ワークスペースをFME Workbenchで開いてご参照ください。
FME2021.2.2で作成しました。

削除対象建物のリストさえ作れば、このワークスペースによってそれらの建物を削除したbldgデータセットが作成できます。
ただし、削除した建物に関連するテクスチャ画像ファイルの削除まではしません。
削除すべきテクスチャ画像ファイルがあった場合は、それらのURIのリストが作成されますので、それらの画像ファイルの削除は、そのリストに基づいて別途行ってください。

ワークスペース例はそのまま、あるいは改良して自由にご利用いただいて結構です。
ただし、動作保証はしませんので、利用する場合は十分な動作確認を行い、利用者の責任において利用してください。

2022年2月10日木曜日 20:12:05 UTC+9 Takashi Iijima:
remove-buildings-with-xquery-example.zip
Reply all
Reply to author
Forward
0 new messages