ロケーションの追加(Add Locations) (Network Analyst)

ライセンス レベル:BasicStandardAdvanced

サマリ

ネットワーク解析レイヤにネットワーク解析オブジェクトを追加します。これらのオブジェクトは、ストップやバリアなどの特定のサブレイヤに追加されます。オブジェクトは、フィーチャまたはレコードとして入力されます。

使用法

構文

AddLocations_na (in_network_analysis_layer, sub_layer, in_table, field_mappings, search_tolerance, {sort_field}, {search_criteria}, {match_type}, {append}, {snap_to_position_along_network}, {snap_offset}, {exclude_restricted_elements}, {search_query})
パラメータ説明データ タイプ
in_network_analysis_layer

ネットワーク解析オブジェクトが追加されるネットワーク解析レイヤ。

Network Analyst Layer
sub_layer

ネットワーク解析オブジェクトが追加されるネットワーク解析レイヤのサブレイヤ。

String
in_table

新しいネットワーク解析オブジェクトのソースとなるフィーチャクラスまたはテーブル。

Table View
field_mappings

ネットワーク解析オブジェクトのプロパティに値を設定します。プロパティは定数を設定するか、入力フィーチャクラスまたはテーブルのフィールドに割り当てることができます。

NAClassFieldMappings クラスから取得する NAClassFieldMappings オブジェクトは、パラメータ値を指定するのに使用されます。NAClassFieldMappings オブジェクトは NAClassFieldMap オブジェクトのコレクションで、これを使用すると、ネットワーク解析オブジェクトのプロパティに対して、デフォルト値を指定したり、入力フィーチャからフィールド名をマップしたりできます。読み込むデータに、解析に使用するネットワーク データセットに基づくネットワーク ロケーションまたはネットワーク ロケーション範囲属性がある場合、入力フィーチャのネットワーク ロケーション フィールドをネットワーク ロケーション プロパティに割り当てます。フィールド マッピングのネットワーク ロケーション フィールドを指定することは、ツール ダイアログ ボックスの [ジオメトリの代わりにネットワーク ロケーション フィールドを使用する] パラメータを使用するのと同様です。

注意注意:

すべてのネットワーク ロケーション プロパティにフィールド マッピングを指定する場合、残りのネットワーク ロケーション プロパティのフィールド マッピングを指定して、ツール実行エラーを防ぐ必要があります。

Network Analyst Class FieldMap
search_tolerance

入力フィーチャをネットワークに配置する際の検索許容値。検索許容値の外側にあるフィーチャは配置されません。パラメータには許容値の値と単位が含まれます。

ライン バリアまたはポリゴン バリアのサブレイヤにロケーションを追加する際には、パラメータは使用されません。この場合、「#」をパラメータ値として使用します。

Linear unit
sort_field
(オプション)

ネットワーク解析オブジェクトをネットワーク解析レイヤに追加する際に、ネットワーク解析オブジェクトをソートする基準となるフィールド。デフォルトは入力フィーチャクラスまたはテーブルの ObjectID フィールドです。

Field
search_criteria
[[Source, SnapType],...]
(オプション)

ロケーション検索時に検索するネットワーク データセットのソースと、使用するジオメトリの部分(スナップ タイプとも呼ばれます)を指定します。

パラメータ値は、ネストされたリストとともにリストとして指定されます。ネストしたリストは各ネットワーク ソースの名前とスナップ タイプを示す 2 つの値で構成されます。スナップ タイプは SHAPE、MIDDLE、END、NONE キーワードを使用して指定されます。

  • SHAPE - 該当するネットワーク ソース内にあるエレメントの最近接点にポイントが配置されます。
  • MIDDLE - 該当するネットワーク ソース内にあるエレメントの最近接の中間点にポイントが配置されます。
  • END - 該当するネットワーク ソース内にあるエレメントの最近接の端点にポイントが配置されます。
  • NONE - 該当するネットワーク ソース内にあるエレメントにポイントが配置されません。
