スナップ (Snap) (編集)

サマリー

ポイントまたは頂点を、他のフィーチャの頂点、エッジ、または端点の位置と正確に一致するように移動します。 スナップ ルールを指定すれば、入力頂点のスナップ先 (指定した距離範囲で最も近くにある頂点、エッジ、または端点) を制御できます。

スナップ ツールの図
スナップ ツールの結果の例を示します。

使用法

    注意:

    このツールを実行すると、入力データが変更されます。 詳細と不要なデータの変更を回避するための方法については、「入力データを変更または更新するツール」をご参照ください。

  • [スナップ環境] パラメーターを使用して、入力フィーチャの頂点を、複数のレイヤーまたはフィーチャクラスの頂点、エッジ、または端点にスナップできます。 スナップ規則が複数ある場合、ツール ダイアログ ボックスでは上から順、スクリプト内では左から順に優先されます。

  • 入力フィーチャの頂点は、指定した距離範囲にある最も近い頂点、エッジ、または端点にスナップします。

  • [スナップ環境] パラメーターでは、スナップ タイプが異なる同じレイヤーまたはフィーチャクラスを使用して複数のスナップ規則を指定できます。

  • フィーチャが選択されているレイヤーまたはフィーチャクラスを入力として使用した場合、選択されているフィーチャの頂点だけがスナップされます。

  • あるフィーチャクラス内のフィーチャを同じフィーチャクラス内のフィーチャにスナップさせた場合、通常はオブジェクト ID (フィーチャ ID) が小さいフィーチャが、オブジェクト ID (シェープファイルの OBJECTID フィールドまたは FID フィールド) が大きいフィーチャにスナップします。 たとえば、OBJECTID フィールド値が 1 および 2 のポイントがスナップ距離範囲にある場合、OBJECTID フィールド値が 1 のポイントが OBJECTID フィールド値が 2 のポイントにスナップし、この逆にスナップすることはありません。

  • 注意:

    このツールの 1 つの使用例として、異なるデータセットから作成されているが、本来は同じ位置にあるべき境界線同士がずれている場合に、一方の境界線をもう一方の境界線の頂点、エッジ、または端点にスナップさせることで、境界線の位置を合わせることができます。 入力フィーチャに十分な数の頂点がないために別の境界線の曲率と正確に一致しない場合、[頂点の挿入 (densify)] ツールを使用して入力フィーチャに頂点を追加することで、ぴったり揃えることができます。

パラメーター

ラベル説明データ タイプ
入力フィーチャ

頂点が他のフィーチャの頂点、エッジ、または端点にスナップされる入力フィーチャ。 入力フィーチャとして、ポイント、マルチポイント、ライン、またはポリゴンを指定できます。

Feature Layer
スナップ環境

スナップ先のフィーチャを含むフィーチャクラスまたはフィーチャ レイヤー。

スナップ環境の要素は次のとおりです。

  • [フィーチャ] - 入力フィーチャの頂点のスナップ先となるフィーチャ。 ポイント、マルチポイント、ライン、またはポリゴンを指定できます。
  • [タイプ] - 入力フィーチャの頂点のスナップ先となるフィーチャ部分のタイプ。
  • [距離] - 最も近い端点、頂点、またはエッジのスナップ先となる入力フィーチャの頂点の距離範囲。

使用できるスナップ タイプは次のとおりです。

  • [端点] - 入力フィーチャの頂点はフィーチャの端点にスナップします。
  • [頂点] - 入力フィーチャの頂点はフィーチャの頂点にスナップします。
  • [エッジ] - 入力フィーチャの頂点はフィーチャのエッジにスナップします。
注意:

距離の単位が指定されていない場合 (例: 10 メートルの代わりに 10 など)、入力フィーチャの座標系の長さまたは角度の単位がデフォルトとして使用されます。 入力フィーチャで投影座標系が使用されている場合、長さの単位が使用されます。

Value Table

派生した出力

ラベル説明データ タイプ
スナップされた入力フィーチャ

更新された入力フィーチャ。

Feature Class

arcpy.management.Snap(in_features, snap_environment)
名前説明データ タイプ
in_features

頂点が他のフィーチャの頂点、エッジ、または端点にスナップされる入力フィーチャ。 入力フィーチャとして、ポイント、マルチポイント、ライン、またはポリゴンを指定できます。

Feature Layer
snap_environment
[[Features, Type, Distance],...]

スナップ先のフィーチャを含むフィーチャクラスまたはフィーチャ レイヤー。

スナップ環境の要素は次のとおりです。

  • フィーチャ - 入力フィーチャの頂点のスナップ先となるフィーチャ。 ポイント、マルチポイント、ライン、またはポリゴンを指定できます。
  • 種類 - 入力フィーチャの頂点のスナップ先となるフィーチャ部分のタイプ。
  • 距離 - 最も近い端点、頂点、またはエッジのスナップ先となる入力フィーチャの頂点の距離範囲。

使用できるスナップ タイプは次のとおりです。

  • END - 入力フィーチャの頂点はフィーチャの端点にスナップします。
  • VERTEX - 入力フィーチャの頂点はフィーチャの頂点にスナップします。
  • EDGE - 入力フィーチャの頂点はフィーチャのエッジにスナップします。
注意:

距離の単位が指定されていない場合 (例: 10 メートルの代わりに 10 など)、入力フィーチャの座標系の長さまたは角度の単位がデフォルトとして使用されます。 入力フィーチャで投影座標系が使用されている場合、長さの単位が使用されます。

Value Table

派生した出力

名前説明データ タイプ
out_feature_class

更新された入力フィーチャ。

Feature Class

コードのサンプル

Snap の例 1 (Python ウィンドウ)

次の Python ウィンドウ スクリプトは、Snap 関数の使用方法を示しています。

import arcpy
arcpy.env.workspace = "C:/data"

arcpy.edit.Snap("climate.shp", 
                [["Habitat_Analysis.gdb/vegtype", "VERTEX", "30 Feet"], 
                 ["Habitat_Analysis.gdb/vegtype", "EDGE", "20 Feet"]])
Snap の例 2 (スタンドアロン スクリプト)

気候区域の境界線を植生レイヤーの境界線にスナップさせて、2 本の境界線の位置を合わせています。

# Name: Snap.py
# Description: Snap climate regions boundary to vegetation layer boundary 
#              to ensure common boundary is coincident

# import system modules 
import arcpy

# Set environment settings
arcpy.env.workspace = "C:/data"

# Make backup copy of climate regions feature class, since modification with 
# the Editing tools below is permanent
climate = "climate.shp"
climateBackup = "C:/output/Output.gdb/climateBackup"
arcpy.management.CopyFeatures(climate, climateBackup)

# Densify climate regions feature class to make sure there are enough vertices 
# to match detail of vegetation layer when layers are snapped
arcpy.edit.Densify(climate, "DISTANCE", "10 Feet")

# Snap climate regions feature class to  vegetation layer vertices and edge
veg = "Habitat_Analysis.gdb/vegtype"

# First, snap climate region vertices to the nearest vegetation layer vertex 
# within 30 Feet
snapEnv1 = [veg, "VERTEX", "30 Feet"]

# Second, snap climate region vertices to the nearest vegetation layer edge 
# within 20 Feet
snapEnv2 = [veg, "EDGE", "20 Feet"]
arcpy.edit.Snap(climate, [snapEnv1, snapEnv2])