サマリ
入力フィーチャと、別のレイヤーまたはフィーチャクラス内の最近接フィーチャとの間の、距離および他の近接情報を計算します。
図
使用法
以下のフィールドが入力に追加されます。これらのフィールドがすでに存在する場合、フィールドの値が更新されます。
フィールド名 説明 NEAR_FID 最近接フィーチャのオブジェクト ID。近接フィーチャが見つからない場合、この値は -1 になります。
NEAR_DIST 入力フィーチャと近接フィーチャ間の距離。この値の単位は、[メソッド] パラメーターが [測地線] に設定され、入力が地理座標系内にある場合、入力フィーチャの座標系の距離単位、つまりメートルです。近接フィーチャが見つからない場合、この値は -1 になります。
NEAR_FC 近接フィーチャを含むフィーチャクラスのカタログ パス。このフィールドは、複数の近接フィーチャが指定された場合にのみ出力テーブルに追加されます。近接フィーチャが見つからない場合、この値は空の文字列または NULL になります。
[位置] パラメーターがオン (Python では、location パラメーターを LOCATION に設定) の場合、以下のフィールドが入力フィーチャに追加されます。フィールドがすでに存在する場合、フィールドの値が更新されます。フィールドの値の単位は、[メソッド] パラメーターで選択した内容によって異なります。[平面] に設定した場合、値は入力フィーチャの座標系の距離単位で表されます。[測地線] に設定した場合、値は入力フィーチャの座標系に関連付けられた地理座標系で表されます。
フィールド名 説明 NEAR_X 入力フィーチャに最も近い近接フィーチャの位置の X 座標。近接フィーチャが見つからない場合、この値は -1 になります。
NEAR_Y 入力フィーチャに最も近い近接フィーチャの位置の Y 座標。近接フィーチャが見つからない場合、この値は -1 になります。
[角度] パラメーターがオン (Python では、angle パラメーターを ANGLE に設定) の場合、以下のフィールドが入力フィーチャに追加されます。フィールドがすでに存在する場合、フィールドの値が更新されます。
フィールド 説明 NEAR_ANGLE 入力フィーチャを近接フィーチャに接続するラインの、FROM_X と FROM_Y の位置での角度。近接フィーチャが見つからない場合、または近接フィーチャが入力フィーチャと交差する場合、この値は 0 になります。
-
検索範囲内でフィーチャが見つからない場合、NEAR_FID と NEAR_DIST の値は -1 になります。
-
入力フィーチャと近接フィーチャには、ポイント、マルチポイント、ライン、またはポリゴンを指定できます。
近接フィーチャには、さまざまな形状タイプ (ポイント、マルチポイント、ライン、またはポリゴン) の 1 つ以上のフィーチャクラスを含めることができます。
同じフィーチャクラスまたはレイヤーを、入力フィーチャと近接フィーチャの両方に使用することができます。その場合、すべてのフィーチャの最近接フィーチャがそのフィーチャ自体になることを防ぐために、評価対象の入力フィーチャは、近接フィーチャの候補から除外されます。
-
入力フィーチャには、選択を実行したレイヤーを指定できます。選択フィーチャは、ツールの実行中に使用および更新されます。残りのフィーチャには、新規作成されたフィールド (NEAR_FID、NEAR_DIST など) に -1 の値が設定されます。
入力フィーチャからの最短距離が等しい複数の近接フィーチャが存在する場合、そのうちの 1 つが最近接フィーチャとしてランダムに選択されます。
[メソッド] パラメーターで [平面] オプションを使用する場合、入力フィーチャの座標系を、距離の測定に適した投影座標系 (正距方位図法など) にする必要があります。
FROM_X、FROM_Y、NEAR_X、および NEAR_Y の位置を視覚化するには、出力テーブルを、[XY イベント レイヤーの作成 (Make XY Event Layer)] ツールまたは [XY 座標 → ライン (XY To Line)] ツールへの入力として使用します。
構文
Near_analysis (in_features, near_features, {search_radius}, {location}, {angle}, {method})
パラメータ | 説明 | データ タイプ |
in_features | ポイント、ポリライン、ポリゴン、またはマルチポイント タイプの入力フィーチャ。 | Feature Layer |
near_features [near_features,...] | 近接フィーチャの候補が含まれる 1 つ以上のフィーチャ レイヤーまたはフィーチャクラス。近接フィーチャとして、ポイント、ポリライン、ポリゴン、またはマルチポイントを使用できます。複数のレイヤーまたはフィーチャクラスを指定した場合、NEAR_FC という名前のフィールドが入力テーブルに追加されます。このフィールドには、検出された最近接フィーチャを含むソース フィーチャクラスのパスが格納されます。同じフィーチャクラスまたはレイヤーを、入力フィーチャと近接フィーチャの両方に使用することができます。 | Feature Layer |
search_radius (オプション) | 近接フィーチャの検索に使用される半径。この値を指定しない場合、すべての近接フィーチャが考慮されます。距離を指定して、単位を指定しないか、単位に不明を指定した場合、入力フィーチャの座標系の単位が使用されます。[測地線] オプションを使用した場合、キロメートルやマイルなどの距離単位を使用する必要があります。 | Linear unit |
location (オプション) | 近接フィーチャ上の最も近い位置を示す XY 座標を NEAR_X フィールドと NEAR_Y フィールドに書き込むかどうかを指定します。
| Boolean |
angle (オプション) | 近接角度を計算して出力テーブルの NEAR_ANGLE フィールドに書き込むかどうかを指定します。近接角度は、入力フィーチャとその最近接フィーチャを最も近い位置で接続するラインの方向を示します。method パラメーターで PLANAR を使用した場合、角度の範囲は -180 〜 180°になり、0°は東、90°は北、180° (または -180°) は西、-90°は南を示します。GEODESIC を使用した場合、角度の範囲は -180 〜 180°になり、0°は北、90°は東、180° (または -180°) は南、-90°は西を示します。
| Boolean |
method (オプション) | 楕円体 (GEODESIC) または平面地球 (PLANAR) のどちらで最短パスを使用するかを指定します。データが、距離の計測に適さない座標系 (Web メルカトル、任意の地理座標系など) で格納されている場合や、解析が広い地理範囲にまたがる場合、[測地線] を使用することを強くお勧めします。
| String |
コードのサンプル
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 スクリプト)
次の Python スクリプトは、スタンドアロン スクリプトで最近接関数を使用する方法を示しています。
# 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 スクリプト)
次の 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]}
環境
ライセンス情報
- ArcGIS for Desktop Basic: ×
- ArcGIS for Desktop Standard: ×
- ArcGIS for Desktop Advanced: ○