import os
import arcpy
from arcpy import env
try:
if arcpy.CheckExtension("network") == "Available":
arcpy.CheckOutExtension("network")
else:
raise arcpy.ExecuteError("Network Analyst Extension license is not available.")
output_dir = "C:/Data"
env.workspace = os.path.join(output_dir, "Output.gdb")
env.overwriteOutput = True
env.qualifiedFieldNames = False
input_gdb = "C:/Data/SanFrancisco.gdb"
output_gdb = "C:/Data/Output.gdb"
network = os.path.join(input_gdb, "Transportation", "Streets_ND")
layer_name = "EmergencyRoutes"
travel_mode = "Driving Time"
facilities = os.path.join(input_gdb, "Analysis", "FireStations")
incidents = os.path.join(input_gdb, "Analysis", "TractCentroids")
edge_frequency = os.path.join(output_gdb, "EdgeFrequency")
critical_streets = os.path.join(output_gdb, "CriticalStreets")
result_object = arcpy.na.MakeClosestFacilityAnalysisLayer(
network, layer_name, travel_mode, "FROM_FACILITIES"
)
layer_object = result_object.getOutput(0)
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
facilities_layer_name = sublayer_names["Facilities"]
incidents_layer_name = sublayer_names["Incidents"]
arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities)
field_mappings = arcpy.na.NAClassFieldMappings(
layer_object, incidents_layer_name
)
field_mappings['Name'].mappedFieldName = "ID"
arcpy.na.AddLocations(
layer_object, incidents_layer_name, incidents, field_mappings
)
traversed_edges = arcpy.na.CopyTraversedSourceFeatures(
layer_object, output_gdb
).getOutput(0)
arcpy.analysis.Frequency(
traversed_edges, edge_frequency, ["SourceOID", "SourceName"]
)
network_desc = arcpy.Describe(network)
edge_sources = network_desc.edgeSources
for es in edge_sources:
if es.name.lower() == "streets":
streets_source = os.path.join(os.path.dirname(network), es.name)
break
streets_layer = arcpy.management.MakeFeatureLayer(
streets_source, "StreetsLayer"
)
arcpy.management.SelectLayerByLocation(
streets_layer, "SHARE_A_LINE_SEGMENT_WITH", traversed_edges
)
arcpy.management.JoinField(
streets_layer, "ObjectID", edge_frequency, "SourceOID", "FREQUENCY"
)
arcpy.management.CopyFeatures(streets_layer, critical_streets)
arcpy.management.DeleteField(streets_layer, "FREQUENCY")
print("Script completed successfully")
except Exception as e:
import traceback, sys
tb = sys.exc_info()[2]
print("An error occurred on line %i" % tb.tb_lineno)
print(str(e))