arcpy.na.MakeODCostMatrixAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {cutoff}, {number_of_destinations_to_find}, {time_of_day}, {time_zone}, {line_shape}, {accumulate_attributes}, {ignore_invalid_locations}, {analysis_geodatabase}, {analysis_feature_dataset_name})
|
Name
|
Erläuterung
|
Datentyp
|
|
network_data_source
|
Das Netzwerk-Dataset oder der Service, für das bzw. den die Netzwerkanalyse ausgeführt wird.
Der Parameter kann anhand einer der folgenden Informationen angegeben werden:
Der Katalogpfad zum Netzwerk-Dataset
Ein Netzwerk-Dataset-Layer-Objekt
Der Name des Layers des Netzwerk-Datasets als Zeichenfolge
Die URL für ArcGIS Online oder ein ArcGIS Enterprise-Portal, das mit Standard-Routing-Services konfiguriert ist
Um eine Portal-URL zu verwenden, müssen Sie mit einem Konto, das über Routing-Berechtigungen verfügt, beim Portal angemeldet sein.
Weitere Informationen zur Anmeldung bei einem Portal in Python
Weitere Informationen zur Netzwerkanalyse mit Routing-Services
Wenn Sie ArcGIS Online oder ein ArcGIS Enterprise-Portal verwenden, dessen Routing-Services mit ArcGIS Online als Eingabe-Netzwerk konfiguriert sind, verbraucht die Berechnung der Analyse Credits und unterliegt bestimmten Beschränkungen, wie z. B. der Anzahl der zulässigen Eingaben.
Weitere Informationen zum Credit-Verbrauch und zu den Analysebeschränkungen für die Netzwerkanalyse
|
Network Dataset Layer; String
|
|
layer_name
(Optional)
|
Der Name des zu erstellenden Netzwerkanalyse-Layers.
|
String
|
|
travel_mode
(Optional)
|
Der Name des Reisemodus, der in der Analyse verwendet wird. Der Reisemodus stellt eine Sammlung von Netzwerkeinstellungen (z. B. Reisebeschränkungen und Wendenregeln) dar, mit denen festgelegt wird, wie ein Fußgänger, Auto, Lkw oder anderes Transportmittel sich durch das Netzwerk bewegt. Reisemodi werden für die Netzwerkdatenquelle definiert.
Ein arcpy.na.TravelMode-Objekt und eine Zeichenfolge mit der gültigen JSON-Repräsentation eines Reisemodus können ebenfalls als Eingabe für diesen Parameter verwendet werden.
|
String
|
|
cutoff
(Optional)
|
Der Impedanzwert, an dem die Suche nach Zielen für einen angegebenen Startpunkt beendet wird. Dieser Wert wird in den Einheiten des Impedanzattributs angegeben, das vom ausgewählten Reisemodus verwendet wird. Es werden keine Ziele gefunden, die über diesem Grenzwert liegen. Dieser Grenzwert kann pro Startpunkt überschrieben werden, indem einzelne Grenzwerte im Startpunkt-Sublayer festgelegt werden. Für die Analyse wird standardmäßig kein Grenzwert verwendet.
|
Double
|
|
number_of_destinations_to_find
(Optional)
|
Die Anzahl von Zielen, die pro Ursprung gesucht werden sollen. Der Standard kann überschrieben werden, indem ein einzelner Wert für die Eigenschaft TargetDestinationCount im Startpunkte-Sublayer angegeben wird. Standardmäßig werden keine Grenzwerte verwendet, sodass alle Ziele gefunden werden.
|
Long
|
|
time_of_day
(Optional)
|
Die Abfahrtszeit vom Startpunkt.
Wenn Sie ein verkehrsbasiertes Impedanzattribut ausgewählt haben, wird die Lösung auf Grundlage des dynamischen Verkehrsaufkommens zu der hier angegebenen Uhrzeit generiert. Sie können ein Datum und eine Uhrzeit als 5/14/2012 10:30 AM angeben.
Konfigurieren Sie die Analyse so, dass anstelle eines bestimmten, statischen Datums eines der folgenden speziellen Daten verwendet wird, um einen Wochentag oder das aktuelle Datum zu modellieren:
Today—30.12.1899
Sunday—31.12.1899
Monday—1.1.1900
Tuesday—2.1.1900
Wednesday—3.1.1900
Thursday—4.1.1900
Friday—5.1.1900
Saturday—6.1.1900
Weitere Informationen zur Verwendung und Interpretation von Daten und Zeiten in einer Netzwerkanalyse
|
Date
|
|
time_zone
(Optional)
|
Die Zeitzone des Parameters Zeitpunkt.
LOCAL_TIME_AT_LOCATIONS—Der Parameter Zeitpunkt bezieht sich auf die Zeitzone, in der sich die Startpunkte befinden. Dies ist die Standardeinstellung.
UTC—Der Parameter Zeitpunkt bezieht sich auf die koordinierte Weltzeit (UTC). Wählen Sie diese Option aus, wenn Sie die Start-Ziel-Kostenmatrix für eine bestimmte Zeit (z. B. jetzt) erstellen möchten, sich jedoch nicht sicher sind, in welcher Zeitzone sich die Startpunkte befinden.
|
String
|
|
line_shape
(Optional)
|
Gibt das Ausgabe-Linien-Shape an.
Unabhängig vom angegebenen Ausgabe-Shape-Typ wird die optimale Route immer durch die Netzwerkimpedanz und nicht durch die euklidische Entfernung bestimmt. Dies bedeutet, dass sich nur die Routen-Shapes und nicht der zugrunde liegende Durchlauf des Netzwerks unterscheiden.
NO_LINES—Für das Ausgabe-Start-Ziel-Routen-Paar wird kein Shape erstellt. Dies ist nützlich, wenn Sie über zahlreiche Startpunkte und Ziele verfügen und nur an den Impedanzkosten in der Start-Ziel-Kostenmatrixtabelle, nicht aber an der Visualisierung der Start-Ziel-Kostenmatrix auf einer Karte interessiert sind.
STRAIGHT_LINES—Das Ausgaberouten-Shape ist eine einzelne gerade Linie zwischen jedem einzelnen Start-Ziel-Paar. Dies ist die Standardeinstellung.
|
String
|
|
accumulate_attributes
[accumulate_attributes,...]
(Optional)
|
Eine Liste mit Kostenattributen, die während der Analyse akkumuliert werden sollen. Diese akkumulierten Attribute dienen nur Referenzzwecken. Vom Solver wird bei der Berechnung der Analyse nur das Kostenattribut verwendet, das im festgelegten Reisemodus angegeben ist.
Für jedes akkumulierte Kostenattribut wird den Netzwerkanalyse-Ausgabe-Features eine Total_-[Impedanz]-Eigenschaft hinzugefügt.
Dieser Parameter ist nicht verfügbar, wenn es sich bei der Netzwerkdatenquelle um einen ArcGIS Online-Service handelt bzw. um einen Service, der auf einer Portal for ArcGIS-Version beruht, in der eine Akkumulation nicht unterstützt wird.
|
String
|
|
ignore_invalid_locations
(Optional)
|
Gibt an, ob ungültige Eingabestandorte ignoriert werden. In der Regel sind Standorte ungültig, wenn sie nicht im Netzwerk verortet werden können. Werden ungültige Standorte ignoriert, überspringt sie der Solver und führt die Analyse mit den verbleibenden Standorten durch.
SKIP—Ungültige Eingabepositionen werden ignoriert, sodass nur gültige Positionen verwendet werden. Dies ist die Standardeinstellung.
HALT—Alle Eingabepositionen werden verwendet. Bei ungültigen Eingabepositionen schlägt die Analyse fehl.
|
Boolean
|
|
analysis_geodatabase
(Optional)
|
Der Workspace der File-Geodatabase, in dem die Sublayer-Daten des neuen Netzwerkanalyse-Layers gespeichert werden. Wenn dieser Parameter nicht angegeben wird, werden die Daten des Sublayers in der Geoverarbeitungsumgebung Aktueller Workspace erstellt, wobei es sich in der Regel um die Projekt-Geodatabase handelt.
Weitere Informationen zur Quelle der Analysedaten eines Netzwerkanalyse-Layers
|
Workspace
|
|
analysis_feature_dataset_name
(Optional)
|
Der Name für das neue Feature-Dataset, das das Werkzeug in der Analyse-Geodatabase erstellt, um die Sublayer-Daten des Netzwerkanalyse-Layers zu speichern. Sofern nicht anders angegeben, wird das Feature-Dataset mit einem zufällig generierten, eindeutigen Namen erstellt.
Weitere Informationen zur Quelle der Analysedaten eines Netzwerkanalyse-Layers
|
String
|
Abgeleitete Ausgabe
|
Name
|
Erläuterung
|
Datentyp
|
|
out_network_analysis_layer
|
Der neu erstellte Netzwerkanalyse-Layer.
|
Network Analyst Layer
|
Codebeispiel
MakeODCostMatrixAnalysisLayer: Beispiel 1 (Python-Fenster)
Ausführen des Werkzeugs, wenn nur die erforderlichen Parameter verwendet werden.
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeODCostMatrixAnalysisLayer(network, "DrivetimeCosts")
MakeODCostMatrixAnalysisLayer: Beispiel 2 (Python-Fenster)
Führen Sie das Werkzeug unter Verwendung aller Parameter aus.
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeODCostMatrixAnalysisLayer(network, "DrivetimeCosts",
"Driving Time", 10, 20, "1/1/1900 9:00 AM",
"UTC", "NO_LINES", ["Meters", "TravelTime"])
MakeODCostMatrixAnalysisLayer: Beispiel 3 (Workflow)
Im folgenden eigenständigen Python-Skript wird veranschaulicht, wie die Funktion MakeODCostMatrixAnalysisLayer verwendet werden kann, um eine Start-Ziel-Kostenmatrix für die Warenlieferung von den Lagern an die Geschäfte zu erstellen, die innerhalb einer Fahrzeit von 10 Minuten erreichbar sind.
# Name: MakeODCostMatrixAnalysisLayer_Workflow.py
# Description: Create an origin-destination cost matrix for delivery of goods
# from the warehouses to all stores within a 10-minute drive time
# and save the results to a layer file on disk. Such a matrix can
# be used as an input for logistics, delivery and routing analyses.
# Requirements: Network Analyst extension
#Import system modules
import arcpy
from arcpy import env
import os
try:
#Set environment settings
output_dir = "C:/Data"
#The NA layer's data will be saved to the workspace specified here
env.workspace = os.path.join(output_dir, "Output.gdb")
env.overwriteOutput = True
#Set local variables
input_gdb = "C:/Data/Paris.gdb"
network = os.path.join(input_gdb, "Transportation", "ParisMultimodal_ND")
layer_name = "WarehouseToStoreDrivetimeMatrix"
travel_mode = "Driving Time"
search_tolerance = "1000 Meters"
origins = os.path.join(input_gdb, "Analysis", "Warehouses")
destinations = os.path.join(input_gdb, "Analysis", "Stores")
output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")
#Create a new OD Cost matrix layer. We wish to find all stores within a 10
#minute cutoff.
result_object = arcpy.na.MakeODCostMatrixAnalysisLayer(network, layer_name,
travel_mode, 10)
#Get the layer object from the result object. The OD cost matrix layer can
#now be referenced using the layer object.
layer_object = result_object.getOutput(0)
#Get the names of all the sublayers within the OD cost matrix layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
#Stores the layer names that we will use later
origins_layer_name = sublayer_names["Origins"]
destinations_layer_name = sublayer_names["Destinations"]
#Load the warehouse locations as origins using a default field mappings and
#a search tolerance of 1000 Meters.
arcpy.na.AddLocations(layer_object, origins_layer_name, origins, "",
search_tolerance)
#Load the store locations as destinations and map the NOM field from stores
#features as Name property using field mappings
field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
destinations_layer_name)
field_mappings["Name"].mappedFieldName = "NOM"
arcpy.na.AddLocations(layer_object, destinations_layer_name, destinations,
field_mappings, search_tolerance)
#Solve the OD cost matrix layer
arcpy.na.Solve(layer_object)
#Save the solved OD cost matrix layer as a layer file on disk
layer_object.saveACopy(output_layer_file)
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 occurred on line %i" % tb.tb_lineno)
print(str(e))
MakeODCostMatrixAnalysisLayer: Beispiel 4 (Workflow)
Mit dem folgenden eigenständigen Python-Skript wird veranschaulicht, wie auf Sublayer zugegriffen, Eingabe- und Ausgabe-Layer verbunden und Feldwerte aus Eingabe-Startpunkten und -Zielen auf den Ausgabe-Linien-Layer übertragen werden.
Legacy:
Mit der Funktion GetNASublayer kann nach den Sublayern eines Netzwerkanalyse-Layers gesucht werden. Sie wurde in ArcGIS Pro 2.7 eingeführt. In älteren Softwareversionen bestand die beste Möglichkeit, ein Sublayer-Objekt eines Netzwerkanalyse-Layers abzurufen, in der Verwendung der listLayers-Methode des Layer-Objekts der Netzwerkanalyse, wobei der Name des Sublayers als Platzhalter verwendet wurde.
# Name: MakeODCostMatrixAnalysisLayer_Workflow2.py
# Description: Find the travel time to the closest hospital from each census
# tract and join the travel time and hospital name to the input
# tracts.
# Requirements: Network Analyst extension
# Import system modules
import datetime
import os
import arcpy
try:
# Set environment settings
output_dir = "C:/Data"
#The NA layer's data will be saved to the workspace specified here
arcpy.env.workspace = os.path.join(output_dir, "Output.gdb")
arcpy.env.overwriteOutput = True
# Set inputs and outputs
input_gdb = "C:/Data/SanFrancisco.gdb"
network = os.path.join(input_gdb, "Transportation", "Streets_ND")
origins = os.path.join(input_gdb, "Analysis", "TractCentroids")
destinations = os.path.join(input_gdb, "Analysis", "Hospitals")
output_features = "TractCentroids_withOD"
# Define some OD cost matrix analysis settings
layer_name = "HospitalsOD"
# User settings for driving
travel_mode = "Driving Time"
# Calculate the total distance, even though the analysis is optimizing time
accumulate_attributes = ["Meters"]
# Find only the closest hospital
num_hospitals_to_find = 1
# Set the time of day for the analysis to 6PM on a generic Monday.
start_time = datetime.datetime(1900, 1, 1, 18, 0, 0)
# Don't output line shapes (output Lines will still list travel times)
out_lines = "NO_LINES"
# Create a new OD cost matrix layer.
result_object = arcpy.na.MakeODCostMatrixAnalysisLayer(network, layer_name,
travel_mode,
number_of_destinations_to_find=num_hospitals_to_find,
time_of_day=start_time, line_shape=out_lines,
accumulate_attributes=accumulate_attributes)
# Get the layer object from the result object. The OD layer can
# now be referenced using the layer object.
layer_object = result_object.getOutput(0)
# Get the names of all the sublayers within the OD layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
# Store the layer names for later use
origins_layer_name = sublayer_names["Origins"]
destinations_layer_name = sublayer_names["Destinations"]
# The input census tract data has a unique ID field that can be transferred
# to the analysis layer. Add the field, and then use field mapping to
# transfer the values.
arcpy.na.AddFieldToAnalysisLayer(layer_object, origins_layer_name,
"Tract_ID", "TEXT")
field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
origins_layer_name)
field_mappings["Tract_ID"].mappedFieldName = "ID"
# Load the census tracts as origins.
arcpy.na.AddLocations(layer_object, origins_layer_name, origins,
field_mappings, "")
# Map the input hospital NAME field to a new Hospital_Name field in
# Destinations
arcpy.na.AddFieldToAnalysisLayer(layer_object, destinations_layer_name,
"Hospital_Name", "TEXT")
field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
destinations_layer_name)
field_mappings["Hospital_Name"].mappedFieldName = "NAME"
# Load the hospitals as desinations.
arcpy.na.AddLocations(layer_object, destinations_layer_name, destinations,
field_mappings, "")
# Solve the OD layer
arcpy.na.Solve(layer_object)
# Get sublayers
origins_sublayer = arcpy.na.GetNASublayer(layer_object, "Origins")
destinations_sublayer = arcpy.na.GetNASublayer(layer_object, "Destinations")
lines_sublayer = arcpy.na.GetNASublayer(layer_object, "ODLines")
# Use the JoinField tool to transfer OD Cost Matrix information to the
# output feature class
# Transfer the tract ID from the input Origins to the output Lines
arcpy.management.JoinField(lines_sublayer, "OriginID",
origins_sublayer, "ObjectID", "Tract_ID")
# Transfer the hospital name from the input Destinations to the output Lines
arcpy.management.JoinField(lines_sublayer, "DestinationID",
destinations_sublayer, "ObjectID", "Hospital_Name")
# Transfer fields of interest (hospital name, impedance attribute, and other
# accumulated costs) from the output Lines to a copy of the input census
# tracts feature class using the Tract_ID field
# Determine the impedance attribute
solver_props = arcpy.na.GetSolverProperties(layer_object)
impedance = solver_props.impedance
output_impedance_fieldname = "Total_" + impedance
fields_to_transfer = ["Hospital_Name", output_impedance_fieldname]
for field in accumulate_attributes:
fields_to_transfer.append("Total_" + field)
arcpy.management.CopyFeatures(origins, output_features)
arcpy.management.JoinField(output_features, "ID",
lines_sublayer, "Tract_ID", fields_to_transfer)
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 occurred on line %i" % tb.tb_lineno)
print(str(e))
MakeODCostMatrixAnalysisLayer: Beispiel 5 (eigenständiges Skript)
Mit dem folgenden eigenständigen Python-Skript wird veranschaulicht, wie eine geänderte Version eines Reisemodus aus dem Netzwerk-Dataset erstellt wird und wie dieser Reisemodus beim Erstellen eines neuen Layers mit Start-Ziel-Kostenmatrix verwendet wird.
import json
network = r"C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
# Get all travel modes from the network dataset
travel_modes = arcpy.na.GetTravelModes(network)
# Get the Driving Distance travel mode
dd_travel_mode = travel_modes["Driving Distance"]
# Make a json representation of the travel mode
travel_mode_json = json.loads(str(dd_travel_mode))
# Modify the userHierarchy property to turn hierarchy off, and update the name
travel_mode_json["useHierarchy"] = False
travel_mode_json["name"] = "Driving Distance without Hierarchy"
# Create a new travel mode object from the modified json
new_travel_mode_object = arcpy.na.TravelMode(json.dumps(travel_mode_json))
# Use the new travel mode object to MakeODCostMatrixAnalysisLayer
# We could also pass in the json directly without first converting it to an object
arcpy.na.MakeODCostMatrixAnalysisLayer(network, "OD Without Hierarchy", new_travel_mode_object)