たとえば、ロケーション検索時には、パラメータ値「[["Streets","SHAPE"],["Streets_ND_Junctions","NONE"]]」は、Streets_ND_Junctions ソースでなく Streets ソースの形状に基づいた検索が可能であることを示します。

1 つのネットワーク ソースに複数のスナップ タイプを指定するには、アンダースコアで区切ったスナップ タイプ キーワードの組み合わせを使用します。たとえば、MIDDLE_END はロケーションがネットワーク ソースの中間または端点にスナップされることを示します。

ラインまたはポリゴン ネットワーク ロケーションを追加する際、他のスナップ タイプが指定されていても Shape スナップ タイプのみが使用されます。

このリストに入っていないネットワーク ソースでは、デフォルト スナップ タイプが使用されます。すべてのネットワーク ソースをリストに入れ、ネットワーク ソースごとにスナップ タイプを明示的に設定することが最も安全な方法です。

Value Table
match_type
(オプション)
  • MATCH_TO_CLOSEST(最寄りと照合)検索条件に指定されたスナップ タイプを保持するすべてのソースの中から最寄りのネットワーク ソースを新しいネットワーク ロケーションと照合します。これはデフォルト設定です。
  • PRIORITY(優先度)検索条件に指定されたスナップ タイプを保持する最初のネットワーク ソースを新しいネットワーク ロケーションと照合します。ロケーションが検索許容値内で検出される場合、ソースは優先度順に検索しているストップの中から検索されます。

ライン バリアまたはポリゴン バリアのサブレイヤにロケーションを追加する際には、パラメータは使用されません。この場合、「#」をパラメータ値として使用します。

Boolean
append
(オプション)

新しいネットワーク解析オブジェクトを既存のオブジェクトに追加するかどうかを指定します。

  • APPEND(追加)選択されたサブレイヤ内の既存の複数のオブジェクトに新しいネットワーク解析オブジェクトを追加します。
  • CLEAR(削除)既存のネットワーク解析オブジェクトを削除し、新しいオブジェクトに置き換えます。
Boolean
snap_to_position_along_network
(オプション)

ネットワーク データセットに沿ってネットワーク ロケーションをスナップするか、ネットワーク データセットから指定したオフセットにネットワーク ロケーションをスナップするかを指定します。

  • NO_SNAP(スナップしない) ネットワーク ロケーションのジオメトリは入力フィーチャのジオメトリに基づきます。これはネットワーク ロケーションがエッジのどちら側にあるかを把握している必要があるカーブ アプローチを使用する場合に役立ちます。
  • SNAP(スナップする) ポイント フィーチャがある場合、ポイントはネットワークにスナップされ、カーブ アプローチを使用することはできません。これは車両がどのようにストップに近づくかが重要でない場合に役立ちます。入力フィーチャがラインまたはポリゴンの場合、このパラメータ値を使用します。

ライン バリアまたはポリゴン バリアのサブレイヤにロケーションを追加する際には、パラメータは使用されません。この場合、「#」をパラメータ値として使用します。

Boolean
snap_offset
(オプション)

ポイントをネットワークにスナップする際、オフセット距離を適用できます。オフセット距離が 0 だと、ポイントはネットワーク フィーチャ(一般的にライン)と一致します。ネットワーク フィーチャからポイントをオフセットする場合、オフセット距離を入力します。オフセットは、元のポイントの場所に関連しています。つまり、元のポイントが左側にあった場合、新しい場所は左にオフセットされます。元のポイントが右側にあれば、新しいロケーションも右側にオフセットされます。

ライン バリアまたはポリゴン バリアのサブレイヤにロケーションを追加する際には、パラメータは使用されません。この場合、「#」をパラメータ値として使用します。

