最近接 (Near) (解析)

サマリー

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

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

最近接ツールの図
ジオメトリ タイプ別の近接フィーチャの検索が表示されています。

使用法

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

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

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

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

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

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

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

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

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

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

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

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

  • [方法] パラメーターで [平面] オプションを使用する場合は、入力フィーチャとして、距離の計測に適した投影法 (正距方位図法など) を使用します。

    座標系と投影法の詳細

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

  • [距離単位] パラメーターを使用して、NEAR_DIST フィールドの計測単位 (メートル、キロメートル、マイルなど) を設定することができます。

パラメーター

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

ポイント、ポリライン、ポリゴン、またはマルチポイント タイプを指定できる入力フィーチャ。

Feature Layer
近接フィーチャ

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

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

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

Linear Unit
位置
(オプション)

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

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

近接角度を計算して出力テーブルの 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 フィールドは [位置] パラメーターがオンの場合に追加され、NEAR_ANGLE フィールドは [角度] パラメーターがオンの場合に追加され、NEAR_FC フィールドは複数の入力が使用される場合に追加されます。

Value Table
距離単位
(オプション)

NEAR_DIST フィールドの計測単位を指定します。 測定値の単位が指定されない場合、NEAR_DIST フィールドの値は入力フィーチャの座標系の距離単位で表されます。 入力で地理座標系が使用され、測地線方法が使用されている場合、NEAR_DIST フィールドの単位はメートルになります。

  • キロメートル単位はキロメートルです。
  • メートル単位はメートルです。
  • 国際海里単位は国際海里です。
  • 法定マイル単位は法定マイルです。
  • 国際ヤード単位は国際ヤードです。
  • 国際フィート単位は国際フィートです。
  • 米国測量海里単位は米国測量海里です。
  • 米国測量マイル単位は米国測量マイルです。
  • 米国測量ヤード単位は米国測量ヤードです。
  • 米国測量フィート単位は米国測量フィートです。
String

派生した出力

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

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

Feature Layer

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

ポイント、ポリライン、ポリゴン、またはマルチポイント タイプを指定できる入力フィーチャ。

Feature Layer
near_features
[near_features,...]

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

Feature Layer
search_radius
(オプション)

近接フィーチャの検索に使用される半径。 この値を指定しない場合、すべての近接フィーチャが考慮されます。 距離を指定して、単位を指定しないか、単位に不明を指定した場合、入力フィーチャの座標系の単位が使用されます。 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 メルカトル、任意の地理座標系など) で格納されている場合や、データセットが広い地理範囲にまたがる場合、GEODESIC 方法を使用することをお勧めします。

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

処理中に追加される属性フィールドの名前。

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

NEAR_FID および NEAR_DIST フィールドはデフォルトで追加されます。NEAR_X および NEAR_Y フィールドは location パラメーターが LOCATION に設定されている場合に追加され、NEAR_ANGLE フィールドは angle パラメーターが ANGLE に設定されている場合に追加され、NEAR_FC フィールドは複数の入力が使用される場合に追加されます。

Value Table
distance_unit
(オプション)

NEAR_DIST フィールドの計測単位を指定します。 測定値の単位が指定されない場合、NEAR_DIST フィールドの値は入力フィーチャの座標系の距離単位で表されます。 入力で地理座標系が使用され、測地線方法が使用されている場合、NEAR_DIST フィールドの単位はメートルになります。

  • Kilometers単位はキロメートルです。
  • Meters単位はメートルです。
  • NauticalMilesInt単位は国際海里です。
  • MilesInt単位は法定マイルです。
  • YardsInt単位は国際ヤードです。
  • FeetInt単位は国際フィートです。
  • NauticalMiles単位は米国測量海里です。
  • Miles単位は米国測量マイルです。
  • Yards単位は米国測量ヤードです。
  • Feet単位は米国測量フィートです。
String

派生した出力

名前説明データ タイプ
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

関連トピック