「NTS」を利用して、ポリゴンの中心点を抽出すると3次元に設定される問題

「NTS」を利用して、ポリゴンの中心点を抽出し、shpに保存したところポイントの図形がPOINTではなくPOINTZ(3次元)に設定されていました。

1.原因分析1

ポリゴンから中心点の抽出は以下のプロパティを使っています。PointOnSurfaceは、図形上の
中心点を取得します。それでも取得できない場合は、Centroidを使用します。Centroidはポリゴンの形状により図形上にない場合があります。

2.原因分析2

これらのプロパティの処理をを追っていくと、図形生成クラス(GeometryFactory)でポイントを生成するメソッドCreatePoint()を読んでします。

3.原因分析3

さらに追っていくと、CoordinateArraySequenceクラスのコンストラクタで、dimensionが4に設定されていました。
dimensionは次元を意味し、デフォルトの場合は何故か4が設定されています。これが原因でした。

4.対策1

図形生成クラス(GeometryFactory)では、CreatePointを使用する場合は、Coordinateではなく、CoordinateArraySequenceを引数に使用します。CoordinateArraySequenceでは、dimensionの指定ができるので2次元を設定します。

5.対策2

もう一つの対策は、WKTを利用します。WKTの場合は、デフォルトの場合でも2次元に設定されます。
以下例

以下、対策後のデータ

Print Friendly, PDF & Email

シェアする

  • このエントリーをはてなブックマークに追加

フォローする