最近接 (Near) (解析)

サマリー

入力フィーチャと、別のレイヤーまたはフィーチャクラス内の最近接フィーチャとの間の、距離および他の近接情報を計算します。

ジオプロセシング ツールでの近接性の計算方法の詳細

ジオメトリ タイプ別の近接フィーチャの検索

使用法

  • 以下のフィールドが入力に追加されます。 これらのフィールドがすでに存在する場合、フィールドの値が更新されます。 これらのフィールド名は、[フィールド名] (field_names) パラメーターを使用して構成できます。

    • NEAR_FID- 最近接フィーチャの ObjectID。 近接フィーチャが見つからない場合、この値は -1 になります。
    • NEAR_DIST- 入力フィーチャと近接フィーチャ間の距離。 この値の単位は、[方法] パラメーターが [測地線] に設定され、入力が地理座標系内にある場合、入力フィーチャの座標系の距離単位、つまりメートルです。 近接フィーチャが見つからない場合、この値は -1 になります。
    • NEAR_FC- 近接フィーチャを含むフィーチャクラスのカタログ パス。 このフィールドは、複数の近接フィーチャが指定された場合にのみ出力テーブルに追加されます。 近接フィーチャが見つからない場合、この値は空の文字列または NULL になります。

    [位置] パラメーターがオン (Python では、location パラメーターを LOCATION に設定) の場合、以下のフィールドが入力フィーチャに追加されます。 フィールドがすでに存在する場合、フィールドの値が更新されます。 フィールド値の単位は、[方法] パラメーターで選択した内容によって異なります。 [平面] に設定した場合、値は入力フィーチャの座標系の距離単位で表されます。 [測地線] に設定した場合、値は入力フィーチャの座標系に関連付けられた地理座標系で表されます。

    • NEAR_X- 入力フィーチャに最も近い近接フィーチャの位置の X 座標。 近接フィーチャが見つからない場合、この値は -1 になります。
    • NEAR_Y- 入力フィーチャに最も近い近接フィーチャの位置の Y 座標。 近接フィーチャが見つからない場合、この値は -1 になります。

    [角度] パラメーターがオン (Python では、angle パラメーターを ANGLE に設定) の場合、以下のフィールドが入力フィーチャに追加されます。 フィールドがすでに存在する場合、フィールドの値が更新されます。

    • NEAR_ANGLE- 入力フィーチャを近接フィーチャに接続するラインの、FROM_XFROM_Y の位置での角度。 近接フィーチャが見つからない場合、または近接フィーチャが入力フィーチャと交差する場合、この値は 0 になります。

  • 検索範囲内でフィーチャが見つからない場合、NEAR_FIDNEAR_DIST の値は -1 になります。

  • 入力フィーチャと近接フィーチャには、ポイント、マルチポイント、ライン、またはポリゴンを指定できます。

  • [近接フィーチャ] には、さまざまな形状タイプ (ポイント、マルチポイント、ライン、またはポリゴン) の 1 つ以上のフィーチャクラスを含めることができます。

  • 同じフィーチャクラスまたはレイヤーを、入力フィーチャと近接フィーチャの両方に使用することができます。 その場合、すべてのフィーチャの最近接フィーチャがそのフィーチャ自体になることを防ぐために、評価対象の入力フィーチャは、近接フィーチャの候補から除外されます。

  • 入力フィーチャには、選択を実行したレイヤーを指定できます。選択フィーチャは、ツールの実行中に使用および更新されます。残りのフィーチャには、新規作成されたフィールド (NEAR_FIDNEAR_DIST など) に -1 の値が設定されます。

  • 入力フィーチャからの最短距離が等しい複数の近接フィーチャが存在する場合、そのうちの 1 つが最近接フィーチャとしてランダムに選択されます。

  • [方法] パラメーターで [平面] オプションを使用する場合、入力フィーチャの座標系を、距離の測定に適した投影座標系 (正距方位図法など) にする必要があります。

    座標系と投影法の詳細

  • FROM_XFROM_YNEAR_X、および NEAR_Y の位置を視覚化するには、出力テーブルを、[XY イベント レイヤーの作成 (Make XY Event Layer)] ツールまたは [XY 座標 → ライン (XY To Line)] ツールへの入力として使用します。

パラメーター

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

ポイント、ポリライン、ポリゴン、またはマルチポイント タイプの入力フィーチャ。

Feature Layer
近接フィーチャ

近接フィーチャの候補が含まれる 1 つ以上のフィーチャ レイヤーまたはフィーチャクラス。 近接フィーチャとして、ポイント、ポリライン、ポリゴン、またはマルチポイントを使用できます。 複数のレイヤーまたはフィーチャクラスを指定した場合、NEAR_FC フィールドが入力テーブルに追加されます。このフィールドには、検出された最近接フィーチャを含むソース フィーチャクラスのパスが格納されます。 同じフィーチャクラスまたはレイヤーを、入力フィーチャと近接フィーチャの両方に使用することができます。

