创建最近设施点分析图层 (Network Analyst)
摘要
创建最近设施点网络分析图层并设置其分析属性。最近设施点分析图层对于根据指定的网络成本确定与事件点距离最近的设施点十分有用。
 注:
注:查找最近设施点和创建最近设施点分析图层工具类似,只是目的不同而已。如果正在设置地理处理服务,请使用查找最近设施点,这将会简化设置过程。否则,请使用创建最近设施点图层。
如要使用查找最近设施点创建最近设施点地理处理服务,只需设置一个工具,然后直接将其发布为服务。与此相反,您需要使用创建最近设施点分析图层工具创建模型,将其正确连接到其他不同的工具,并发布此模型以创建最近设施点地理处理服务。要了解如何使用教程数据设置最近设施点服务,请参阅 Network Analyst 地理处理服务示例概述。要考虑的另一个选项是 ArcGIS Online 最近设施点服务。该服务与 ArcMap 中地理处理工具的运行方式类似,可通过其他应用程序进行访问,并包含世界上大部分地区的高质量道路数据。
用法
语法
| 参数 | 说明 | 数据类型 | 
| in_network_dataset | 要执行最近设施点分析的网络数据集。 | Network Dataset Layer | 
| out_network_analysis_layer | 要创建的最近设施点网络分析图层的名称。 | String | 
| impedance_attribute | 分析过程中用作阻抗的成本属性。 | String | 
| travel_from_to (可选) | 指定设施点与事件点之间的行驶方向。 
 如果网络具有单向限制和因行驶方向而异的阻抗,则使用此选项可在该网络上查找到不同的设施点。例如,从事件点行驶到设施点时,可能需要 10 分钟,而从设施点行驶到事件点时,可能因该方向上的行驶时间不同而需要 15 分钟。 消防部门通常使用 TRAVEL_FROM 设置,因为他们需要关注从消防站(设施点)行驶到紧急救援位置(事件点)所需的时间。零售商店(设施点)则更关注顾客(事件点)到达商店所需的时间;因此,商店通常使用 TRAVEL_TO 选项。 | String | 
| default_cutoff (可选) | 停止为指定事件点搜索设施点时所对应的默认阻抗值。可通过以下方式来覆盖该默认值:在使用 TRAVEL_TO 选项时,指定事件点的中断值;或者在使用 TRAVEL_FROM 选项时,指定设施点的中断值。 | Double | 
| default_number_facilities_to_find (可选) | 要按事件点查找的默认最近设施点数。可通过为事件点的 TargetFacilityCount 属性指定一个值来覆盖该默认值。 | Long | 
| accumulate_attribute_name [accumulate_attribute_name,...] (可选) | 分析过程中要累积的成本属性的列表。这些累积属性仅供参考;求解程序仅使用阻抗属性参数所指定的成本属性来计算路径。 对于每个累积的成本属性,均会向求解程序所输出的路径中添加一个 Total_[阻抗] 属性。 | String | 
| UTurn_policy (可选) | 交汇点的 U 形转弯策略。允许 U 形转弯表示求解程序可以在交汇点处转向并沿同一街道往回行驶。 考虑到交汇点表示街道交叉路口和死角,不同的车辆可以在某些交汇点转弯,而在其他交汇点则不行 - 这取决于交汇点是交叉路口还是死角。为适应此情况,U 形转弯策略参数由连接到交汇点的边数隐性指定,这称为交汇点原子价。此参数可接受的值如下所列;每个值的后面是根据交汇点原子价对其含义的描述。 
  提示: 如果您需要定义更加精确的 U 形转弯策略,可以考虑在网络成本属性中添加一个通用转弯延迟赋值器,或者如果存在的话,调整其设置,并特别注意反向转弯的配置。还要考虑设置网络位置的 CurbApproach 属性。 | String | 
| restriction_attribute_name [restriction_attribute_name,...] (可选) | 分析过程中要应用的限制属性的列表。 | String | 
| hierarchy (可选) | 
 如果未在用于执行分析的网络数据集中定义等级属性,该参数将不可用。在这种情况下,使用 "#" 作为参数值。 | Boolean | 
