ジオメトリの読み取り

フィーチャクラス内の各フィーチャには、ポリゴンまたはラインの頂点を定義するポイントのセットか、ポイント フィーチャを定義する単一の座標が含まれています。これらのポイントにアクセスするには、ジオメトリ オブジェクトを使用します。このオブジェクトは、ポイント オブジェクトの配列にこれらのポイントを格納して返します。

プロパティ

説明

総数

配列内のオブジェクトの数。

配列のプロパティ

方法

説明

add(value)

配列の最後の位置に、配列オブジェクトまたはポイントオブジェクトを追加します。

append(value)

配列の最後の位置に、オブジェクトを付加します。

clone(point_object)

ポイント オブジェクトのクローンを作成します。

extend(items)

要素を付加して配列を拡張します。

getObject(index)

配列から特定のオブジェクトを返します。

insert(index, value)

配列の特定の位置に、オブジェクトを追加します。

next()

配列内の次のオブジェクトを返します。

remove(index)

配列から特定のオブジェクトを削除します。

removeAll()

すべてのオブジェクトを削除し、空の配列を作成します。

replace(index, value)

インデックス位置にあるオブジェクトを置き換えます。

reset()

配列を最初のオブジェクトにリセットします。

注意注意:

リセットは、カーソル以外の配列のみに使用されます。カーソル配列に対してリセットを使用しても、最初のレコードにリセットされません。

配列のメソッド

ジオデータベースまたはシェープファイル内のフィーチャは、複数のパートから構成されている場合があります。ジオメトリ オブジェクトの partCount プロパティは、フィーチャ内のパートの数を返します。getPart メソッドは、インデックスが指定されている場合には、ジオメトリの特定のパートに対応するポイント オブジェクトの配列を返します。インデックスが指定されていない場合は、それぞれのジオメトリ パートに対応するポイント オブジェクトの配列を含む配列が返されます。

ポイント フィーチャの場合は、ポイント オブジェクトの配列の代わりに単一のポイント オブジェクトが返されます。その他すべてのフィーチャ タイプ、つまりポリゴン、ポリライン、およびマルチポイントの場合は、ポイント オブジェクトの配列が 1 つ返されるか、またはポイント オブジェクトの複数の配列を含む配列が返されます(フィーチャが複数のパートから構成される場合)。

プロパティ

説明

ID

ポイントのシェープ ID

X

ポイントの水平座標

ポイントの鉛直座標

Z

ポイントの標高値

M

ポイントのメジャー値

ポイントのプロパティ

ポリゴンに穴がある場合、ポリゴンはいくつかのリングで構成されます。ポリゴンに対して返されるポイント オブジェクトの配列には、外側のリングと内側のリングすべてに対応するポイントが格納されます。外側のリングは常に最初に返され、続いて内側のリングが返されます。リング間の区切りには NULL ポイント オブジェクトが使用されます。ジオデータベースまたはシェープファイル内のポリゴンの座標をスクリプトが読み取るときに、内側のリングの情報をスクリプトが必要としている場合は、内側のリングを処理するためのロジックがスクリプトに組み込まれている必要があります。そうでなければ、外側のリングのみが読み取られます。

マルチパート フィーチャは、複数の物理的なパートで構成されますが、データベース内の 1 つの属性セットのみを参照します。たとえば、州のレイヤでは、ハワイ州をマルチパート フィーチャと考えることができます。ハワイ州は多数の島で構成されますが、データベースには 1 つのフィーチャとして記録されます。

リングは、2 次元のエリアを定義する閉じたパスです。有効なリングは、有効なパスで構成されます。有効なパスとは、リングの始点と終点の x,y 座標が同じであるものです。時計回りのリングは外側のリング、反時計回りのリングは内側のリングを定義します。

ジオメトリの書き込みに関する詳細

次に示す例では、すべてのフィーチャの座標を出力します。

ポイント ジオメトリの読み取り

ポイント フィーチャクラスの検索カーソル

import arcpy

infc = arcpy.GetParameterAsText(0)

# Identify the geometry field
#
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName

# Create search cursor
#
rows = arcpy.SearchCursor(infc)

# Enter for loop for each feature/row
#
for row in rows:
    # Create the geometry object 'feat'
    #
    feat = row.getValue(shapefieldname)
    pnt = feat.getPart()

    # Print x,y coordinates of current point
    #
    print pnt.X, pnt.Y
ポイント ジオメトリ

前記のフィーチャクラスに対して、このスクリプトは次の情報を返します。

2.0 4.0
8.0 10.0
7.0 5.0

マルチポイント ジオメトリの読み取り

マルチポイント フィーチャクラスの検索カーソル

import arcpy

infc = arcpy.GetParameterAsText(0)

# Identify the geometry field
#
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName

# Create search cursor
#
rows = arcpy.SearchCursor(infc)

# Enter for loop for each feature/row
#
for row in rows:
    # Create the geometry object
    #
    feat = row.getValue(shapefieldname)

    # Print the current multipoint's ID
    #
    print "Feature %i:" % row.getValue(desc.OIDFieldName)

    # For each point in the multipoint feature,
    #  print the x,y coordinates
    for pnt in feat:
        print pnt.X, pnt.Y
マルチポイント ジオメトリ

前記のフィーチャクラスに対して、このスクリプトは次の情報を返します。

Feature 0:
3.0 8.0
4.0 4.0
6.0 6.0
Feature 1:
5.0 9.0
8.0 10.0
Feature 2:
9.0 5.0

ポリラインまたはポリゴン ジオメトリの読み取り

ポリゴンまたはライン フィーチャクラスの検索カーソル

import arcpy

infc = arcpy.GetParameterAsText(0)

# Identify the geometry field
#
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName

# Create search cursor
#
rows = arcpy.SearchCursor(infc)

# Enter for loop for each feature/row
#
for row in rows:
    # Create the geometry object
    #
    feat = row.getValue(shapefieldname)

    # Print the current multipoint's ID
    #
    print "Feature %i:" % row.getValue(desc.OIDFieldName)
    partnum = 0

    # Step through each part of the feature
    #
    for part in feat:
        # Print the part number
        #
        print "Part %i:" % partnum

        # Step through each vertex in the feature
        #
        for pnt in feat.getPart(partnum):
            if pnt:
                # Print x,y coordinates of current point
                #
                print pnt.X, pnt.Y
            else:
                # If pnt is None, this represents an interior ring
                #
                print "Interior Ring:"
        partnum += 1     
ポリゴン ジオメトリ

前記のフィーチャクラスに対して、このスクリプトは次の情報を返します。フィーチャ 0 は単一のパートからなるポリゴン、フィーチャ 1 は 2 つのパートからなるポリゴン、フィーチャ 2 は内側のリングを含む単一のパートからなるポリゴンです。

Feature 0:
Part 0:
3.0 8.0
1.0 8.0
2.0 10.0
3.0 8.0
Feature 1:
Part 0:
5.0 3.0
3.0 3.0
3.0 5.0
5.0 3.0
Part 1:
7.0 5.0
5.0 5.0
5.0 7.0
7.0 5.0
Feature 2:
Part 0:
9.0 11.0
9.0 8.0
6.0 8.0
6.0 11.0
9.0 11.0
Interior Ring:
7.0 10.0
7.0 9.0
8.0 9.0
8.0 10.0
7.0 10.0

関連項目


7/10/2012