FAQ
ArcPy: ポイントからラインまでの距離が最短となるラインを作成する

ナレッジ番号:3293 | 登録日:2023/05/29 | 更新日:2024/01/09

概要

ポイント フィーチャから、ライン フィーチャまでの距離が最短となるラインを作成するためのサンプル コードです。

入力パラメーター

  • [入力ポイント]: ポイント レイヤー または ポイント データ。
  • [入力ライン]: ライン レイヤー または ライン データ。
  • [出力ライン フィーチャクラス]: ライン データの出力場所と名称。

ダウンロード

ans7530.zip(ArcGIS Pro 版)

ans7530_ArcMap.zip(ArcMap 版)

使用手順

  1. zip ファイルをダウンロードし、任意のフォルダーに解凍します。
  2. [カタログ] ウィンドウで解凍により作成されたフォルダーを展開します。
  3. フォルダー内の「ans7530.tbx」ツールボックスを展開し、[ポイントからラインまでの線] ツールをダブルクリックします。
  4. 表示されるダイアログでパラメーターを設定し、[実行] ボタンで処理を開始します。

注意事項

本ツールはサンプル プログラムであり、ツールの動作を保証するものではありません。ツールの操作方法やソースコード、実行時のエラーなどに関するお問い合わせは、サポート対象外となります。また、 新規バージョンに対応したツールを継続的に提供することを保証するものでもないこともあらかじめご了承ください。なお、ツールを利用して生じたいかなる損害についても弊社では責任を負いかねますことをご了承ください。 ArcPy サイト パッケージに関するプログラム固有のご質問につきましては開発者サポートにて承ります。

ソース コード

# coding:utf-8
import arcpy

# 入力ポイント
points = arcpy.GetParameterAsText(0)
# 入力ライン
lines = arcpy.GetParameterAsText(1)
# 出力ライン
outFC =  arcpy.GetParameterAsText(2)

try:
    sr = arcpy.Describe(points).spatialReference
    tmp_lines = []

    # いったんラインをディゾルブ
    disso_line =arcpy.Dissolve_management(lines,r"in_memory/disso")
    line_geom = [i[0] for i in arcpy.da.SearchCursor(disso_line,'SHAPE@',spatial_reference=sr)]

    with arcpy.da.SearchCursor(points,'SHAPE@') as cursor:

        # ポイント数分ループ
        for row in cursor:
            end = line_geom[0].queryPointAndDistance(row[0])[0].centroid # ラインの終点座標
            start = row[0].centroid

            tmp_lines.append(arcpy.Polyline(arcpy.Array([start,end]),sr))

except arcpy.ExecuteError:
   arcpy.AddError(arcpy.GetMessages(2))

arcpy.CopyFeatures_management(tmp_lines,outFC)

del disso_line,sr,tmp_lines,cursor,line_geom

メタデータ

種類

製品

バージョン