方法

ArcPy を使用して、フィーチャクラス内のポイントから別のフィーチャクラスの 1 つのポイントにラインを配置します。

Last Published: March 8, 2023

サマリー

ArcGIS Pro では、ポイント → ライン (Points to Line) ツールを使用して、ポイント フィーチャをライン フィーチャに接続できます。 場合によっては、ポイント フィーチャのグループから、別のポイント フィーチャクラス内の選択したポイントへの接続ラインを配置する必要があります。 ただし、ポイント → ライン (Points to Line) ツールを使用すると、生成されたラインは、次の図に示すように、同じポイント フィーチャクラスのポイントにのみ接続されます。

ポイント → ライン (Points to Line) ツールを使用した後の出力

次の手順では、ArcPy を使用して、フィーチャクラス内のポイントを別のフィーチャクラス内の 1 つのポイント フィーチャにラインでプログラムによって接続する方法を示します。

手順

  1. ArcGIS Pro で、ポイント フィーチャクラスとライン フィーチャクラスを含むマップを開きます。
  2. マップ上のポイント フィーチャを選択します。 詳細については、「ArcGIS Pro: 対話形式でのフィーチャの選択」をご参照ください。
  3. Python ウィンドウを開きます。 詳細については、「ArcGIS Pro: Python ウィンドウ」をご参照ください。
  4. 次のスクリプトを実行します。
    1. 必要なモジュールをインポートし、必要なポイントとライン フィーチャ レイヤーの名前を設定します。
import arcpy

<VariableName1> = "<PointName1>"
<VariableName2> = "<PointName2>"
<VariableName3> = "<LineName>"
  1. マップ内の <VariableName1> から 1 つのポイントを選択し、<VariableName2> から 1 つ以上のポイントを選択します。
assert arcpy.management.GetCount(points_layer1)[0] == "1", "select exactly 1 point from <VariableName1>"
assert int(arcpy.management.GetCount(points_layer1)[0]) > 0, "select > 0 point(s) from <VariableName2>"
  1. 選択した 1 つの点の座標を <VariableName1> で取得します。
with arcpy.da.SearchCursor(<VariableName1>, ["SHAPE@XY"]) as cursor:
  for row in cursor:
    end_x, end_y = row[0]
    end_point = arcpy.PointGeometry(arcpy.Point(float(end_x), float(end_y)))
  1. 必要に応じて、ラインを格納する新しいフィーチャクラスを作成します。
if not arcpy.Exists(VariableName3):
  arcpy.management.CreateFeatureclass(arcpy.env.workspace, "<LineName>", "POLYLINE")
  1. ライン ジオメトリを格納する配列を作成し、arcpy.da.SearchCursor() 関数を実行します。
line_array = arcpy.Array()

with arcpy.da.SearchCursor(<VariableName2>, ["SHAPE@XY"]) as cursor:
  for row in cursor:
    start_x, start_y = row[0]
    start_point = arcpy.PointGeometry(arcpy.Point(float(start_x), float(start_y)))
  1. 始点と終点をライン配列に追加します。
line_array.append(start_point.centroid)
line_array.append(end_point.centroid)
  1. ライン配列からポリライン オブジェクトを作成します。
line = arcpy.Polyline(line_array)
line_array.removeAll()
  1. 挿入カーソルを使用して、ラインをライン フィーチャクラスに挿入します。
with arcpy.da.InsertCursor(<VariableName3>, ["SHAPE@"]) as icursor:
  icursor.insertRow([line])

  1. ライン レイヤーをマップに追加して、表示を更新します。 Enter キーを 2 回押します。
arcpy.management.MakeFeatureLayer(<VariableName3>,"<LineName>")

以下のコード ブロックに、完全なスクリプトを示します。

import arcpy

points_layer1 = "facilities"
points_layer2 = "pts"
lines_layer = "lines"

assert arcpy.management.GetCount(points_layer1)[0] == "1", "select exactly 1 point from points_layer1"
assert int(arcpy.management.GetCount(points_layer1)[0]) > 0, "select > 0 point(s) from points_layer2"

with arcpy.da.SearchCursor(points_layer1, ["SHAPE@XY"]) as cursor:
  for row in cursor:
    end_x, end_y = row[0]
    end_point = arcpy.PointGeometry(arcpy.Point(float(end_x), float(end_y)))

if not arcpy.Exists(lines_layer):
  arcpy.management.CreateFeatureclass(arcpy.env.workspace, "lines", "POLYLINE")

line_array = arcpy.Array()

with arcpy.da.SearchCursor(points_layer2, ["SHAPE@XY"]) as cursor:
  for row in cursor:
    start_x, start_y = row[0]
    start_point = arcpy.PointGeometry(arcpy.Point(float(start_x), float(start_y)))
   
    line_array.append(start_point.centroid)
    line_array.append(end_point.centroid)

    line = arcpy.Polyline(line_array)
    line_array.removeAll()
   
    with arcpy.da.InsertCursor(lines_layer, ["SHAPE@"]) as icursor:
      icursor.insertRow([line])
     
arcpy.management.MakeFeatureLayer(lines_layer,"lines")

以下の図は、ポイント フィーチャのグループを別のフィーチャクラス内の選択したポイント フィーチャに接続するライン フィーチャを示しています。

ポイント フィーチャのグループから別の選択したポイント フィーチャクラスへの接続ライン

記事 ID: 000029537

新しい問題や一般的な問題に対する通知とソリューションの受け取り

新しい AI チャットボットから、要約された回答とビデオソリューションを入手してください。

Esri Support アプリのダウンロード

関連情報

このトピックについてさらに調べる

ArcGIS エキスパートのサポートを受ける

テクニカル サポートへのお問い合わせ

Esri Support アプリのダウンロード

ダウンロード オプションに移動