サマリー
フィーチャの重心は複数の方法で計算できます。 重心を計算する必要がある状況に応じて、複数の方法 (フィーチャの中心の XY 座標を計算する、[フィーチャ → ポイント (Feature To Point)] ツールを使用する、または Python を使用して、重心を表す座標を取得する) を使用できます。 下記の手順では、これらの方法について説明します。
手順
- [フィーチャ → ポイント (Feature To Point)] (データ管理) ツールを使用する
この方法では、ポリゴンの重力中心、つまり、フィーチャの地理的中心を使用します。 ライン、ポリゴン、または 3 次元フィーチャの場合、重心は、質量の中心 (つまり重力中心) であり、フィーチャの内側にあることも、フィーチャの外側にあることもあります。 複数のパートで構成されるマルチポイント、ポリライン、ポリゴン フィーチャクラスの場合、重心は、すべてのフィーチャ パートの加重平均中心を使用して計算されます。
注意:
このツールは、Advanced Desktop または ArcInfo ライセンス レベルでのみ使用できます。
[フィーチャ → ポイント (Feature To Point)] ツールは、入力フィーチャを代表する位置から生成されたポイントを含む新しいフィーチャクラスを作成するために使用されます。 具体的な計算のアルゴリズムは独自開発されたものですが、2 つの基本的概念が使用されています。
このツールは、重力中心に基づくアルゴリズムを使用して、マルチポイント、ライン、またはポリゴン入力の重心を計算します。 重力中心の計算では、地理的中心モデルを使用して新規のポイント フィーチャクラスを出力します。 ライン、ポリゴン、3 次元フィーチャの場合、重心は、質量の中心 (重力中心) であり、フィーチャの内側にあることも、フィーチャの外側にあることもあります。 複数のパートで構成されるマルチポイント、ポリライン、ポリゴンの場合、重心は、すべてのフィーチャ パートの加重平均中心を使用して計算されます。
このツールのパラメーターには、フィーチャの境界内にある重心を計算するオプションが含まれています。このオプションは [内側] チェックボックスをオンにすることで有効化できます。 このパラメーターを有効化すると、ツールはフィーチャの境界内にある重心を計算するようになり、最初に重心が境界外にあった場合は、その重心ポイントが、境界内の重力中心であると見なされるようになるまで調整されます。
- Python を使用して、重心ポイントを計算および作成する
次のサンプル コードでは、SHAPE@XY トークンを使用して、重心を表す座標を簡単に取得できるようにデータ アクセス モジュールが使用されています。 次に、これらの座標が、ポイント ジオメトリの作成に使用された後、新しいフィーチャクラスに書き込まれます。
注意:
データ アクセス カーソルは、ArcGIS 10.1 以降でのみ利用できます。 バージョン 10 用の代わりのワークフローについては、「ジオメトリの読み取り」および「ジオメトリの作成」をご参照ください。
コード:
import arcpy
input_fc = "C:\\temp\\geodatabase.gdb\\states"
output_fc = "C:\\temp\\geodatabase.gdb\\state_centroids"
cursor = arcpy.da.SearchCursor(input_fc, "SHAPE@XY")
centroid_coords = []
for feature in cursor:
centroid_coords.append(feature[0])
point = arcpy.Point()
pointGeometryList = []
for pt in centroid_coords:
point.X = pt[0]
point.Y = pt[1]
pointGeometry = arcpy.PointGeometry(point)
pointGeometryList.append(pointGeometry)
arcpy.CopyFeatures_management(pointGeometryList, output_fc)