RouteSolverProperties (arcpy.na)
サマリ
ルート ネットワーク解析レイヤの解析プロパティにアクセスできます。GetSolverProperties 関数を使用して、ルート ネットワーク解析レイヤから RouteSolverProperties オブジェクトを取得できます。
説明
RouteSolverProperties オブジェクトを利用すると、ルート ネットワーク解析レイヤのすべての解析プロパティに読み取りおよび書き込みアクセスが可能です。オブジェクトを使用してルート レイヤの必要な解析プロパティを変更し、対応するレイヤを再解析して適切な結果を得ることができます。新しいルート レイヤは、[ルート レイヤの作成(Make Route Layer)] ジオプロセシング ツールを使用して作成できます。新しいルート レイヤから RouteSolverProperties オブジェクトを取得すると、以降の解析で既存のレイヤを再利用できます。解析ごとに新しいレイヤを作成する必要がないため、解析速度の低下がありません。
RouteSolverProperties オブジェクトのプロパティを変更した後、対応するレイヤはすぐに他の関数やジオプロセシング ツールと一緒に使用できるようになります。レイヤを更新して、オブジェクトを通して変更された内容を反映する必要はありません。
特性
プロパティ | 説明 | データ タイプ |
accumulators (読み書き) | 解析時に累積されるネットワーク コスト属性のリストを取得または設定できます。空のリスト([])は、累積されるコスト属性がないことを表します。 | String |
attributeParameters (読み書き) | 解析で使用されるパラメータ化属性を取得または設定できます。プロパティは Python ディクショナリを返します。ディクショナリのキーは、属性名とパラメータで構成される 2 つの値の組み合わせです。ディクショナリ内の各アイテムの値はパラメータ値です。 パラメータ化されたネットワーク属性は、リアルタイムに変化する属性値をモデリングするために使用されます。たとえば、12 フィートの車高規制があるトンネルをパラメータを使用してモデリングできます。この場合、車両の高さ(フィート)をパラメータ値として指定する必要があります。車両の高さが 12 フィートを超えている場合は、この規制が true に評価され、トンネルの通行が規制されます。同様に、橋は重量規制を指定するパラメータを保持することができます。 attributeParameters プロパティを直接変更しようとしても、値は更新されません。常に新しいディクショナリ オブジェクトを使用して、プロパティの値を設定する必要があります。以下の 2 つのコード ブロックは、これらの 2 つの方法の違いを示しています。
| Dictionary |
findBestSequence (読み書き) | ストップを並べ替えて最適なルートを検索するかどうかを制御します。設定可能な値の一覧を次に示します。
| String |
impedance (読み書き) | インピーダンスとして使用するネットワーク コスト属性を取得または設定できます。このコスト属性が最小となるように最適なルートが決定されます。 | String |
orderingType (読み書き) | findBestSequence プロパティが FIND_BEST_ORDER に設定されているときに、ストップを並べ替える方法を制御します。設定可能な値の一覧を次に示します。
| String |
outputPathShape (読み書き) | 解析で出力されるルート フィーチャの形状タイプを取得または設定できます。設定可能な値の一覧を次に示します。
| String |
restrictions (読み書き) | 解析時に適用される規制属性のリストを取得または設定できます。空のリスト([])は、解析で使用される規制属性がないことを表します。 | String |
solverName (読み取り専用) |
解析プロパティ オブジェクトの取得に使用されているネットワーク解析レイヤが参照している解析の名前を返します。このプロパティは、RouteSolverProperties オブジェクトからアクセスされたときに必ず文字列「Route Solver」を返します。 | String |
timeOfDay (読み書き) | ルートの開始日時を取得または設定できます。ルートの開始時間は多くの場合、1 日の時刻に応じて変化するインピーダンス属性に基づいたルートの検索に使用されます。たとえば、ラッシュアワーの交通量を考慮したルートの検索では、開始時間として午前 9 時を使用します。値に None を指定すると、日付と時刻は使用されません。 特定の日付を使用する代わりに、次の日付を使用して曜日を指定することができます。
たとえば、ルートを火曜日の午後 5:00 に開始するように指定するには、「datetime.datetime(1900, 1, 2, 17,0,0)」という値を指定します。 | DateTime |
uTurns (読み書き) | ストップ間のネットワーク移動中に発生する可能性のあるジャンクションでの U ターンを、解析でどのように処理するかを指定するポリシーを取得または設定できます。設定可能な値の一覧を次に示します。
| String |
useHierarchy (読み書き) | 解析を実行しているときの階層属性の使用を制御します。設定可能な値の一覧を次に示します。
| String |
useTimeWindows (読み書き) | ストップでタイム ウィンドウを使用するかどうかを制御します。設定可能な値の一覧を次に示します。
| String |
コードのサンプル
次のスクリプトは、インピーダンス プロパティを TravelTime コスト属性に更新し、コスト属性の Minutes と Meters を累積属性として指定して、ルートの開始時間に現在の時間を使用する方法を示しています。San Francisco 地域のチュートリアル データセットに基づいて、新しいマップ ドキュメントに Route という名前のルート ネットワーク解析レイヤが作成されていることを想定しています。
#Get the route layer object from a layer named "Route" in the table of contents
routeLayer = arcpy.mapping.Layer("Route")
#Get the route solver properties object from the route layer
solverProps = arcpy.na.GetSolverProperties(routeLayer)
#Update the properties for the route layer using the route solver properties object
solverProps.impedance = "TravelTime"
solverProps.accumulators = ["Meters", "Minutes"]
#Only set the time component from the current date time as time of day
solverProps.timeOfDay = datetime.datetime.now().time()
次のスクリプトは、一連のストップ間の最短(距離)ルートと最速(移動時間)ルートを検索し、各ルートをジオデータベースにフィーチャクラスとして保存する方法を示しています。ルート レイヤのインスタンスを 1 つだけ作成し、RouteSolverProperties オブジェクトを使用してインピーダンス プロパティを変更し、目的の結果を得る方法を示しています。
import arcpy
#Set up the environment
arcpy.env.overwriteOutput = True
arcpy.CheckOutExtension("network")
#Set up variables
networkDataset = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
stops = "C:/Data/SanFrancisco.gdb/Analysis/Stores"
fastestRoute = "C:/Data/SanFrancisco.gdb/FastestRoute"
shortestRoute = "C:/Data/SanFrancisco.gdb/ShortestRoute"
#Make a new route layer using travel time as impedance to determine fastest route
routeLayer = arcpy.na.MakeRouteLayer(networkDataset, "StoresRoute",
"TravelTime").getOutput(0)
#Get the network analysis class names from the route layer
naClasses = arcpy.na.GetNAClassNames(routeLayer)
#Get the routes sublayer from the route layer
routesSublayer = arcpy.mapping.ListLayers(routeLayer, naClasses["Routes"])[0]
#Load stops
arcpy.na.AddLocations(routeLayer, naClasses["Stops"], stops)
#Solve the route layer
arcpy.na.Solve(routeLayer)
#Copy the route as a feature class
arcpy.management.CopyFeatures(routesSublayer, fastestRoute)
#Get the RouteSolverProperties object from the route layer to modify the
#impedance property of the route layer.
solverProps = arcpy.na.GetSolverProperties(routeLayer)
#Set the impedance property to "Meters" to determine the shortest route.
solverProps.impedance = "Meters"
#Resolve the route layer
arcpy.na.Solve(routeLayer)
#Copy the route as a feature class
arcpy.management.CopyFeatures(routesSublayer, shortestRoute)
arcpy.AddMessage("Completed")