摘要
基于行驶时间或行驶距离查找离事件点最近的一个或多个设施点,输出最佳路径、事件点间的行驶方向、选定的设施点以及选定设施点的副本。例如,您可以使用此工具查找离事故地点最近的医院、离犯罪现场最近的警车或者是离客户地址最近的商店。
查找最近设施点时,您可以指定查找数量和行驶方向(驶向设施点或驶离设施点)。您可以指定一天中的某个时间,然后根据该时间和日期的实时或预测交通状况计算行驶时间。例如,您可以使用此工具搜索距离事故发生地点行驶时间在 15 分钟(根据给定的一天中的时间计算)以内的医院。查找结果中将不会包含任何行驶时间超出 15 分钟(依据交通状况计算)的医院。
插图
用法
如果“测量单位”参数是基于时间的,则该工具会根据行驶时间查找最近设施点。同样,若测量单位是基于距离的,则工具会使用行驶距离。
为成功执行该工具,您至少需要指定一个设施点和一个事件点。最多可以加载 1,000 个设施点和 1,000 事件点,且最多可以为每个事件点查找到 100 个最近设施点。因此,工具的每个解决方案最多能找到 100,000 个最近设施点。
最多可以添加 250 个点障碍。您可以添加任意数量的线障碍或面障碍,但线障碍的相交数不能超过 500 个街道要素,面障碍的相交数不能超过 2,000 个要素。
求解时可选择使用道路等级以更快地生成结果,但解决方案可能欠佳。
无论是否选中“应用等级”参数 (True),只要代表事件点或设施点的任何一对要素之间的直线距离大于 50 英里(80.46 公里),便会始终使用等级。
当出行模式设置为步行时或者设置为自定义并且使用步行约束条件时,代表事件点或设施点的任意一对要素之间的直线距离不得大于 50 英里(80.46 千米)。
如果输入点与其最近的可穿过街道之间的距离大于 12.42 英里(20 千米),则将从分析中排除该点。
此工具可在 ArcGIS Pro、ArcMap、ArcGlobe 和 ArcScene 中运行,但不适用于 ArcCatalog。
语法
FindClosestFacilities_naagol (Incidents, Facilities, Measurement_Units, {Analysis_Region}, {Number_of_Facilities_to_Find}, {Cutoff}, {Travel_Direction}, {Use_Hierarchy}, {Time_of_Day}, {Time_of_Day_Usage}, {UTurn_at_Junctions}, {Point_Barriers}, {Line_Barriers}, {Polygon_Barriers}, {Restrictions}, {Attribute_Parameter_Values}, {Route_Shape}, {Route_Line_Simplification_Tolerance}, {Populate_Directions}, {Directions_Language}, {Directions_Distance_Units}, {Directions_Style_Name}, {Time_Zone_for_Time_of_Day}, {Travel_Mode}, {Impedance})
参数 | 说明 | 数据类型 |
Incidents |
指定一个或多个事件点(最多为 1,000)。工具将在这些位置中搜索附近的位置。 指定事件点后,可通过使用“特性”为每个事件点设置属性,例如时间点的名称或服务时间。可通过以下属性指定事件点: Name - 事件点的名称。该名称用于行驶方向中。如果未指定名称,则会在输出路径和方向中自动生成前缀为 Location 的唯一名称。 ID - 事件点的唯一标识符。该标识符包含在输出路径中(作为 IncidentID 字段),且有助于将输出路径的附加信息(例如总行驶时间或总距离)连接到事件点的属性中,反之亦然。如果未指定 ID,则服务将为每个事件点自动生成一个唯一的标识符。 AdditionalTime - 在事件点所花费的时间,该时间将被添加到路径总时间中。该属性值的单位由“测量单位”参数所指定。仅在测量单位基于时间时,属性值才能包含在分析中。默认值为 0。 如果您要查找离火灾事件点最近的消防站以估算响应时间,AdditionalTime 属性可存储消防人员开始灭火前在事件点位置连接装备所花费的时间。 AdditionalDistance - 在事件点所行驶的额外距离,该距离将被添加到路径总距离中。该属性值的单位由“测量单位”参数所指定。仅在测量单位基于距离时,属性值才能包含在分析中。默认值为 0。 通常,事件点的位置(例如住宅)并不是恰好位于街道上,而是位于道路的后方。该属性值可用于构建实际事件点位置与其在街道上的位置之间的距离,如有必要,将此段距离包括在总行驶距离中。 CurbApproach - 指定车辆到达和离开事件点的方向。该字段值可指定为以下整数之一(请使用数值代码而非括号中的名称):
CurbApproach 属性是专为使用以下两种国家驾驶标准而设计的:右侧通行(美国)和左侧通行(英国)。首先,考虑位于车辆左侧的事件点。不管车辆行驶在左车道还是右车道,停靠点始终位于车辆的左侧。决定从其中任一方向到达事件点可能会更改国家驾驶标准,也就是说,从车辆的右侧或左侧靠近事件点。例如,如果要到达一个事件点并且在车辆与事件点之间不存在其他交通车道,那么在美国应该选择“车辆的右侧”(1),而在英国应该选择“车辆的左侧”(2)。 | Feature Set |
Facilities |
指定一个或多个设施点(最多为 1,000 个)。以下为查找最近位置时所搜索的位置。 指定设施点后,可通过使用“特性”为每个事件点设置属性,例如时间点的名称或服务时间。可通过以下属性指定设施点: Name - 设施点的名称。该名称用于行驶方向中。如果未指定名称,则会在输出路径和方向中自动生成前缀为 Location 的唯一名称。 ID - 设施点的唯一标识符。该标识符包含在输出路径中(作为 IncidentID 字段)和输出最近设施点中(作为 FacilityID 字段)。FacilityID 字段可用于将输出路径的附加信息(例如总行驶时间或总距离)连接到设施点的属性中。如果未指定 ID,则服务将为每个设施点自动生成一个唯一的标识符。 AdditionalTime - 在设施点所花费的时间,该时间将被添加到路径总时间中。该属性值的单位由“测量单位”参数所指定。仅在测量单位基于时间时,属性值才能包含在分析中。默认值为 0。 如果您要查找离火灾事件点最近的消防站,AdditionalTime 可存储消防人员穿好适当的防护装备和离开消防站所花费的时间。 AdditionalDistance - 在设施点所行驶的额外距离,该距离将被添加到路径总距离中。该属性值的单位由“测量单位”参数所指定。仅在测量单位基于距离时,属性值才能包含在分析中。默认值为 0。 通常,设施点的位置(例如消防站)并不是恰好位于街道上,而是位于道路的后方。AdditionalDistance 可用于构建实际设施点位置与其在街道上的位置之间的距离,如有必要,将此段距离包括在总行驶距离中。 CurbApproach:指定车辆到达和离开设施点的方向。该字段值可指定为以下整数之一(请使用数值代码而非括号中的名称):
CurbApproach 属性是专为使用以下两种国家驾驶标准而设计的:右侧通行(美国)和左侧通行(英国)。首先,考虑位于车辆左侧的设施点。不管车辆行驶在左车道还是右车道,停靠点始终位于车辆的左侧。决定从其中任一方向到达设施点可能会更改国家驾驶标准,也就是说,从车辆的右侧或左侧靠近事件点。例如,如果要到达一个设施点并且在车辆与设施点之间不存在其他交通车道,那么在美国应该选择“车辆的右侧”(1),而在英国应该选择“车辆的左侧”(2)。 | Feature Set |
Measurement_Units | 指定用于测量和报告输出路径的总行驶时间或行驶距离的单位。该工具可通过测量行驶时间或沿街道行驶距离查找最近设施点。 为此参数选择的单位可以确定工具将测量行驶距离还是行驶时间来查找最近位置。选择时间单位以测量行驶时间。要测量行驶距离,则请选择距离单位。选择的单位还确定工具在结果中以哪种单位报告总行驶时间或距离。其中包括以下选项:
| String |
Analysis_Region (可选) | 指定要进行分析的区域。如果未对此参数指定值,工具会基于输入点的位置自动计算区域名称。为加快工具执行,建议设置区域名称。要指定区域,请使用以下值之一:
| String |
Number_of_Facilities_to_Find (可选) | 指定要为事件点查找的最近设施点数。这在发生诸如火灾之类的情况下很有用,因为此时需要来自不同消防站的多台消防车同时灭火。例如,您可以指定查找距离起火地点最近的三个消防站。 该工具最多可为每个事件点查找 100 个设施点。 | Long |
Cutoff (可选) |
对于给定事件点,指定停止搜索设施点的行驶时间值或行驶距离值。例如,在查找距离事故地点最近的医院时,如果中断值设为 15 分钟,则表示工具将搜索距离事件点 15 分钟车程以内的最近医院。如果到达最近的医院需要 17 分钟的车程,则在输出路径中不会返回任何路线。在搜索多个设施点时,中断值尤为有用。 该参数的单位由测量单位参数指定。 | Double |
Travel_Direction (可选) | 指定是按照从事件点到设施点还是从设施点到事件点的距离测量值来搜索最近设施点。
使用其中一个参数值可查找不同的设施点,因为沿某些街道的行驶时间可能会根据行驶方向和单行线限制而发生变化。例如,从事件点行驶到设施点时,可能需要 10 分钟,而从设施点行驶到事件点时,可能因该方向上的行驶时间不同而需要 15 分钟。如果您要设置时间的值,交通状况也可能导致“设施点到事件点”和“事件点到设施点”选项返回不同的结果。 消防部门通常使用参数的“设施点到事件点”值,因为他们需要关注从消防站(设施点)行驶到紧急救援位置(事件点)所需的时间。零售商店(设施点)则更关注顾客(事件点)到达商店所需的时间;因此,商店通常选择“事件点到设施点”选项。 | String |
Use_Hierarchy (可选) | 指定是否应在查找设施点和事件点之间的最佳路径时使用等级。
如果设施点和事件点间的直线距离大于 50 英里,即使您已设置此参数为不使用等级,工具也会自动转换为使用等级。 | Boolean |
Time_of_Day (可选) |
指定路径应该开始或结束的时间和日期。该值根据时间用法参数的值可用作路径的起始时间或结束时间。如果您指定当前日期和时间作为该参数的值,则工具将使用实时交通状况查找最近设施点,并且总行驶时间将基于交通状况提供。 指定时间可提供更加准确的事件点和设施点之间的行驶时间评估,因为行驶时间是根据相应的日期和时间的交通状况而估算出的。 时间的时区参数指定该时间和日期是参考 UTC 还是设施点或事件点所在时区。 | Date |
Time_of_Day_Usage (可选) | 指示时间参数值是表示路径的到达时间还是离开时间。
| String |
UTurn_at_Junctions (可选) | 交汇点的 U 形转弯策略。允许 U 形转弯表示求解程序可以在交汇点处转向并沿同一街道往回行驶。 考虑到交汇点表示街道交叉路口和死角,不同的车辆可以在某些交汇点转弯,而在其他交汇点则不行 - 这取决于交汇点是交叉路口还是死角。为适应此情况,U 形转弯策略参数由连接到交汇点的边数隐性指定,这称为交汇点原子价。此参数可接受的值如下所列;每个值的后面是根据交汇点原子价对其含义的描述。
| String |
Point_Barriers (可选) | 指定一个或多个点作为临时限制,或显示在基础街道上行驶可能需要的附加时间或距离。例如,点障碍可用来显示一棵沿街倒下的树或是铁路道口上的时间延迟。 工具限制了可添加为障碍的点不得超过 250 个。 指定点障碍后,可通过使用特性为每个事件点设置属性,例如其名称或障碍类型。可通过以下属性指定点障碍: Name:障碍名称。 BarrierType:指定点障碍是完全限制通行还是增加通过障碍时的时间或距离。此特性值可指定为以下整数之一(请使用数值代码而非括号中的名称):
Additional_Time:表示穿越障碍时会增加的行驶时间。此字段仅适用于增加成本型障碍且仅在测量单位基于时间时适用。此字段的值必须大于或等于零,并且其单位与“测量单位”参数中指定的单位相同。 Additional_Distance:表示穿越障碍时会增加的距离。此字段仅适用于增加成本型障碍且仅在测量单位基于距离时适用。此字段的值必须大于或等于零,并且其单位与“测量单位”参数中指定的单位相同。 | Feature Set |
Line_Barriers (可选) | 指定一条或多条线,这些线相交的街道上禁止通行。例如,线障碍可用于对阻塞若干个路段交通的游行或抗议队伍进行建模。线障碍还可用于快速隔离多条道路使其禁止被穿越,从而在可能的路径中去除不符合要求的街道网络部分。 该工具限制了您可以使用“线障碍”参数限制的街道数量。可指定为线障碍的线数没有限制时,所有线的相交街道的合并数不能超过 500。 指定线障碍时,可使用以下特性为每个障碍设置名称属性: Name:障碍名称。 | Feature Set |
Polygon_Barriers (可选) | 指定面,该面完全限制通行或按比例调整行驶在面相交的街道上所需的行驶时间或距离。 该服务限制了您可以使用“面障碍”参数限制的街道数量。可指定为面障碍的面数没有限制时,所有面的相交街道的合并数不能超过 2,000。 指定面障碍时,可通过使用特性为每个面障碍设置属性,例如名称或障碍类型。可通过以下属性指定面障碍: Name:障碍名称。 BarrierType:指定障碍的存在会完全禁止通行还是按比例调整行程时间或距离。该字段值可指定为以下整数之一(请使用数值代码而非括号中的名称):
ScaledTimeFactor:它是与障碍相交街道的行驶时间要乘以的因子。此字段仅适用于按比例调整成本型障碍且仅在测量单位基于时间时适用。该字段值必须大于零。 ScaledDistanceFactor:它是与障碍相交街道的距离要乘以的因子。此属性仅适用于按比例调整成本型障碍且仅在测量单位基于距离时适用。该属性值必须大于零。 | Feature Set |
Restrictions (可选) | 指定查找事件点和设施点间的最佳路径时工具应使用的限制。限制表示行驶偏好或要求。在大多数情况下,限制会使道路被禁止选择,但限制也可以使道路被避免选择或优先选择。例如,使用“避开收费公路”限制的结果是,仅在访问某一事件点或设施点必须借道收费公路时,才会生成一条包含该收费公路的路径。高度限制则使您可以绕开低于车辆高度的间隙。如果车辆上装载着腐蚀性物质,使用“禁止任何危险物品”限制可以防止在标记着运输腐蚀性材料为非法行为的路上运输这些材料。 以下是可用约束条件的列表和简短描述。 该工具支持以下约束条件:
| String |
Attribute_Parameter_Values (可选) | 指定某些限制需要的其他值,例如“重量限制”要求的车辆重量。您也可以使用属性参数指定限制对使用限制的行程是禁止、避免还是首选。如果该限制要避免或首选道路,您可以使用此参数进一步指定要避免或首选的程度。例如,您可以选择从不使用收费公路,尽可能的避开它们,或甚至格外倾向于它们。 如果指定了要素类的“属性参数值”参数,则要素类上的字段名称必须如下所示与字段相匹配: AttributeName:列出约束条件名称。 ParameterName:列出与约束条件相关的参数名称。限制根据其用途可有一个或多个 ParameterName 字段值。 ParameterValue:工具在评估约束条件时使用的 ParameterName 的值。 “属性参数值”取决于“限制”参数。仅当限制名称指定为“限制”参数值时,ParameterValue 字段才可用。 在“属性参数值”中,每个限制(以 AttributeName 形式列出)具有一个 ParameterName 字段值,指定限制的行程是禁止、避免还是首选的“限制用法”与道路选择避免或首选的限制和程度相关联。可为约束条件用法 ParameterName 分配下列字符串值,或在括号内列出等效数值:
大多数情况下,如果约束条件取决于车辆特征(如车辆高度),则可以使用“约束条件用法”的默认值 PROHIBITED。但是在某些情况下,“限制用法”的值取决于您的路径偏好。例如,“避开收费公路”限制具有“限制用法”参数的默认值 AVOID_MEDIUM。这表示在使用限制时,在可能的情况下工具会试图绕开收费公路。AVOID_MEDIUM 也表示查找最佳路径时避开收费公路的重要性,即优先级为中等。选择 AVOID_LOW 会降低避开收费公路的重要性;而选择 AVOID_HIGH 则会增加其重要性,因此服务为避开收费公路而生成更长的路径时更容易为人所接受。选择 PROHIBITED 则会完全不允许在收费公路上行驶,因此路径不可能经过收费公路的所有部分。但是请注意,避开或禁止收费公路并由此避开公路通行费只是一部分人的目的;对另外一部分人来说,因为避开拥堵的交通比交一些公路通行费更为重要,会宁愿走收费公路。在后一种情况中,您可以选择 PREFER_LOW、PREFER_MEDIUM 或 PREFER_HIGH 作为“限制用法”的值。首选的等级越高,工具为了在与限制相关的道路上行驶就会绕行更远的路程。 | Record Set |
Route_Shape (可选) | 指定工具输出的路径要素的类型。可以使用以下值之一指定此参数:
当路径形状参数设置为“实际形状”时,路径形状的制图综合可以使用适当的“路线简化容差”参数值进行进一步控制。 无论选择哪种路径形状参数值,最佳路径总是通过最大限度地缩短行驶时间或行驶距离,而不是使用事件点和设施点间的直线距离来确定。这意味着只有路径形状是不同的,而非查找路径时搜索的基础街道。 | String |
Route_Line_Simplification_Tolerance (可选) | 指定要对路径和方向的输出线几何进行简化的程度。 如果路径形状参数未设置为“实际形状”,则工具将忽略此参数。 简化将保留路径上定义路径基本形状所需的关键点(例如交点处的转弯)而删除其他点。指定的简化距离为简化线偏离原始线的最大允许偏移。简化线将减少路径几何中的折点数。这将改善工具的执行时间。 | Linear unit |
Populate_Directions (可选) | 指定工具是否应为每条路径生成行驶方向。
| Boolean |
Directions_Language (可选) | 指定在生成行驶方向时使用的语言。 此参数仅在选中填充方向参数或设置为 True 时使用。 可使用下列两位或五位字符语言代码指定参数值:
如果指定了某种不支持的语言代码,该工具将会使用默认语言(英语)返回方向。 | String |
Directions_Distance_Units (可选) |
指定在行驶方向中显示行驶距离的单位。此参数仅在选中填充方向参数或设置为 True 时使用。
| String |
Directions_Style_Name (可选) | 指定方向的格式化样式名称。此参数仅在选中填充方向参数或设置为 True 时使用。可以使用以下值指定此参数:
| String |
Time_Zone_for_Time_of_Day (可选) | 指定时间参数的时区。
无论时间的时区如何设置,如果您的设施点和事件点在多个时区中,则工具将强制执行以下规则:
| String |
Travel_Mode (可选) | 指定用于在分析中建模的交通模式。出行模式在 ArcGIS Online 中进行管理,组织管理员可通过对其进行配置更好地反映组织工作流。您需要指定组织所支持的出行模式名称。 要获取受支持出行模式名称的列表,请使用与访问此工具时使用的相同 GIS 服务器连接,并在实用程序工具箱中运行 GetTravelModes。GetTravelModes 会将表和支持的出行模式添加到应用程序中。可将“支持的出行模式”表中“出行模式名称”字段的任何值指定为输入。您还可以将“出行模式设置”字段中的值指定为输入。由于工具不必查找基于出行模式名称的设置,因而加快了工具执行。 默认值,自定义,可以使用自定义出行模式参数(在交汇点处 U 形转弯、应用等级、限制、属性参数值和阻抗)配置您自己的出行模式。自定义出行模式参数的默认值对使用汽车的出行方式建模。您可能希望选择“自定义”并设置上述自定义出行模式参数,从而以快速步行速度对行人建模,或以给定高度、重量和特定危险材料货物对卡车建模。您可以选择执行此操作来尝试不同的设置以获取想得到的分析结果。一旦确定了分析设置,您应该使用组织管理员身份并将这些设置保存为新建或现有出行模式的一部分,以便您组织中的所有人均返回相同设置的分析。 | String |
Impedance (可选) | 指定阻抗,其值表示沿交通网络的路段或其他部分行进所需的精力或成本。 行程距离是一种阻抗,可将以千米表示的道路长度作为阻抗。从这个意义上,行程距离对所有模式均相同,即对行人而言 1 千米的距离对汽车而言也是 1 千米。(但不同模式所允许行进的线路可能会有变化,而这会影响两点间的距离,可通过出行模式设置对此进行建模。) 行程时间也可以是一种阻抗,比如,汽车花费一分钟沿空无一人的道路行驶一公里。行程时间会随出行模式的不同而不同(行人可能需要 20 多分钟才能走完一公里),所以在建模时为出行模式选择正确的阻抗非常重要。 从以下阻抗值中选择:
除非将出行模式设置为自定义(这是默认值),否则会忽略您为此参数提供的值。 如果选择行驶时间、货运时间或步行时间,则必须将测量单位参数设置为基于时间的值,如果为阻抗选择了行程距离,则测量单位必须为基于距离的值。 | String |
代码示例
FindClosestFacilities 示例
以下 Python 脚本演示了如何在脚本中使用 FindClosestFacilities 工具。
import arcpy
import time
import sys
username = "<your user name>"
password = "<your password>"
cf_service = "http://logistics.arcgis.com/arcgis/services;World/ClosestFacility;{0};{1}".format(username, password)
#Add the geoprocessing service as a toolbox. Use an alias when importing
arcpy.ImportToolbox(cf_service, "agol")
#Set the variables to call the tool
facilities = r"C:/data/Inputs.gdb/Stores"
incidents = r"C:/data/Inputs.gdb/Customers"
output_routes = "C:/data/Results.gdb/Routes"
output_directions = "C:/data/output/Results.gdb/Directions"
#Call the tool
result = arcpy.agol.FindClosestFacilities(incidents, facilities, "Minutes", "", 2)
#Check the status of the result object every 0.5 seconds
#until it has a value of 4(succeeded) or greater
while result.status < 4:
time.sleep(0.5)
#print any warning or error messages returned from the tool
result_severity = result.maxSeverity
if result_severity == 2:
print "An error occured when running the tool"
print result.getMessages(2)
sys.exit(2)
elif result_severity == 1:
print "Warnings were returned when running the tool"
print result.getMessages(1)
#Get the output routes and save to a local geodatabase
result.getOutput(0).save(output_routes)
result.getOutput(1).save(output_directions)
环境
此工具不使用任何地理处理环境。