Feature Layer
検索範囲
(オプション)

近接フィーチャの検索に使用される半径。 この値を指定しない場合、すべての近接フィーチャが考慮されます。 距離を指定して、単位を指定しないか、単位に不明を指定した場合、入力フィーチャの座標系の単位が使用されます。 [方法] パラメーターに [測地線] オプションを使用した場合、キロメートルやマイルなどの距離単位を使用します。

Linear Unit
位置
(オプション)

近接フィーチャの最も近い位置を示す XY 座標を NEAR_X フィールドと NEAR_Y フィールドに書き込むかどうかを指定します。

  • オフ - 位置を書き込みません。 これがデフォルトです。
  • オン - 位置を書き込みます。
Boolean
角度
(オプション)

近接角度を計算して出力テーブルの NEAR_ANGLE フィールドに書き込むかどうかを指定します。 近接角度は、入力フィーチャとその最近接フィーチャを最も近い位置で接続するラインの方向を示します。 [方法] パラメーターで [平面] を使用した場合、角度の範囲は -180 〜 180° になり、0° は東、90° は北、180° (または -180°) は西、-90° は南を示します。 [測地線] を使用した場合、角度の範囲は -180 〜 180° になり、0° は北、90° は東、180° (または -180°) は南、-90° は西を示します。

  • オフ - NEAR_ANGLE フィールドは追加されません。 これがデフォルトです。
  • オン - NEAR_ANGLE フィールドが追加されます。
Boolean
方法
(オプション)

楕円体 (測地線) または平面地球 (平面) のどちらで最短パスを使用するかを指定します。 データが、距離の計測に適さない座標系 (Web メルカトル、任意の地理座標系など) で格納されている場合や、解析が広い地理範囲にまたがる場合、[測地線] を使用することをお勧めします。

  • 平面フィーチャ間で平面距離を使用します。 これがデフォルトです。
  • 測地線フィーチャ間で測地距離を使用します。 この方法では、楕円体の曲率を考慮して、日付変更線と極の近くのデータを正確に処理します。
String
フィールド名
(オプション)

処理中に追加される属性フィールドの名前を指定します。

このパラメーターが使用されない、または追加されるフィールドがこのパラメーターから除外されている場合、デフォルトのフィールド名が使用されます。

デフォルトでは、NEAR_FID および NEAR_DIST フィールドは常に追加され、NEAR_X および NEAR_Y フィールドは [位置] パラメーター (Python では location) が有効な場合に追加され、NEAR_ANGLE フィールドは [角度] パラメーター (Python では angle) が有効な場合に追加され、NEAR_FC フィールドは複数の入力が使用される場合に追加されます。

Value Table

派生した出力

ラベル説明データ タイプ
更新された入力フィーチャ

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

Feature Layer

arcpy.analysis.Near(in_features, near_features, {search_radius}, {location}, {angle}, {method}, {field_names})
名前説明データ タイプ
in_features

ポイント、ポリライン、ポリゴン、またはマルチポイント タイプの入力フィーチャ。

Feature Layer
near_features
[near_features,...]

近接フィーチャの候補が含まれる 1 つ以上のフィーチャ レイヤーまたはフィーチャクラス。 近接フィーチャとして、ポイント、ポリライン、ポリゴン、またはマルチポイントを使用できます。 複数のレイヤーまたはフィーチャクラスを指定した場合、NEAR_FC フィールドが入力テーブルに追加されます。このフィールドには、検出された最近接フィーチャを含むソース フィーチャクラスのパスが格納されます。 同じフィーチャクラスまたはレイヤーを、入力フィーチャと近接フィーチャの両方に使用することができます。

Feature Layer
search_radius
(オプション)

近接フィーチャの検索に使用される半径。 この値を指定しない場合、すべての近接フィーチャが考慮されます。 距離を指定して、単位を指定しないか、単位に不明を指定した場合、入力フィーチャの座標系の単位が使用されます。 Pythonmethod パラメーターに GEODESIC オプションを使用した場合、キロメートルやマイルなどの距離単位を使用します。

Linear Unit
location
(オプション)

近接フィーチャの最も近い位置を示す XY 座標を NEAR_X フィールドと NEAR_Y フィールドに書き込むかどうかを指定します。

  • NO_LOCATION位置情報を書き込みません。 これがデフォルトです。
  • LOCATION位置情報を書き込みます。
Boolean
angle
(オプション)

近接角度を計算して出力テーブルの NEAR_ANGLE フィールドに書き込むかどうかを指定します。 近接角度は、入力フィーチャとその最近接フィーチャを最も近い位置で接続するラインの方向を示します。 method パラメーターで PLANAR を使用した場合、角度の範囲は -180 〜 180° になり、0° は東、90° は北、180° (または -180°) は西、-90° は南を示します。 GEODESIC を使用した場合、角度の範囲は -180 〜 180° になり、0° は北、90° は東、180° (または -180°) は南、-90° は西を示します。

  • NO_ANGLE近接角度値は書き込まれません。これがデフォルトです。
  • ANGLE近接角度値が NEAR_ANGLE フィールドに書き込まれます。
