GIS奮闘記

現役GISエンジニアの技術紹介ブログ。主にPythonを使用。

ArcPyを使用してラインの頂点数を取得する

さて、本日はArcPyを使用してラインの頂点数を取得してみようと思います。頂点数が多いとパフォーマンスにも影響が出てしまうため、余分な頂点数がありそうなラインを抽出するのに役立つかと思います。

実行環境

事前準備

  1. 「Line」フィーチャクラスを作成します。「頂点数」格納用のカラムも用意します。
  2. 「Line」フィーチャクラスにラインを作図します。

f:id:sanvarie:20160302133304p:plain

f:id:sanvarie:20160302142157p:plain

サンプルコード

ラインの頂点数を取得して属性テーブルに格納するサンプルです。

# -*- coding: utf-8 -*-
import arcpy

#対象のGDB
arcpy.env.workspace = "C:\ArcPySample.gdb"

#対象のフィーチャクラス
infc = "Line"

dictTop = {}
cnt = 0

#ラインフィーチャの頂点数を検索
for row in arcpy.da.SearchCursor(infc, ("OID@","SHAPE@")):
    for part in row[1]:
        for pnt in part:
            if pnt:
                cnt += 1
            else:
                print("error")
                continue
        #ディクショナリにOIDと頂点数を格納
        dictTop[row[0]] = cnt
        cnt = 0
del row

#各フィーチャの頂点数を更新
for i in dictTop:
    cursor = arcpy.da.UpdateCursor(infc, ("OID@","Top"))
    for row in cursor:
        if i == row[0]:
            row[1] = dictTop[i]
            cursor.updateRow(row)
del row

こんな感じになれば成功です。今回は属性に頂点数を格納しましたが、CSV出力したりしてもいいかもしれませんね。
f:id:sanvarie:20160302142614p:plain

簡単ではありますが、本日は以上です。