Linear unit
exclude_restricted_elements
(オプション)
  • EXCLUDE(含めない)ネットワーク ロケーションがネットワークの通過可能な部分にのみ配置されるように指定します。これにより、規制またはバリアが原因で到達できないエレメントにネットワーク ロケーションが配置されなくなります。このオプションを使用してネットワーク ロケーションを追加する前に、期待している結果を得るためにすべての規制バリアを入力ネットワーク解析レイヤにすでに追加していることを確認してください。このパラメータはバリア オブジェクトの追加時には適用できません。この場合、「#」をパラメータ値として使用します。
  • INCLUDE(含む)ネットワーク ロケーションがネットワークのすべてのエレメントに配置されるように指定します。このオプションで追加されるネットワーク ロケーションは、規制が適用されたエレメント上に位置している場合、解析プロセスにおいて到達不能になる可能性があります。
Boolean
search_query
[[Source, Expression],...]
(オプション)

検索をソース フィーチャクラス内のフィーチャのサブセットに制限するクエリを定義します。この機能は、ネットワーク ロケーションとして適切でないフィーチャを検索したくない場合に有用です。たとえば、ポリゴンの重心を読み込む場合に、生活道路に配置したくない場合は、一般道路のみを検索するクエリを定義できます。

パラメータ値は、ネストされたリストとともにリストとして指定されます。ネストしたリストはすべてのネットワーク ソースの名前と SQL 式を示す 2 つの値で構成されます。SQL 式の構文はネットワーク ソース フィーチャクラスのタイプによって少し異なります。たとえば、クエリ対象がファイル ジオデータベース、ArcSDE ジオデータベース、シェープファイル、または SDC に格納されたソース フィーチャクラスの場合は、フィールド名を二重引用符で囲みます(「"CFCC"」)。クエリ対象がパーソナル ジオデータベースの場合は、フィールドを角括弧で囲みます(「[CFCC]」)。

特定のソースに対してクエリを定義したくない場合、SQL 式に値として「"#"」を入力するか、またはパラメータ値からソース名と SQL 式を除外します。すべてのネットワーク ソースに対してクエリを定義したくない場合、パラメータ値として「"#"」を入力します。

たとえば、パラメータ値「[["Streets","\"CFCC\" = 'A15'"], ["Streets_ND_Junctions",""]]」では、Streets ソース フィーチャクラスに対する SQL 式を定義し、Streets_ND_Junctions ソース フィーチャクラスには SQL 式を定義しません。フィールド名 CFCC を囲むために使用される二重引用符は、Python インタープリタで構文解析エラーが発生しないようにバック スラッシュ文字でエスケープされます。

Value Table

コードのサンプル

AddLocations(ロケーションの追加)の例 1(Python ウィンドウ)

必須パラメータのみを使用してツールを実行します。

import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.AddLocations("Route","Stops","Analysis/Hospital","","")
AddLocations(ロケーションの追加)の例 2(Python ウィンドウ)

すべてのパラメータを使用してツールを実行します。

import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.AddLocations("Route","Stops","Analysis/Hospital",
                      "Name Name #;Attr_Minutes VisitTime 0;CurbApproach # 0",
                      "2 Miles","FID",
                      [["Streets","SHAPE"],["Streets_ND_Junctions","NONE"]],
                      "MATCH_TO_CLOSEST","CLEAR","SNAP","10 Feet","EXCLUDE",
                      [["Streets",'"FREEWAY" = 0'],["Streets_ND_Junctions",""]])
AddLocations(ロケーションの追加)の例 3(ワークフロー)

次のスタンドアロン Python スクリプトは、AddLocations(ロケーションの追加)ツールを使用して起点と終点を OD コスト マトリックス レイヤに読み込む方法を示しています。

# Name: AddLocations_Workflow.py
# Description: The scenario shows how to calculate a travel time matrix between 
#              store features. Use the Add Locations tool to load origins and 
#              destinations into an OD Cost Matrix layer. Since the origins and 
#              destinations are the same in this case, the origins are first loaded 
#              from the store features using their geometry and the destinations
#              are loaded from the origins using network location fields to 
#              speed up the load times. 
# Requirements: Network Analyst Extension 

