最近接(Near) (解析)
図
使用法
-
以下のフィールドが入力に追加されます。これらのフィールドがすでに存在する場合、フィールドの値が更新されます。
Field Name
説明
NEAR_FID 最近接フィーチャのオブジェクト ID。
NEAR_DIST 入力フィーチャと近接フィーチャ間の距離。この値の単位は、[メソッド] パラメータが GEODESIC に設定され、入力が地理座標系内にある場合、入力フィーチャの座標系の距離単位、つまりメートルです。
NEAR_FC 近接フィーチャを含むフィーチャクラスのカタログ パス。このフィールドは、複数の近接フィーチャが指定された場合にのみ出力テーブルに追加されます。
[位置] パラメータがオン(スクリプトでは、location パラメータを LOCATION に設定)の場合、以下のフィールドが入力フィーチャに追加されます。フィールドがすでに存在する場合、フィールドの値が更新されます。
Field Name
説明
NEAR_X 入力フィーチャに最も近い近接フィーチャの位置の X 座標。近接フィーチャが見つからない場合、この値は -1 になります。
NEAR_Y 入力フィーチャに最も近い近接フィーチャの位置の Y 座標。近接フィーチャが見つからない場合、この値は -1 になります。
[角度] パラメータがオン(スクリプトでは、angle パラメータを ANGLE に設定)の場合、以下のフィールドが入力フィーチャに追加されます。フィールドがすでに存在する場合、フィールドの値が更新されます。
Field
説明
NEAR_ANGLE 入力フィーチャを近接フィーチャに接続するラインの、FROM_X と FROM_Y の位置での角度。近接フィーチャが見つからない場合、または近接フィーチャが入力フィーチャと交差する場合、この値は 0 になります。
-
検索範囲内でフィーチャが見つからない場合、NEAR_FID と NEAR_DIST の値は -1 になります。
-
入力フィーチャと近接フィーチャには、ポイント、マルチポイント、ライン、またはポリゴンを指定できます。
-
近接フィーチャには、さまざまな形状タイプ(ポイント、マルチポイント、ライン、またはポリゴン)の 1 つ以上のフィーチャクラスを含めることができます。
-
同じフィーチャクラスまたはレイヤを、入力フィーチャと近接フィーチャの両方に使用することができます。その場合、すべてのフィーチャの最近接フィーチャがそのフィーチャ自体になることを防ぐために、評価対象の入力フィーチャは、近接フィーチャの候補から除外されます。
-
入力フィーチャには、選択を実行したレイヤを指定できます。選択フィーチャは、ツールの実行中に使用および更新されます。残りのフィーチャには、新規作成されたフィールド(NEAR_FID、NEAR_DIST など)に -1 の値が設定されます。
-
入力フィーチャからの最短距離が等しい複数の近接フィーチャが存在する場合、そのうちの 1 つが最近接フィーチャとしてランダムに選択されます。
-
[メソッド] パラメータで PLANAR オプションを使用する場合、入力フィーチャは、距離の計測に適した投影座標系(正距図法など)に存在する必要があります。
-
FROM_X、FROM_Y、NEAR_X、および NEAR_Y の位置を視覚化するには、出力テーブルを、[XY イベント レイヤの作成(Make XY Event Layer)] ツールまたは [XY 座標 → ライン(XY To Line)] ツールへの入力として使用します。
構文
パラメータ | 説明 | データ タイプ |
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 メルカトル、任意の地理座標系など)で格納されている場合や、解析が広い地理範囲にまたがる場合、GEODESIC を使用することを強くお勧めします。
| String |
コードのサンプル
次の Python ウィンドウ スクリプトは、イミディエイト モードで Near(最近接)関数を使用する方法を示しています。
import arcpy
arcpy.env.workspace = "C:/data/city.gdb"
## find the nearest road from each house
arcpy.Near_analysis('houses', 'roads')
次の Python スクリプトは、スタンドアロン スクリプトで最近接関数を使用する方法を示しています。
# Name: Near.py
# Description: Finds nearest features from input feature class to near feature class.
import arcpy
from arcpy import env
# Set workspace environment
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 ex:
print ex.args[0]
次の 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)] ツールの派生出力の後処理を示しています。このスクリプトは、最近接フィーチャごとに、最も近い入力フィーチャを検出します。
# 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]}