使用 arcpy.nax 模块执行网络分析的最重要部分之一就是访问分析输出。 在使用 solve 方法求解分析时,将返回一个求解程序结果对象,该结果对象具有多种可通过以下方式检索输出的方法:
- 使用 export 方法将分析结果保存到要素类。
- 使用 searchCursor 方法直接读取结果。
- 将分析结果保存到可在其他应用程序(例如 ArcGIS Navigator)中使用的 .zip 文件。
- 出于调试目的,将分析结果保存到图层文件或包。
本主题将更加详细地介绍每个选项,以便您选择适合您需要的选项。
注:
本主题以路径分析为例;但是,此处提供的信息可以应用于任何类型的网络分析。
使用 export 方法将结果保存到要素类
要将求解程序返回的分析结果直接保存到磁盘上,请使用 export 方法。 将包含指定输出类型的所有字段和行。
以下代码片段显示了如何使用 export 方法将分析结果保存到磁盘上。
# Solve the analysis
result = route.solve()
# Save results to disk using the export method
output_feature_class = "C:/data/io.gdb/Routes"
result.export(arcpy.nax.RouteOutputDataType.Routes, output_feature_class)
有关路径分析的 export 方法的详细信息,请参阅 RouteResult 对象文档的“方法”部分。
使用 searchCursor 方法读取结果
searchCursor 方法可用于直接逐行访问输出。 如果仅需从输出中检索特定字段,或者要将结果直接插入到其他某些系统,而不将整个输出表保存到磁盘,则该方法将非常有用。
例如,也许在您的路径分析中,您只需检索每个路径的总行驶里程,则可将该信息包含在报表中。 使用 searchCursor 方法检索每一行的 Total_Miles 字段。
以下代码片段显示了如何使用 searchCursor 方法在输出中检索某些字段的值。 在本示例中,可将超过 10 英里路径的名称打印到控制台。
# Solve the analysis
result = route.solve()
# Retrieve specific fields of interest using a searchCursor
for row in result.searchCursor(arcpy.nax.RouteOutputDataType.Routes, ["Name", "Total_Miles"]):
# Retrieve the name and mileage for each route
route_name = row[0]
route_miles = row[1]
# Print the route's name if the route's total mileage is greater than 10 miles
if route_miles > 10:
print(route_name)
可以使用一些特殊形状令牌访问输出的几何。 例如,使用 SHAPE@JSON 令牌可以检索形状的 JSON 表示。 使用 SHAPE@XY 令牌可以检索由求解程序结果对象的 spatialReference 属性指定的空间参考中的点的一组 X 和 Y 坐标。
提示:
使用结果对象的 fieldNames 方法可以检索分析输出类中包含的字段列表。 有关路径分析输出的 fieldNames 方法的详细信息,请参阅 RouteResult 对象文档的“方法”部分。
有关路径分析的 searchCursor 方法的详细信息,请参阅 RouteResult 对象文档的“方法”部分。
使用 saveRouteData 方法检索路径数据 .zip 文件
对于“路径”、“最近设施点”和“车辆配送”分析,可以将结果导出到路径数据 .zip 文件。 可以使用共享为路径图层工具将 .zip 文件共享为 ArcGIS Online 或 ArcGIS Enterprise 中的路径图层项目。
路径图层项目可供各种应用程序使用(例如 ArcGIS Navigator)来为外业工作人员提供路径指引,可供 Map Viewer 中的方向窗格来进一步自定义路径图层中包含的路径,或可供 ArcGIS Pro 基于路径图层来创建新的路径分析图层。
以下代码片段显示了如何使用 saveRouteData 方法保存路径数据 .zip 文件,并使用 ShareAsRoute Layers 功能将其共享至您的门户。
# Solve the analysis
result = route.solve()
# Export the results to a route data .zip file
out_zip = "C:/data/RouteData.zip"
result.saveRouteData(out_zip)
# Share the route data zip file as route layers to your portal
arcpy.nax.ShareAsRouteLayers(
out_zip,
summary='Tuesday restaurant inspection routes',
tags='Tuesday',
route_name_prefix='TuesdayRestaurants',
portal_folder_name='RouteLayers',
share_with='MYGROUPS',
groups='Drivers'
)
警告:
要成功运行 saveRouteData 方法,必须将求解程序对象上的 allowSaveRouteData 属性设置为 True。
有关路径分析的 saveRouteData 方法的详细信息,请参阅 RouteResult 对象文档的“方法”部分。
使用 saveAsLayerFile 方法保存图层文件或包
可以使用 saveAsLayerFile 方法将分析设置和结果保存到图层文件或图层包,然后在 ArcGIS Pro 中打开并检查生成的图层。 这主要用于调试分析。
可以选择另存为与 ArcGIS Desktop 或 ArcGIS Pro 兼容的 .lyr 图层文件或者仅与 ArcGIS Pro 兼容的 .lpkx 图层包。 输出类型取决于您在指定方法的 file_name 参数时所使用的文件扩展名。 图层包中包含分析数据,但不包含网络数据源。
旧版本:
具有 .lyr 扩展名的图层文件没有出行模式属性。 构成出行模式的各个设置将保留在已保存的图层中,但是用于分析的出行模式的名称将丢失。
以下代码片段显示了如何使用 saveAsLayerFile 方法将分析结果另存为图层包。
# Solve the analysis
result = route.solve()
# Save the results to a layer package for debugging purposes
out_lpkx = "C:/data/RouteAnalysis.lpkx"
result.saveAsLayerFile(out_lpkx)
注:
要成功运行 saveAsLayerFile 方法,必须将求解程序对象上的 allowSaveLayerFile 属性设置为 True。
有关路径分析的 saveAsLayerFile 方法的详细信息,请参阅 RouteResult 对象文档的“方法”部分。