最近接(Near) (解析)

ライセンス レベル:BasicStandardAdvanced

サマリ

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

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

Finding near feature by geometry type

使用法

構文

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 フィールドに書き込むかどうかを指定します。

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

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

  • PLANARフィーチャ間で平面距離を使用します。これはデフォルト設定です。
  • GEODESICフィーチャ間で測地距離を使用します。この方法では、楕円体の曲率を考慮して、日付変更線と極の近くのデータを正確に処理します。
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
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]
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: ○
5/10/2014