Pyhonを使ってポリゴンの特定頂点の削除方法

71 views
Skip to first unread message

TJ

unread,
Jun 26, 2018, 10:36:55 PM6/26/18
to FMEユーザーフォーラム
FME 2018.0.1.1

Python を使って、ポリゴンの特定インデックスの頂点を削除したいです。
以下のQ&Aに記載のコードを参考して試したところ、Polygon オブジェクトには  getAllCoordinates 属性がないというエラーになりました。最新の FME Python API を調べても、確かに FMEPolygon クラスには getAllCoordinates メソッドがないです。昔の FME Python API にこのメソッドがあったのでしょうか。

Remove specific vertex from feature


API を参考して、以下の方法で頂点を削除できましたが、少し遠回りしているような気もしますので、もしより簡単な方法があれば教えていただきたいです。

pts = pg.getBoundaryAsCurve().getPoints()
coords
= [pt.getXYZ() for pt in pts]
newCoords
= coords.pop(2)
newPg
= fmeobjects.FMEPolygon(newCoords)



Takashi Iijima

unread,
Jun 26, 2018, 10:46:02 PM6/26/18
to FMEユーザーフォーラム
そのQ&Aに掲載したスクリプト中の "polygon" は、fmeobjects.FMEFeature クラスのインスタンスを指します。
getAllCoordinates は、fmeobjects.FMEFeature クラスのメンバーです。
紛らわしい変数名ですみません。

VertexRemover (FME 2017 以前では CoordinateRemover) でも特定のインデクスの頂点を削除することができます。
ただし、ポリゴンの境界から頂点を削除するとジオメトリタイプがラインになるので、ポリゴンに戻す処理 (GeometryCoercer など) を追加する必要があります。

TJ

unread,
Jun 26, 2018, 11:04:05 PM6/26/18
to FMEユーザーフォーラム
ありがとうございます。

私も self.polygons.append(feature) のところを見逃していましたのですみませんでした。
この方法のほうが簡単ですね。

今回、一遍に複数の頂点を削除したいので、
Python で実現しようとしています。
VertexRemoverを使ったことがないので、ポリゴンの境界から頂点を削除するとジオメトリタイプがラインになるのは知りませんでした。今後使う場合気を付けます。

Takashi Iijima

unread,
Jun 26, 2018, 11:10:01 PM6/26/18
to FMEユーザーフォーラム
特定のインデクスの頂点から連続した複数個の頂点を削除するならば、VertexRemover が簡単です。
Number to Remove/Keep パラメーターでその個数が指定できます。
連続ではなく飛び飛びで削除するならば、スクリプトの方が簡単かも知れません。

TJ

unread,
Jun 26, 2018, 11:38:07 PM6/26/18
to FMEユーザーフォーラム
Number to Remove/Keep パラメーターの使用方法を教えていただいてありがとうございます。

今回不特定飛び飛びの頂点を削除するので、スクリプトの方が簡単そうです。
VertexRemover が複数のインデックス(カンマ区切り、リストなど)指定できたら便利だなと思いました。
Ideas で検索したら、まだこのような提案がないようですので、Ideas で提案してみます。
Reply all
Reply to author
Forward
0 new messages