最近接 (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)] ツールへの入力として使用します。

構文

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
(オプション)

近接フィーチャの検索に使用される半径。この値を指定しない場合、すべての近接フィーチャが考慮されます。距離を指定して、単位を指定しないか、単位に不明を指定した場合、入力フィーチャの座標系の単位が使用されます。[測地線] オプションが [方法] パラメーター (Python では method='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 メルカトル、任意の地理座標系など) で格納されている場合や、解析が広い地理範囲にまたがる場合、[測地線] を使用することをお勧めします。

  • 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

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

フィーチャ レイヤー

コードのサンプル

Near (最近接) の例 1 (Python ウィンドウ)

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

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

## find the nearest road from each house
arcpy.Near_analysis('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.Near_analysis(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: はい
  • Standard: はい
  • Advanced: はい

関連トピック