ArcGIS Pro生成沿网络的OD成本矩阵

ArcGIS中求解OD成本矩阵只能得到两种形式的结果,一种是没有输出几何只有属性表的OD成本矩阵表,一种是OD点之间生成直线的成本矩阵表。不过路径分析是可以沿网络生成路径的,所以考虑借助路径分析生成沿网络的OD成本矩阵。

OD成本矩阵的几何输出方式只有没有线和直线两种

路径分析可以输出沿网络的连接线

但是路径分析默认是生成两点或多点的单条路径,为了达到像OD成本矩阵一样的效果,我们需要对路径分析图层的停靠点图层做一些改造,主要是改造RouteName字段。

  • 在单个分析中生成多个路径。使用 RouteName 字段值可以将停靠点分组到单独路径;每组生成一个路径。

首选还是做成模型工具箱的形式,在已创建好网络数据集和路径分析图层的基础上,输入起点、目的地,即可运行求解。

工具箱运行步骤

使用模型工具的注意事项:

  1. 模型只能在ArcGIS Pro中使用
  2. 需要先创建好网络数据集和路径分析图层
  3. 5个模型放置在一处,如果工具箱或工具集的名字变动需要在主模型中重新添加子模型
  4. 起点和目的地图层的属性中需要一个Name字段,并且需要有属性值
  5. 矩阵的数量级控制在100*100左右,否则添加停靠点和求解都将耗费大量时间

在制作模型后才明白OD成本矩阵为什么不提供沿网络生成连接线了,还是效率问题。1000*1000的矩阵,直接生成直线的连接线用时短且数据小,如果全部沿网络生成连接线,(像我的数据是城市之间的OD)求解过程非常慢且生成的数据非常大(1000000条折点巨多的路径)。

模型的不足之处:

添加起点和目的地是一遍一遍调用子模型“01添加停靠点”完成的,相当于有100个起点就要循环100次“01添加停靠点”,这个过程严重影响停靠点的添加速度。虽然后来改进成了按照指数级添加的方式,100个起点只需要循环7次“01添加停靠点”,但是模型不能一键运行了,中间需要人工干预一次,所以取消了。大佬有什么好办法请指教啊。

模型工具箱icon-default.png?t=M276https://download.csdn.net/download/baidu_28157641/85026090

### ArcGIS OD 成本矩阵使用方法 #### 创建网络数据集 为了能够执行OD成本矩阵分析,在ArcGIS环境中需预先准备一个有效的网络数据集。这可以通过在ArcCatalog或ArcMap目录树中右键点击路网shapefile并选择新建网络数据集来完成,此过程会生成`.nd`(表示路网)以及`Junction.shp`(代表交叉点)这样的文件[^3]。 #### 配置路径分析图层 一旦拥有了合适的网络数据集之后,则可以在ArcGIS Pro里建立用于计算OD成本矩阵的路径分析图层。值得注意的是,此类操作仅限于ArcGIS Pro平台内实施,并且建议保持输入地点数量在一个合理的范围内—大约不超过100×100级别;超出这个规模可能会显著增加处理时间和资源消耗[^1]。 #### 执行OD成本矩阵分析 当上述准备工作完成后,便可以着手配置具体的OD成本矩阵参数了: - **设置起点与终点**:指定参与配对计算的一系列起始位置和目标位置; - **定义阻抗属性**:选取用来衡量两节点间距离的标准,比如行驶时间或是实际里程数; - **调整高级选项**:依据需求设定诸如最大搜索半径、截止阈值等附加约束条件。 ```python import arcpy # 设置工作空间环境变量 arcpy.env.workspace = "C:/data" # 加载已有的网络数据集作为输入 network_dataset = r"C:\path\to\networkDataset.nd" # 初始化新的路径分析类实例 odcm_analysis_layer = arcpy.nax.MakeODCostMatrixLayer(network_dataset, 'My_ODCM_Analysis') # 获取OD成本矩阵对象以便进一步定制化设置 od_matrix_solver_properties = odcm_analysis_layer.getSolverProperties() # 修改默认求解器属性以适应特定应用场景的要求 od_matrix_solver_properties.timeOfDay = datetime.datetime.now() od_matrix_solver_properties.defaultImpedanceCutoff = 90 # 单位分钟 ... # 应用更改后的求解器属性回到原始分析层上 odcm_analysis_layer.setSolverProperties(od_matrix_solver_properties) # 添加源要素和服务区域边界至当前分析场景之中 origins_feature_class = r"C:\path\to\OriginsFC" destinations_feature_class = r"C:\path\to\DestinationsFC" arcpy.nax.AddLocations(odcm_analysis_layer, origins_feature_class) arcpy.nax.AddLocations(odcm_analysis_layer, destinations_feature_class) # 运行最终的成本矩阵运算流程 result_object = odcm_analysis_layer.solve() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值