| hierarchy_settings (可选) | 
  法律声明: 在版本 10 之前,可使用此参数将网络数据集中建立的默认等级范围更改为其他范围以用于分析。而版本 10 中不再支持此参数,并且应将其指定为空字符串。如果您要更改等级范围以进行分析,请更新网络数据集中的默认等级范围。 | Network Analyst Hierarchy Settings | 
| output_path_shape (可选) | 为分析所输出的路径要素指定形状类型。 
 无论选择何种输出形状类型,最佳路径始终由网络阻抗(而非欧氏距离)决定。只是对路径形状的表现不同,而对网络进行的基础遍历则相同。 | String | 
| time_of_day (可选) | 指定路径应该开始或结束的时间和日期。对该值的理解取决于是将“时间用法”设置为 START_TIME 还是 END_TIME。 如果您已经选择了基于流量的阻抗属性,将会根据特定的某天某时的动态交通状况来生成解决方案。日期和时间可被指定为 5/14/2012 10:30 AM。 可使用以下日期来指定一周中的每一天,而无需使用特定的日期。 
 | Date | 
| time_of_day_usage (可选) | 指示“时间”参数值是表示路径的到达时间还是离开时间。 
 | String | 
代码实例
仅使用必需参数执行此工具。
import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.MakeClosestFacilityLayer("Transportation/Streets_ND",
                                  "ClosestFireStations","Minutes")
使用所有参数执行此工具。
import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.MakeClosestFacilityLayer("Transportation/Streets_ND",
                                  "ClosestHospitals","Minutes","TRAVEL_TO",5,3,
                                  ["Meters","Minutes"],"ALLOW_UTURNS",
                                  ["Oneway"],"USE_HIERARCHY","",
                                  "TRUE_LINES_WITH_MEASURES")
以下独立 Python 脚本演示了如何使用创建最近设施点分析图层 (MakeClosestFacilityLayer) 工具查找距商店位置最近的仓库。
# Name: MakeClosestFacilityLayer_Workflow.py
# Description: Find the closest warehouse from the store locations and save the 
#              results to a layer file on disk.
# 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/Paris.gdb"
    env.overwriteOutput = True
    
    #Set local variables
    inNetworkDataset = "Transportation/ParisMultimodal_ND"
    outNALayerName = "ClosestWarehouse"
    impedanceAttribute = "Drivetime"
    accumulateAttributeName = ["Meters"]
    inFacilities = "Analysis/Warehouses"
    inIncidents = "Analysis/Stores"
    outLayerFile = "C:/data/output" + "/" + outNALayerName + ".lyr"
    
    #Create a new closest facility analysis layer. Apart from finding the drive 
    #time to the closest warehouse, we also want to find the total distance. So
    #we will accumulate the "Meters" impedance attribute.
    outNALayer = arcpy.na.MakeClosestFacilityLayer(inNetworkDataset,outNALayerName,
                                                   impedanceAttribute,"TRAVEL_TO",
                                                   "",1, accumulateAttributeName,
                                                   "NO_UTURNS")
    
    #Get the layer object from the result object. The closest facility layer can 
    #now be referenced using the layer object.
    outNALayer = outNALayer.getOutput(0)
    
    #Get the names of all the sublayers within the closest facility layer.
    subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
    #Stores the layer names that we will use later
    facilitiesLayerName = subLayerNames["Facilities"]
    incidentsLayerName = subLayerNames["Incidents"]
    
    #Load the warehouses as Facilities using the default field mappings and 
    #search tolerance
    arcpy.na.AddLocations(outNALayer, facilitiesLayerName, inFacilities, "", "")
    
    #Load the Stores as Incidents. Map the Name property from the NOM field
    #using field mappings
    fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer, incidentsLayerName)
    fieldMappings["Name"].mappedFieldName = "NOM"
    arcpy.na.AddLocations(outNALayer, incidentsLayerName, inIncidents,
                          fieldMappings,"")
    
    #Solve the closest facility layer
    arcpy.na.Solve(outNALayer)
    
    #Save the solved closest facility 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)