Boolean
method
(オプション)

楕円体 (測地線) または平面地球 (平面) のどちらで最短パスを使用するかを指定します。 データが、距離の計測に適さない座標系 (Web メルカトル、任意の地理座標系など) で格納されている場合や、解析が広い地理範囲にまたがる場合、GEODESIC を使用することをお勧めします。

  • PLANARフィーチャ間で平面距離を使用します。 これがデフォルトです。
  • GEODESICフィーチャ間で測地距離を使用します。 この方法では、楕円体の曲率を考慮して、日付変更線と極の近くのデータを正確に処理します。
String
field_names
[[property, fieldname],...]
(オプション)

処理中に追加される属性フィールドの名前を指定します。

このパラメーターが使用されない、または追加されるフィールドがこのパラメーターから除外されている場合、デフォルトのフィールド名が使用されます。

デフォルトでは、NEAR_FID および NEAR_DIST フィールドは常に追加され、NEAR_X および NEAR_Y フィールドは [位置] パラメーター (Python では location) が有効な場合に追加され、NEAR_ANGLE フィールドは [角度] パラメーター (Python では angle) が有効な場合に追加され、NEAR_FC フィールドは複数の入力が使用される場合に追加されます。

Value Table

派生した出力

名前説明データ タイプ
out_feature_class

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

Feature Layer

コードのサンプル

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

次の対話型の Python ウィンドウ スクリプトは、イミディエイト モードで Near 関数を使用する方法を示しています。

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

# Find the nearest road from each house
arcpy.analysis.Near('houses', 'roads')
Near の例 2 (スタンドアロン スクリプト)

次の Python スクリプトは、スタンドアロン スクリプトで Near 関数を使用する方法を示しています。

# Name: Near.py
# Description: Finds nearest features from input feature class to near feature class.

import arcpy

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

try:
    # set local variables
    in_features = "houses"
    near_features = "parks"
    
    # find features only within search radius
    search_radius = "5000 Meters"
    
    # find location nearest features
    location = "LOCATION"
    
    # avoid getting angle of neares features
    angle = "NO_ANGLE"
    
    # execute the function
    arcpy.analysis.Near(in_features, near_features, search_radius, location, angle)
    
    # get geoprocessing messages
    print(arcpy.GetMessages())

except arcpy.ExecuteError:
    print(arcpy.GetMessages(2))
    
except Exception as err:
    print(err.args[0])
Near の例 3 (スタンドアロン スクリプト)

次の Python スクリプトは、近接角度を方位角に変換する方法を示しています。

# Name: near_angle_to_azimuth.py

import arcpy

# Near tool does not calculate angle in azimuths
# This script, using the output of the tool, converts the angles
# to azimuth angles.

in_table = r"C:/data/city.gdb/near_table"
    
angles = arcpy.da.SearchCursor(in_table, ["NEAR_ANGLE"])

azimuth_angles = []

with angles as rows:
    for row in rows:
        angle = row[0]
        if angle <= 180 and angle > 90:
            azimuth_angles.append(360.0 - (angle - 90))
        else:
            azimuth_angles.append(abs(angle - 90))

# Use these azimuth angles as necessary.
Near の例 4 (スタンドアロン スクリプト)

次の Python スクリプトは、Near 関数の派生出力の後処理を示しています。 このスクリプトは、最近接フィーチャごとに、最も近い入力フィーチャを検出します。

# Name: features_closest_to_input.py

"""
    This script finds, for each input feature, a list of near feature it is closest to.
    If near features 6, 7, 10 are closest to input feature 3 then the 
    resulting dictionary will have a list [6, 7, 10] as value for key 3
"""

import os
import arcpy

in_fc = r"C:\data\cities.gdb\cities_many"

# create a dictionary to hold the list of near ids for each input id
nearest_dict = dict()

with arcpy.da.SearchCursor(in_fc, ["OID@", "NEAR_FID"]) as rows:
    for row in rows:
        nearest_id = row[0]  # get OID value for that row
        input_id = row[1]    # get NEAR_FID value 
        
        if input_id in nearest_dict:
            # if a dict key already exists, append near id to value list for that key
            nearest_dict[input_id].append(nearest_id)
        else:
            # if the key does not exist then create a new list with near id
            # and add it to the dictionary
            nearest_dict[input_id] = [nearest_id]
            
print(nearest_dict)

# output will look like:
# {1: [13, 28], 2: [2, 9, 14, 20, 22], 3: [11, 12, 24, 25]}

ライセンス情報

  • Basic: Yes
  • Standard: Yes
  • Advanced: Yes

関連トピック