FAQ
ArcPy (ArcMap): ライン上に指定間隔でポイントを作成するツール

ナレッジ番号:2870 | 登録日:2023/05/29 | 更新日:2023/06/21

 

概要

この FAQ では、ポリラインに対して任意の間隔ごとにポイントを発生させるサンプル プログラムをご紹介します。

入力パラメータ

  • [入力レイヤ] : 入力ライン フィーチャクラス(またはライン フィーチャレイヤ)
  • [出力ファイル] : 出力するポイント データの出力先、出力名
  • [M 値を継承] : 元のフィーチャが M 値を保有している場合、選択可能になります。M 値の情報を発生するポイントへ継承できます。
  • [Z 値を継承] : 元のフィーチャが M 値を保有している場合、選択可能になります。Z 値の情報を発生するポイントへ継承できます。
  • [出力方法] : 対象のポリラインに対して始点からポイントを発生させるか、終点からポイントを発生させるかを選択します。
  • [指定間隔] : ポイントを発生させる間隔を入力します。

※間隔の単位は、ライン フィーチャクラスに定義されている座標系に依存します。

内容

[入力レイヤ] に設定したライン フィーチャクラス(またはライン フィーチャレイヤ)に対し、 [出力方法] に設定した端点(始点、または終点)から [指定間隔] でポイントを発生させます。ライン フィーチャクラスが持っている属性情報は、すべてポイント データに引き継がれます。なお、元のフィーチャが M 値 や Z 値を保有している場合は、[M 値を継承]、[Z 値を継承] が有効となり、チェックを入れることで出力するポイント データへ情報を継承することが可能です。

使用手順

  1. zip ファイルをダウンロードし、任意のフォルダに解凍します。
  2. ArcMap を起動し、データを追加します。
  3. [カタログ] ウィンドウで解凍により作成されたフォルダを展開します。
  4. フォルダ内の「AddPointIntervalFromLine」ツールボックスを展開し、[任意の間隔からポイント] ツールをダブルクリックします。
  5. パラメータを入力し、ツールを実行します。

ダウンロード

ライン データから指定間隔でポイント

※ ans5655.zip という名前の zip ファイルがダウンロードされます。

Python ソース コード

# coding:cp932
# Purpose : ライン データから指定間隔でポイントを発生させます。
# Author : ESRIジャパン


# ArcPy,os.path のインポート
import arcpy,os.path

# パラメータの設定
inLine = arcpy.GetParameterAsText(0)
outPoint = arcpy.GetParameterAsText(1)
blnhasM = arcpy.GetParameter(2)
blnhasZ = arcpy.GetParameter(3)
outputType = arcpy.GetParameterAsText(4)
interval = arcpy.GetParameter(5)
unit = arcpy.GetParameterAsText(6)

if blnhasM == True:
    hasM == "ENABLED"
else:
    hasM = ""

if blnhasZ == True:
    hasZ = "ENABLED"
else:
    hasZ = ""

# 入力データの情報を取得
desc = arcpy.Describe(inLine)
oidField = desc.OIDFieldName
ShapeField = desc.ShapeFieldName
sr = desc.spatialReference

arcpy.CreateFeatureclass_management(os.path.dirname(outPoint),os.path.basename(outPoint),"POINT","",hasM,hasZ,sr)

Fields = arcpy.ListFields(inLine)
NewFields = []

for Field in Fields:
    if Field.name == oidField or Field.name == ShapeField or Field.name.lower() == u"shape_length" or Field.name.lower() == u"shape_area":
        pass
    else:
        arcpy.AddField_management(outPoint,Field.name,Field.type,"","","",Field.aliasName)
        NewFields.append(Field.name)

NewFields.append("SHAPE@")

SearchCur = arcpy.da.SearchCursor(inLine,NewFields)
InsertCur = arcpy.da.InsertCursor(outPoint,NewFields)

# ラインからポイントを指定間隔で発生
for row in SearchCur:
    geom = row[-1]
    totalLength = geom.length
    addPointNum = int(totalLength/interval)
    i = 1
    if outputType == u"始点から":
        newRow = row[:-1] + (geom.firstPoint,)
        InsertCur.insertRow(newRow)
        while i < addPointNum + 1:
            newRow = row[:-1] + (geom.positionAlongLine(interval * i),)
            InsertCur.insertRow(newRow)
            i += 1
    else:
        newRow = row[:-1] + (geom.lastPoint,)
        InsertCur.insertRow(newRow)
        while i < addPointNum + 1:
            newRow = row[:-1] + (geom.positionAlongLine(totalLength - interval*i),)
            InsertCur.insertRow(newRow)
            i += 1

del SearchCur,InsertCur

こちらのサンプルはあくまでもコーディングの見本であり、ツール実行時に発生したエラーの対処方法につきましては、サポート対象外とさせていただきます。また、操作方法やソースコードに関するご質問は別途有償の開発者サポート契約にてご対応させていただきます。新規バージョンに対応したツールを継続的に提供することを保証するものでもないことも予めご承知おきください。なお、ツールを利用して生じたいかなる損害についても弊社では責任を負いかねます。

メタデータ

種類

製品

バージョン