描述
创建从多个起始点到多个目的地的起点-目的地 (OD) 成本矩阵。OD 成本矩阵是一个包含从每个起点到每个目的地的行驶时间和行驶距离的表文件。此外,还可根据从每个起点行进到每个目的地所需的最短时间或距离,对每个起点所连接的目的地按升序排序。在街道网络中为每对起点-目的地找出最佳路径,并将行驶时间和行驶距离存储为输出线的属性。虽然出于显示性能方面的考虑,这些线本身都是直的,但是它们始终存储的是街道网络中的行驶时间和行驶距离,而不是直线距离。
使用方法
在网络中查找和测量从多个起点到多个目的地的最小成本路径。
此工具对话框将各种可选参数分组为以下六个类别,以便您能更轻松地对其进行管理:
- 高级分析
- 障碍
- 自定义出行模式
- 网络数据集
- 网络位置
- 输出
- 服务能力
语法
arcpy.na.GenerateOriginDestinationCostMatrix(Origins, Destinations, Network_Dataset, Output_Geodatabase, Output_Origin_Destination_Lines_Name, Output_Origins_Name, Output_Destinations_Name, {Travel_Mode}, {Time_Units}, {Distance_Units}, {Number_of_Destinations_to_Find}, {Cutoff}, {Time_of_Day}, {Time_Zone_for_Time_of_Day}, {Point_Barriers}, {Line_Barriers}, {Polygon_Barriers}, {Impedance_Attribute}, {Impedance_Attribute_Units}, {Time_Attribute}, {Time_Attribute_Units}, {Distance_Attribute}, {Distance_Attribute_Units}, {UTurn_Policy}, {Use_Hierarchy_in_Analysis}, {Restrictions}, {Attribute_Parameter_Values}, {Accumulate_Attributes}, {Maximum_Snap_Tolerance}, {Feature_Locator_WHERE_Clause}, {Origin_Destination_Line_Shape}, {Maximum_Features_Affected_by_Point_Barriers}, {Maximum_Features_Affected_by_Line_Barriers}, {Maximum_Features_Affected_by_Polygon_Barriers}, Maximum_Origins, Maximum_Destinations, {Force_Hierarchy_Beyond_Distance}, {Save_Output_Network_Analysis_Layer}, {Overrides})
参数 | 说明 | 数据类型 |
Origins | 指定在生成指向目的地的路径时用作起点的位置。最多可添加 200 个起点。 指定起点后,可通过使用属性为每个起点设置属性,例如其名称或目的地数。可通过以下属性指定起点: Name - 起点的名称。该名称可以是起点的唯一标识符。该名称包含在输出线 (作为 OriginName 字段)和输出起始点(作为 Name字段)中,并且可将工具输出的附加信息连接到起始点的属性。 如果未指定名称,则会在输出起点中自动生成前缀为 Location 的唯一名称。输出线中不包含自动生成的起点名称。 TargetDestinationCount - 必须为起点查找的目的地数目最大值。如果未指定任何值,则将使用要查找的目的地数参数中的值。 Cutoff - 针对起点,指定停止搜索目的地的行驶时间值或行驶距离值。分隔值以外的目的地将不予考虑。 如果出行模式中的阻抗属性基于时间,则该值需要采用时间单位参数指定的单位,如果出行模式中的阻抗属性基于距离,则需采用距离单位参数指定的单位。如果未指定任何值,则将使用中断参数中的值。 CurbApproach - 指定车辆离开起点的方向。该字段值可指定为以下整数之一(请使用数值代码而非括号中的名称):
CurbApproach 属性是专为使用以下两种国家驾驶标准而设计的:右侧通行(美国)和左侧通行(英国)。首先,考虑位于车辆左侧的停靠点。不管车辆行驶在左车道还是右车道,停靠点始终位于车辆的左侧。不同国家的驾驶标准可能会要求您从这两种方向中的其中一个接近停靠点,也就是说,只能从车辆的右侧或左侧接近停靠点。例如,如果要到达一个停靠点并且在车辆与停靠点之间不存在其他交通车道,那么在美国应该选择“车辆的右侧”(1),而在英国应该选择“车辆的左侧”(2)。 | Feature Set |
Destinations | 指定在生成从起点开始的路径时用作终点的位置。最多可添加 200 个目的地。 指定目的地后,可通过使用特性为每个目的地设置属性,例如其名称。可通过以下属性指定目的地: Name - 目的地的名称。该名称可以是目的地的唯一标识符。该名称包含在输出线(作为 DestinationName 字段)和输出目的地(作为 Name 字段)中,并且可用于将工具输出的附加信息连接到目的地的属性。 如果未指定名称,则会在输出目的地中自动生成前缀为 Location 的唯一名称。输出线中不包含自动生成的目的地名称。 CurbApproach - 指定车辆到达目的地的方向。该字段值可指定为以下整数之一(请使用数值代码而非括号中的名称):
CurbApproach 属性是专为使用以下两种国家驾驶标准而设计的:右侧通行(美国)和左侧通行(英国)。首先,考虑位于车辆左侧的停靠点。不管车辆行驶在左车道还是右车道,停靠点始终位于车辆的左侧。不同国家的驾驶标准可能会要求您从这两种方向中的其中一个接近停靠点,也就是说,只能从车辆的右侧或左侧接近停靠点。例如,如果要到达一个停靠点并且在车辆与停靠点之间不存在其他交通车道,那么在美国应该选择“车辆的右侧”(1),而在英国应该选择“车辆的左侧”(2)。 | Feature Set |
Network_Dataset | 将在其中执行分析的网络数据集。网络数据集通常表示街道网络,但也可能表示其他种类的交通网。网络数据集至少需要一个基于时间和一个基于距离的成本属性。 | Network Dataset Layer |
Output_Geodatabase | 输出工作空间。此工作空间必须已经存在。 | Workspace |
Output_Origin_Destination_Lines_Name | 用于存储连接起点和目的地点的线的输出要素类名称。 生成起点-目的地成本矩阵的输出介绍了该输出要素类的方案。 | String |
Output_Origins_Name | 包含起点的输出要素类名称。 生成起点-目的地成本矩阵的输出介绍了该输出要素类的方案。 | String |
Output_Destinations_Name | 包含目的地点的输出要素类名称。 生成起点-目的地成本矩阵的输出介绍了该输出要素类的方案。 | String |
Travel_Mode (可选) | 选择用于分析的运输模式。CUSTOM 为常用选择。要显示其他出行模式名称,必须使其显示在 Network_Dataset 参数指定的网络数据集中。(arcpy.na.GetTravelModes 函数提供了网络数据集上配置的出行模式对象的字典,name 属性返回出行模式对象的名称。) 出行模式是在网络数据集上定义的,并会提供模型车、货车、步行或其他出行模式的参数的覆盖值。在此处选择出行模式后,您便无需为以下参数提供值,这些参数值会被网络数据集中指定的值覆盖:
| String |
Time_Units (可选) | 指定用于测量和报告每对起点-目的地之间的总行驶时间的单位。其中包括以下选项:
| String |
Distance_Units (可选) | 指定用于测量和报告每对起点-目的地之间的总行驶距离的单位。 其中包括以下选项:
| String |
Number_of_Destinations_to_Find (可选) | 指定要为每个起点查找的最大目的地数目。如果未指定此参数的值,则输出矩阵将包含从每个起点到每个目的地的行程成本。各个起点可具有自己的值(指定为 TargetDestinationCount 字段), 用于覆盖要查找的目的地数参数值。 | Long |
Cutoff (可选) | 针对给定起点,指定停止搜索目的地的行驶时间值或行驶距离值。分隔值以外的目的地将不予考虑。各个起点可具有自己的值(指定为 Cutoff 字段), 用于覆盖中断参数值。 如果出行模式的阻抗属性基于时间,则该值需要采用时间单位参数指定的单位,如果出行模式的阻抗属性基于距离,则需采用距离单位参数指定的单位。如果未指定值,则在搜索目的地时,该工具将不会强制执行任何行驶时间或行驶距离限制。 | Double |
Time_of_Day (可选) | 指定路径应该开始的时间和日期。 如果您的网络数据集包含实时或历史流量数据,那么指定一天中的时间可以更精确地估算停靠点之间的行程时间,这是因为根据交通状况计算的行驶时间与您指定的日期和时间相适应。 时间的时区参数指定该时间和日期是参考 UTC 还是停靠点所在时区。 如果未将测量单位设置为基于时间的单位,则该工具将忽略此参数。 | Date |
Time_Zone_for_Time_of_Day (可选) | 指定时间参数的时区。
| String |
Point_Barriers (可选) | 指定点障碍,并将其分为两种类型:禁止型点障碍和增加成本型点障碍。它们可以暂时限制网络上的穿越或在网络的点上增加阻抗。点障碍由要素集定义,为点要素指定的属性值决定它们是禁止型障碍还是增加成本型障碍。下面列出并描述了属性表中的字段。 ObjectID: 系统管理的 ID 字段。 Shape: 指示网络分析对象地理位置的几何字段。 Name: 障碍的名称。 BarrierType: 指定障碍的存在将完全禁止通行还是在通行时增加成本。共有两个选项:
将值 0 用于禁止型值,将 2 用于增加成本型值。 Additional_Time: 表示穿越障碍时会增加的行驶时间。此字段仅适用于增加成本型障碍且仅在测量单位基于时间时适用。此字段的值必须大于或等于零,并且其单位与 测量单位参数中指定的单位相同。 Additional_Distance: 表示穿越障碍时会增加的距离。此字段仅适用于增加成本型障碍且仅在测量单位基于距离时适用。该字段的值必须大于或等于零,并且其单位与 测量单位参数中指定的单位相同。 | Feature Set |
Line_Barriers (可选) | 指定线障碍,暂时限制穿越障碍。线障碍由要素集定义。下面列出并描述了属性表中的字段。 ObjectID: 系统管理的 ID 字段。 Shape: 指示网络分析对象地理位置的几何字段。 Name: 障碍的名称。 | Feature Set |
Polygon_Barriers (可选) | 指定面障碍,并将其分为两种类型:禁止型面障碍和调整成本型面障碍。它们会暂时限制穿越所覆盖的网络部分或调整阻抗。面障碍由要素集定义,为面要素指定的属性值决定它们是禁止型障碍还是调整成本型障碍。下面列出并描述了属性表中的字段。 ObjectID: 系统管理的 ID 字段。 Shape: 指示网络分析对象地理位置的几何字段。 Name: 障碍的名称。 BarrierType: 指定障碍的存在将完全禁止通行还是按比例增加行程成本。共有两个选项:
将值 0 用于禁止型值,将 1 用于调整成本型值。 ScaledTimeFactor: 它是与障碍相交街道的行驶时间要乘以的因子。此字段仅适用于调整成本型障碍且仅在测量单位基于时间时适用。该字段值必须大于零。 ScaledDistanceFactor: 它是与障碍相交街道的距离要乘以的因子。此属性仅适用于调整成本型障碍且仅在测量单位基于距离时适用。该属性值必须大于零。 | Feature Set |
Impedance_Attribute (可选) | 分析过程中用作阻抗的成本属性。 | String |
Impedance_Attribute_Units (可选) | 阻抗属性参数指定的网络阻抗属性的单位。 这只是一个信息参数,只有直接编辑网络数据集才能进行更改。而且也无需更改,因为测量单位与成本属性之间的单位转换是自行处理的。 将出行模式设置为除自定义外的其他值时会覆盖此参数的值。 | String |
Time_Attribute (可选) | 定义测量单位值为时间单位时要使用的网络成本属性。 当测量单位值与此处定义的成本属性单位不同时,此工具将进行必要的时间单位转换。换言之,默认中断和网络成本属性的时间单位不必相同。 将出行模式(Python 中的 Travel_Mode)设置为除自定义外的其他值时会覆盖此参数的值。 | String |
Time_Attribute_Units (可选) | 时间属性单位。您可以明确地设置时间属性单位,但是建议您不要传递任何内容或者可以传递 "#" 并由求解程序确定该单位。 将 Travel_Mode 设置为除 CUSTOM 外的其他值时会覆盖此参数的值。 | String |
Distance_Attribute (可选) | 定义测量单位值为距离单位时要使用的网络成本属性。 当测量单位值与此处定义的成本属性单位不同时,此工具将进行必要的距离单位转换。换言之,测量单位和网络成本属性的距离单位不必相同。 将出行模式(Python 中的 Travel_Mode)设置为除自定义外的其他值时会覆盖此参数的值。 | String |
Distance_Attribute_Units (可选) | 距离属性单位。您可以明确地设置距离属性单位,但是建议您不要传递任何内容或者可以传递 "#" 并由求解程序确定该单位。 将 Travel_Mode 设置为除 CUSTOM 外的其他值时会覆盖此参数的值。 | String |
UTurn_Policy (可选) | 交汇点的 U 形转弯策略。允许 U 形转弯表示求解程序可以在交汇点处转向并沿同一街道往回行驶。考虑到交汇点表示街道交叉路口和死角,不同的车辆可以在某些交汇点转弯,而在其他交汇点则不行 - 这取决于交汇点是交叉路口还是死角。为适应此情况,U 形转弯策略参数由连接到交汇点的边数或街道数隐性指定,这称为交汇点原子价。此参数可接受的值如下所列;每个值的后面是根据交汇点价对其含义的描述。
将出行模式(Python 中的 Travel_Mode)设置为除自定义外的其他值时会覆盖此参数的值。 | String |
Use_Hierarchy_in_Analysis (可选) | 指定在查找点间的最短路径时是否应使用等级。
如果未在用于执行分析的网络数据集中定义等级属性,该参数将不可用。在这种情况下,使用 "#" 作为参数值。 即使 Use_Hierarchy_in_Analysis 设置为 False,您也可以使用 Force_Hierarchy_Beyond_Distance 参数进行强制求解来应用等级。 除非将 Travel_Mode 设置为 CUSTOM,否则会忽略此参数。对自定义步行模式进行建模时建议关闭等级,这是因为该等级专用于机动车辆。 | Boolean |
Restrictions [restriction,...] (可选) | 指示求解时应遵守的网络约束条件属性。 将出行模式(Python 中的 Travel_Mode)设置为除自定义外的其他值时会覆盖此参数的值。 | String |
Attribute_Parameter_Values (可选) | 指定具有参数的网络属性的参数值。记录集具有两个共同唯一识别参数的列以及另一个指定参数值的列。 将出行模式(Python 中的 Travel_Mode)设置为除自定义外的其他值时会覆盖此参数的值。 属性参数值记录集具有关联属性。下面列出并说明了属性表中的所有字段。 ObjectID: 系统管理的 ID 字段。 AttributeName: 网络属性的名称,其属性参数由表行设置。 ParameterName: 属性参数的名称,其值由表行设置。(无法使用此工具更新“对象”类型参数。) ParameterValue: 您希望的属性参数值。如果未指定值,则属性参数将被设置为空。 | Record Set |
Accumulate_Attributes [attribute,...] (可选) | 分析过程中要累积的成本属性的列表。这些累积属性仅供参考;求解程序仅使用时间属性(Python 中的 Time_Attribute)或距离属性(Python 中的 Distance_Attribute)参数指定的成本属性来计算最短路径。 对于每个累积的成本属性,均会向求解程序所输出的路径中添加一个 Total_[属性] 字段。 | String |
Maximum_Snap_Tolerance (可选) | 最大捕捉容差是指在网络上定位或重新定位一个点时 Network Analyst 搜索的最远距离。搜索会寻找适合的边或交汇点,并把点捕捉到最近的边或交汇点。如果在最大捕捉容差内没有找到合适的位置,对象将标记为无法定位。 | Linear unit |
Feature_Locator_WHERE_Clause (可选) | 用于选择源要素子集的 SQL 表达式,该子集对可以定位停靠点的网络元素设定了限制。此参数的语法由两部分组成:第一部分为源要素类名称(后接一个空格),第二部分为 SQL 表达式。要为两个或多个源要素类编写 SQL 表达式,请用分号分隔。 例如,为确保设施点不定位在限制出入的公路上,编写一个类似于下面所列的 SQL 表达式,排除这些源要素:"Streets" "FUNC_CLASS not in('1', '2')"。 注意,加载时,障碍将忽略要素定位器 WHERE 子句。 | String |
Origin_Destination_Line_Shape (可选) | OD 成本矩阵所生成的线可以用直线几何来表示,也可以不用任何几何来表示。在这两种情况中,路径总是沿街道网络通过最大限度地缩短行驶时间或行驶距离进行计算,而不是使用起点和目的地之间的直线距离进行计算。
| String |
Maximum_Features_Affected_by_Point_Barriers (可选) | 限制点障碍影响的要素数量。 空值表示没有限制。 | Long |
Maximum_Features_Affected_by_Line_Barriers (可选) | 限制线障碍影响的要素数量。 空值表示没有限制。 | Long |
Maximum_Features_Affected_by_Polygon_Barriers (可选) | 限制面障碍影响的要素数量。 空值表示没有限制。 | Long |
Maximum_Origins | 限制可添加到起点-目的地成本矩阵分析的起点数。 此参数可帮助您管理求解时发生的处理量。例如,您可以为免费版服务中的这个参数指定一个较低的值,在付费订阅版服务中使用一个较高的值。 空值表示没有限制。 | Long |
Maximum_Destinations | 限制可添加到起点-目的地成本矩阵分析的目的地数。 此参数可帮助您管理求解时发生的处理量。例如,您可以为免费版服务中的这个参数指定一个较低的值,在付费订阅版服务中使用一个较高的值。 空值表示没有限制。 | Long |
Force_Hierarchy_Beyond_Distance (可选) | 指定一段距离,之后,求解程序将在查找路径进行强制分级,即使未启用等级也是如此。此参数的单位与距离属性单位参数中显示的单位相同。 使用网络等级时查找远距离停靠点之间的路径,相比不使用等级查找同一路径进行的处理往往更少。此参数可帮助您管理求解时发生的处理量。 空值表示决不会强制分级,并且在分析中应用等级参数的值始终适用。如果输入网络数据集不支持等级,则为该参数指定值会导致错误。在这种情况下,应使用空值。 除非网络数据集包括等级属性,否则此参数将一直处于禁用状态。 | Double |
Save_Output_Network_Analysis_Layer (可选) |
不管在哪种情况下,均会返回包含结果的要素类。不过,服务器管理员也可能希望选择输出一个网络分析图层,以便可以使用 Network Analyst 环境中的 ArcGIS Desktop 控件调试工具的设置和结果。这会使调试过程变得更加容易。 在 ArcGIS Desktop 中,网络分析图层的默认输出位置位于临时文件夹内。可通过评估 arcpy.env.scratchFolder 地理处理环境的值来确定临时文件夹的位置。输出网络分析图层存储为 LYR 文件,其名称以 _ags_gpna 开头,后跟字母数字 GUID。 | Boolean |
Overrides (可选) | 求解网络分析问题时,指定可影响求解程序行为的其他设置。 需要在 JavaScript 对象表示法 (JSON) 中指定此参数的值。例如,有效值的格式如下:{"overrideSetting1" : "value1", "overrideSetting2" : "value2"}。覆盖设置名称始终以双引号括起。该值可以是数字、布尔值或字符串。 此参数的默认值为无值,表示不覆盖任何求解程序设置。 覆盖是高级设置,应仅在谨慎分析应用设置前后得到的结果之后使用。要获得每个求解程序支持的覆盖设置及其可接受值的列表,请联系 Esri 技术支持。 | string |
派生输出
名称 | 说明 | 数据类型 |
Solve_Succeeded | 用于确定服务是否能成功生成起点-目的地成本矩阵。 | 布尔型 |
Output_Origin_Destination_Lines | 所生成的从起点到目的地的路径。 | 要素集 |
Output_Origins | 参与分析的起点。 | 要素集 |
Output_Destinations | 参与分析的目的地。 | 要素集 |
Output_Network_Analysis_Layer | 网络分析图层可用于在地图中进行进一步分析或调试,其属性可在工具参数中进行配置。 | 文件 |
代码示例
GenerateOriginDestinationCostMatrix 示例 1(Python 窗口)
使用所需参数执行此工具。
origins = arcpy.FeatureSet()
origins.load("Warehouses")
destinations = arcpy.FeatureSet()
destinations.load("Stores")
arcpy.na.GenerateOriginDestinationCostMAtrix(origins, destinations, "ParisMultimodal_ND")
GenerateOriginDestinationCostMatrix 示例 2(独立脚本)
以下 Python 脚本演示了如何在独立脚本中使用该工具。
# Name: GenerateOriginDestinationCostMatrix_Workflow.py
# Description: Find and measure the least-cost paths along the network from multiple
# origins to multiple destinations.
# 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:/arcgis/ArcTutor/Network Analyst/Tutorial/Paris.gdb'
env.overwriteOutput = True
#Set local variables
inOrigins = 'Analysis/Warehouses'
inDestinations = 'Analysis/Stores'
inNetworkDataset = 'Transportation/ParisMultimodal_ND'
outGeodatabase = 'C:/arcgis/ArcTutor/Network Analyst/Tutorial/Output.gdb'
# Run GenerateODCostMatrix
arcpy.na.GenerateOriginDestinationCostMatrix(inOrigins, inDestinations, inNetworkDataset, outGeodatabase,
Cutoff=10, Origin_Destination_Line_Shape='STRAIGHT_LINES')
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)
环境
许可信息
- Basic: 需要 Network Analyst
- Standard: 需要 Network Analyst
- Advanced: 需要 Network Analyst