Zusammenfassung
Erstellt einen Netzwerkanalyse-Layer für Einzugsgebiete und legt seine Analyse-Eigenschaften fest. Ein Einzugsgebiet-Analyse-Layer ist nützlich, wenn Sie die Erreichbarkeitsfläche von einem Einrichtungsstandort aus innerhalb eines gegebenen Grenzkostenwertes bestimmen möchten. Der Layer kann mit einem lokalen Netzwerk-Dataset oder mit einem online oder in einem Portal gehosteten Routing-Service erstellt werden.
Verwendung
Nachdem Sie den Analyse-Layer mit diesem Werkzeug erstellt haben, können Sie ihm Netzwerkanalyse-Objekte mithilfe des Werkzeugs Standorte hinzufügen hinzufügen, die Analyse mit dem Werkzeug Berechnen berechnen und die Ergebnisse mit dem Werkzeug In Layer-Datei speichern auf der Festplatte speichern.
Bei Verwendung dieses Werkzeugs in Geoverarbeitungsmodellen muss der Ausgabe-Netzwerkanalyse-Layer in einen Modellparameter geändert werden, wenn das Modell als Werkzeug ausgeführt wird. Andernfalls wird der Ausgabe-Layer dem Inhalt der Karte nicht hinzugefügt.
In ArcGIS Pro werden die Daten von Netzwerkanalyse-Layern in File-Geodatabase-Feature-Classes auf der Festplatte gespeichert. Bei der Erstellung eines Netzwerk-Analyse-Layers in einem Projekt werden die Daten des Layers in einem neuen Feature-Dataset in der Umgebung Aktueller Workspace erstellt. Bei der Erstellung eines Netzwerkanalyse-Layers in einem Python-Skript müssen Sie zunächst mit arcpy.env.workspace = "<path to file gdb>" explizit eine File-Geodatabase, in der die Layer-Daten gespeichert werden sollen, als Workspace-Umgebung festlegen. Bei der Erstellung des Layers wird dieser File-Geodatabase ein neues Feature-Dataset mit den entsprechenden Sublayer-Feature-Classes hinzugefügt.
Syntax
arcpy.na.MakeServiceAreaAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {travel_direction}, {cutoffs}, {time_of_day}, {time_zone}, {output_type}, {polygon_detail}, {geometry_at_overlaps}, {geometry_at_cutoffs}, {polygon_trim_distance}, {exclude_sources_from_polygon_generation}, {accumulate_attributes})
Parameter | Erklärung | Datentyp |
network_data_source | Das Netzwerk-Dataset oder der Service, für das bzw. den die Netzwerkanalyse ausgeführt wird. Verwenden Sie die Portal-URL für einen Service. | 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 werden soll. 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 den Parameter verwendet werden. | String |
travel_direction (optional) | Gibt die Fahrtrichtung zu oder von den Einrichtungen an.
Mithilfe dieses Parameters können in einem Netzwerk mit Beschränkungen für Einbahnstraßen und unterschiedlichen Impedanzen basierend auf der Fahrtrichtung unterschiedliche Einzugsgebiete ermittelt werden. Das Einzugsgebiet für einen Pizza-Lieferservice sollte beispielsweise von der Einrichtung weg erstellt werden, wobei das Einzugsgebiet für ein Krankenhaus zur Einrichtung hin erstellt werden sollte. | String |
cutoffs [cutoffs,...] (optional) | Die Ausdehnung des zu berechnenden Einzugsgebiets in den Einheiten des Impedanzattributs, das vom ausgewählten Reisemodus verwendet wird. Bei der Analyse der Fahrzeit bedeutet ein Grenzwert von 10 etwa, dass das resultierende Einzugsgebiet den Bereich darstellt, der innerhalb von 10 Minuten erreicht werden kann. Es können mehrere Grenzwerte festgelegt werden, um konzentrische Einzugsgebiete zu erstellen. Wenn Sie zum Beispiel 2-, 3- und 5-Minuten-Einzugsgebiete für dieselbe Einrichtung ermitteln möchten, geben Sie als Werte für diesen Parameter 2, 3 und 5 an. Dieser Standardgrenzwert kann pro Einrichtung überschrieben werden, indem einzelne Unterbrechungswerte im Einrichtungs-Sublayer festgelegt werden. | Double |
time_of_day (optional) | Die Abfahrtszeit von oder die Ankunftszeit bei den Einrichtungen des Einzugsgebiets-Layers. Ob der Wert als Abfahrts- oder Ankunftszeit interpretiert wird, hängt davon ab, ob die Fahrt zu der Einrichtung hin oder von der Einrichtung weg führt.
Der Parameter time_of_day eignet sich am Besten zum Suchen der Straßen, die anhand eines Reisemodus erreicht werden können, der ein Impedanzattribut verwendet, das sich im Laufe des Tages ändert, z. B. ein Attribut, das auf dynamischen Verkehrsbedingungen beruht. Durch das Berechnen der gleichen Analyse mit unterschiedlichen Werten für time_of_day können Sie ermitteln, wie sich die Erreichbarkeit einer Einrichtung über die Zeit verändert. Beispiel: Das Einzugsgebiet von 5 Minuten um eine Feuerwache ist in den frühen Morgenstunden relativ groß, wird während der morgendlichen Hauptverkehrszeit kleiner, nimmt dann am späteren Vormittag wieder zu usw. Sie können ein Datum und eine Uhrzeit als 21.10.2015 10:30 angeben. Statt ein bestimmtes Datum zu verwenden, kann ein Wochentag mithilfe der folgenden Datumsangaben angegeben werden:
| Date |
time_zone (optional) | Gibt die Zeitzone des Parameters "Zeitpunkt" an.
| String |
output_type (optional) | Gibt den Ausgabetyp an, der generiert werden soll. Die Einzugsgebiet-Ausgabe kann aus Linien-Features bestehen, die die erreichbaren Straßen vor der Erweiterung der Grenzwerte darstellen, oder die Polygon-Features, die diese Linien enthalten (das erreichbare Gebiet).
Die Ausgabetypen Linien und Polygone und Linien sind nicht verfügbar, wenn es sich bei der Netzwerkdatenquelle um einen Service handelt, der auf einer Portal for ArcGIS-Version beruht, in der die Erstellung von Linien nicht unterstützt wird. | String |
polygon_detail (optional) | Gibt die Detaillierungsebene der Ausgabe-Polygone an.
Wenn die Analyse ein Stadtgebiet mit einem gitterähnlichen Straßennetz umfasst, ist der Unterschied zwischen generalisierten und standardmäßigen Polygonen minimal. Bei Gebirgs- und Landstraßen zeigen standardmäßige und detaillierte Polygone jedoch weitaus genauere Ergebnisse als generalisierte Polygone. | String |
geometry_at_overlaps (optional) | Gibt das Verhalten der Einzugsgebiet-Ausgabe von mehreren Einrichtungen in Relation zu einander an.
| String |
geometry_at_cutoffs (optional) | Gibt das Verhalten der Einzugsgebiet-Ausgabe für eine einzelne Einrichtung an, wenn mehrere Grenzwerte angegeben sind. Dieser Parameter gilt nicht für die Linienausgabe.
| String |
polygon_trim_distance (optional) | Die Kürzungsentfernung des Einzugsgebiet-Polygons. Die Entfernung für "Polygon kürzen" bezieht sich auf die Entfernung zwischen dem Einzugsgebiet-Polygon und der Straße, wenn keine anderen erreichbaren Straßen in der Nähe liegen, ähnlich einer Linienpuffergröße. Dies ist nützlich, wenn die Feature-Dichte im Netzwerk gering ist und das Einzugsgebiet keine große Flächen ohne Features abdecken soll. Dieser Parameter umfasst einen Wert und die Einheiten für die Entfernung. Der Standardwert beträgt 100 Meter. | Linear Unit |
exclude_sources_from_polygon_generation [exclude_sources_from_polygon_generation,...] (optional) | Die Kantenquellen des Netzwerk-Datasets, die beim Generieren von Einzugsgebiet-Polygonen ausgeschlossen werden. Danach werden keine Polygone um die ausgeschlossenen Quellen generiert, selbst wenn sie bei der Analyse durchlaufen werden. Das Ausschließen einer Netzwerkquelle aus Einzugsgebiet-Polygonen bedeutet nicht, dass diese Quellen nicht durchlaufen werden. Durch das Ausschließen von Quellen aus Einzugsgebiet-Polygonen wird nur die Polygon-Form der Einzugsgebiete beeinflusst. Um das Durchlaufen einer bestimmten Netzwerkquelle zu verhindern, müssen Sie bei der Definition des Netzwerk-Datasets eine entsprechende Beschränkung anwenden. Dies ist nützlich, wenn Sie einige Netzwerkquellen haben, die Sie nicht in die Polygonerstellung einbinden möchten, da auf diese Weise weniger genaue Polygone erstellt werden oder diese Quellen für die Einzugsgebiet-Analyse belanglos sind. Wenn Sie beispielsweise in einem multimodalen Netzwerk mit Straßen- und U-Bahn-Strecken ein Laufzeit-Einzugsgebiet erstellen, sollten Sie die U-Bahn-Strecken aus der Polygonerstellung ausschließen. Reisende können die U-Bahn-Strecke zwar verwenden, sie können entlang einer U-Bahn-Strecke jedoch nicht auf einer Teilstrecke anhalten und ein in der Nähe gelegenes Gebäude betreten. Stattdessen müssen sie die volle Länge bis zu einer U-Bahn-Station fahren, dort die U-Bahn verlassen und dann über die Straßen zu dem Gebäude gehen. Es wäre ungenau, ein Polygon-Feature um eine U-Bahn-Strecke zu generieren. Dieser Parameter ist in folgenden Fällen nicht verfügbar: Die Ausgabegeometrietypen enthalten keine Polygone, das Netzwerk enthält weniger als zwei Kantenquellen, oder bei der Netzwerkdatenquelle handelt es sich um einen ArcGIS Online-Service bzw. um einen Service, der auf einer Portal for ArcGIS-Version beruht, welche den Ausschluss von Quellen nicht unterstützt. | 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_[Impedance]-Eigenschaft hinzugefügt. Dieser Parameter ist nicht verfügbar, wenn der Analyse-Layer nicht zur Ausgabe von Linien konfiguriert ist, wenn es sich bei der Netzwerkdatenquelle um einen ArcGIS Online-Service handelt bzw. um einen Service handelt, der auf einer Portal for ArcGIS-Version beruht, in der eine Akkumulation nicht unterstützt wird. | String |
Abgeleitete Ausgabe
Name | Erklärung | Datentyp |
out_network_analysis_layer | Der neu erstellte Netzwerkanalyse-Layer. | Network Analyst-Layer |
Codebeispiel
Ausführen des Werkzeugs, wenn nur die erforderlichen Parameter verwendet werden.
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeServiceAreaAnalysisLayer(network, "FireStationCoverage")
Führen Sie das Werkzeug unter Verwendung aller Parameter aus.
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeServiceAreaAnalysisLayer(network, "WarehouseCoverage",
"Driving Time", "FROM_FACILITIES", [5, 10, 15],
"1/1/1900 9:00 AM", "UTC", "POLYGONS",
"STANDARD", "DISSOLVE", "RINGS", "100 meters",
["Metro_Lines", "Transfer_Stations",
"Transfer_Street_Station"], ["Meters",
"DriveTime"])
Das folgende eigenständige Python-Skript veranschaulicht, wie Sie mit dem Werkzeug MakeServiceAreaAnalysisLayer Einzugsgebiete von 1, 2 und 3 Minuten um eine Feuerwache generieren.
# Name: MakeServiceAreaAnalysisLayer_Workflow.py
# Description: Generate 1-,2-,3- minute service areas around fire stations and
# save the results to a layer file on disk. The service area
# polygons can be used to visualize the areas that do not have
# adequate coverage from the fire stations
# Requirements: Network Analyst Extension
#Import system modules
import arcpy
from arcpy import env
import os
try:
#Check out Network Analyst license if available. Fail if the Network Analyst license is not available.
if arcpy.CheckExtension("network") == "Available":
arcpy.CheckOutExtension("network")
else:
raise arcpy.ExecuteError("Network Analyst Extension license is not available.")
#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/SanFrancisco.gdb"
network = os.path.join(input_gdb, "Transportation", "Streets_ND")
layer_name = "FireStationCoverage"
travel_mode = "Driving Time"
facilities = os.path.join(input_gdb, "Analysis", "FireStations")
output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")
#Create a new service area layer. We wish to generate the service area
#polygons as rings, so that we can easily visualize the coverage for any
#given location. We also want overlapping polygons so we can determine the
#number of fire stations that cover a given location. We will specify these
#options while creating the new service area layer.
result_object = arcpy.na.MakeServiceAreaAnalysisLayer(network, layer_name,
travel_mode, "FROM_FACILITIES", [1, 2, 3],
polygon_detail="HIGH",
geometry_at_overlaps="OVERLAP",
geometry_at_cutoffs="RINGS")
#Get the layer object from the result object. The service layer can now be
#referenced using the layer object.
layer_object = result_object.getOutput(0)
#Get the names of all the sublayers within the service area layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
#Stores the layer names that we will use later
facilities_layer_name = sublayer_names["Facilities"]
#Load the fire stations as facilities using default field mappings and
#default search tolerance
arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities, "",
"")
#Solve the service area layer
arcpy.na.Solve(layer_object)
#Save the solved service area 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))
Dieses Beispiel veranschaulicht das Erstellen von Einzugsgebieten um Einrichtungen für mehrere Uhrzeiten sowie zum Übertragen von Feldern aus den Eingabe-Features in die Ausgabe-Features und Anhängen von Ausgabe-Polygonen an eine vorhandene Feature-Class.
Ältere Versionen:
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 mit dem Namen des Sublayers als Platzhalter.
# Name: MakeServiceAreaAnalysisLayer_Workflow2.py
# Description: Generate 3-minute service areas around fire stations at several
# times of day to compare coverage differences due to varying
# traffic conditions. Save the results to a feature class on disk.
# Requirements: Network Analyst Extension
# Import system modules
import arcpy
from arcpy import env
import os, datetime
try:
# Check out Network Analyst license if available. Fail if the Network Analyst license is not available.
if arcpy.CheckExtension("network") == "Available":
arcpy.CheckOutExtension("network")
else:
raise arcpy.ExecuteError("Network Analyst Extension license is not available.")
# 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/SanFrancisco.gdb"
network = os.path.join(input_gdb, "Transportation", "Streets_ND")
layer_name = "FireStationCoverage"
out_featureclass = os.path.join(output_dir, "Output.gdb",
"FireStationCoverage")
travel_mode = "Driving Time"
facilities = os.path.join(input_gdb, "Analysis", "FireStations")
times_of_day = [datetime.datetime(2014, 9, 25, 7, 0, 0),
datetime.datetime(2014, 9, 25, 12, 30, 0),
datetime.datetime(2014, 9, 25, 17, 30, 0),
datetime.datetime(2014, 9, 25, 21, 0, 0)]
# Create a new service area layer.
result_object = arcpy.na.MakeServiceAreaAnalysisLayer(network, layer_name,
travel_mode, "FROM_FACILITIES",
[3], polygon_detail="HIGH",
geometry_at_overlaps="OVERLAP")
# Get the layer object from the result object. The service area layer can
# now be referenced using the layer object.
layer_object = result_object.getOutput(0)
# Get the names of all the sublayers within the service area layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
# Stores the layer names that we will use later
facilities_layer_name = sublayer_names["Facilities"]
polygons_layer_name = sublayer_names["SAPolygons"]
# The input data has a field for FireStationID that we want to transfer to
# our analysis layer. Add the field, and then use field mapping to transfer
# the values.
arcpy.na.AddFieldToAnalysisLayer(layer_object, facilities_layer_name,
"FireStationID", "TEXT")
field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
facilities_layer_name)
field_mappings["FireStationID"].mappedFieldName = "FireStationID"
# Load the fire stations as facilities.
arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities,
field_mappings, "")
# Add fields to the output Polygons sublayer for later use.
arcpy.na.AddFieldToAnalysisLayer(layer_object, polygons_layer_name,
"FireStationID", "TEXT")
arcpy.na.AddFieldToAnalysisLayer(layer_object, polygons_layer_name,
"TimeOfDay", "TEXT")
# Get sublayers to work with later
facilities_sublayer = arcpy.na.GetNASublayer(layer_object, "Facilities")
polygons_sublayer = arcpy.na.GetNASublayer(layer_object, "SAPolygons")
# Get the Service Area Layer's solver properties. This can be used to
# set individual properties later without re-creating the layer.
solver_properties = arcpy.na.GetSolverProperties(layer_object)
# Solve the Service Area for each time of day in the time list
for t in times_of_day:
print("Calculating service area for time of day: ", t)
# Use the solver properties to set the time of day for the solve
solver_properties.timeOfDay = t
# Solve the service area layer
arcpy.na.Solve(layer_object)
# Transfer the FireStationID field from the input Facilities to the
# output Polygons
arcpy.management.AddJoin(polygons_sublayer, "FacilityID",
facilities_sublayer, "ObjectID")
# The joined fields are qualified by the feature class name of the joined
# table, so determine the feature class names
field_qualifier_pol = os.path.basename(polygons_sublayer.dataSource)
target_field_name = "%s.FireStationID" % field_qualifier_pol
field_qualifier_fac = os.path.basename(facilities_sublayer.dataSource)
expression = "!%s.FireStationID!" % field_qualifier_fac
arcpy.management.CalculateField(polygons_sublayer, target_field_name,
expression, "PYTHON")
arcpy.management.RemoveJoin(polygons_sublayer)
# Populate the TimeOfDay field in the output feature class
expression = '"' + str(t) + '"'
arcpy.management.CalculateField(polygons_sublayer, "TimeOfDay",
expression, "PYTHON")
# Append the polygons to the output feature class. If this was the first
# solve, create the feature class.
if not arcpy.Exists(out_featureclass):
arcpy.management.CopyFeatures(polygons_sublayer, out_featureclass)
else:
arcpy.management.Append(polygons_sublayer, out_featureclass)
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))
Umgebungen
Lizenzinformationen
- Basic: Ja
- Standard: Ja
- Advanced: Ja