#Import system modules
import arcpy
from arcpy import env

try:
    #Check out the Network Analyst extension license
    arcpy.CheckOutExtension("Network")

    #Set environment settings
    env.workspace = "C:/data/SanFrancisco.gdb"
    env.overwriteOutput = True
    
    #Set local variables
    inNetworkDataset = "Transportation/Streets_ND"
    outNALayerName = "StoreTravelTimeMatrix"
    impedanceAttribute = "TravelTime"
    inFeatures = "Analysis/Stores"
    searchTolerance = "500 Meters"
    searchQuery = [["Streets",'"FREEWAY" = 0'],["Streets_ND_Junctions",""]]
    odOrigins = "Origins"
    outLayerFile = "C:/data/output" + "/" + outNALayerName + ".lyr"
    
    #Create a new OD cost matrix analysis layer. For this scenario, the default 
    #value for all the remaining parameters statisfies the analysis requirements
    outNALayer = arcpy.na.MakeODCostMatrixLayer(inNetworkDataset, outNALayerName,
                                   impedanceAttribute)
    
    #Get the layer object from the result object. The OD cost matrix layer can 
    #now be referenced using the layer object.
    outNALayer = outNALayer.getOutput(0)
    
    #Get the names of all the sublayers within the OD cost matrix layer.
    subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
    #Stores the layer names that we will use later
    originsLayerName = subLayerNames[odOrigins]
    destinationsLayerName = subLayerNames["Destinations"]
    
    #Get the origin layer object from within the OD cost matrix layer
    #The first layer returned by ListLayers is the OD cost matrix layer itself
    #which we don't want to use.
    for layer in arcpy.mapping.ListLayers(outNALayer)[1:]:
        if layer.datasetName == odOrigins:
            originsLayer = layer
            break
    else:
        raise Exception("Failed to get the origins layer object.")
    
    #Load store features as origins using the geometry of store features.
    #Ensure that the stores are not located on freeways by using a search query.
    #The OD cost matrix layer created previously is referred using its name. 
    arcpy.na.AddLocations(outNALayer,originsLayerName,inFeatures,"",
                          searchTolerance, exclude_restricted_elements = "EXCLUDE",
                          search_query = searchQuery)
    
    #Load origins as destinations using the network locations fields from 
    #origins. This is much faster than loading destinations from the store 
    #features using their geometry as their network locations have already been
    #calculated while loading them origins.
    #Create a field mappings object that supports network location fields from 
    #origins layer using the candidate fields from origins
    originsLayer = arcpy.management.MakeFeatureLayer(originsLayer,
                                                     outNALayerName+originsLayerName)
    candidateFields = arcpy.ListFields(originsLayer.getOutput(0))
    fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer,
                                                  destinationsLayerName, True,
                                                  candidateFields)
    arcpy.na.AddLocations(outNALayer,destinationsLayerName,originsLayer,
                          fieldMappings,"")
    
    #Solve the od cost matrix layer. Halt the execution if there is an 
    #invalid location 
    arcpy.na.Solve(outNALayer,"HALT")
    
    #Save the solved na layer as a layer file on disk with relative paths
    arcpy.management.SaveToLayerFile(outNALayer,outLayerFile,"RELATIVE")
    
    print "Script completed successfully"
    
except Exception as e:
    # If an error occurred, print line number and error message
    import traceback, sys
    tb = sys.exc_info()[2]
    print "An error occured on line %i" % tb.tb_lineno
    print str(e)

環境

関連トピック

ライセンス情報

ArcGIS for Desktop Basic: ○
ArcGIS for Desktop Standard: ○
ArcGIS for Desktop Advanced: ○
5/10/2014