【工作笔记002】在TC中建立应用于出行分布的阻抗矩阵(最短路矩阵)

步骤0:数据准备

所需数据包括小区层、路网层(以及节点层)。

注意:若已经进行了小区与路网的连接,可跳过步骤1;若已经建立路网,可跳过步骤2。

步骤1:小区层与路网层相连并进行ID转换

在节点层的Dataview添加Index列,与小区层连接后对应小区层ID。

【菜单】Tools—Map Editing—Connect…

连接后,做选择集(selection),将对应小区层的节点放入选择集。

问题:当小区重新编辑后,如何更新连接?

步骤2:建立网络(network

当前层选为路网层,【菜单】Networks/Paths—Create…打开Create Network对话框。

clip_image002

Read length from选Length

Optional Fields选择所有Fields,Options依需要选择,单击OK,找个地方起个名字将network保存下来。创建Network成功的话,TC状态栏会显示Network的路径(绝对路径)。

clip_image004

步骤3:建立最短路矩阵

当前层为路网层(或节点层),【菜单】Networks/Paths—Multiple Paths…,打开Multiple Shortest Path对话框。

clip_image006

Minimize选择需要参与计算的列(这里选择的是time,即TC按路段的行驶时间计算各小区间的最短值)。

From和To都选择Selection。

Store Results选择Matrix File。

单击OK,出现成功对话框,成功生成最短路矩阵。

clip_image008

步骤4:建立可应用于出行分布的费用矩阵

观察步骤3生成的阻抗矩阵可以发现,其矩阵ID是节点层的ID而非小区层的ID。而这个矩阵是无法参与到出行分布中去的。

clip_image010

因此,必须建立使用小区层ID作为ID的矩阵,才能够顺利进行出行分布的操作。

步骤4.1:处理最短路矩阵

【菜单】Matrix—Export,打开Maxtrix Export对话框,选择第2个互斥按钮,即按列输出该matrix。点击OK,选择bin格式保存。

clip_image012

得到包含RCIndex列的数据表。

clip_image014

选中RCIndex列,右键选择Fill…,弹出Fill对话框,可以快速修改该列的数据。

clip_image016

将RCIndex列的数值对应修改为小区层的ID值。

clip_image018

问题:手动修改RCIndex并不是推荐的方法,只不过笔者还没有找到更有效的方法,不得已而为之,不得已。

步骤4.2:新建矩阵

当前层为小区层(或节点层),【菜单】File—New—Matrix,打开Create Matrix File对话框。

clip_image020

IDs are in选择ID(若当前层为节点层,则选择Index),Rows from/Columns from选择All Features(若当前层为节点层,则选择Selection)。点击OK建立空白矩阵。

步骤4.3:将数据导入新建矩阵

当前矩阵为空白矩阵,选中矩阵第1,【菜单】Matrix—Import,打开Matrix Import Wizard对话框。

clip_image022

选择相应互斥按钮,单击Next,

clip_image024

按上图选择内容,单击Next,

clip_image026

选择All Columns,并相应选择From里面的列,之后单击Finish,导入完毕。如果不能成功导入,可能是因为打开的matrix太多导致选择矩阵的时候出现错误,最无脑的方法是关闭其他无关的矩阵,只留下空白矩阵和要处理完的数据表。

步骤5:矩阵对角线0值的处理

使用多路径最短路方法得到的区内的出行距离为0,关于该0值的处理问题。TransCAD交流QQ群的某人提出了一个简单的方法,即采用该行/列(?)最小值的一半作为该小区内部的出行距离。这个方法从直观上看,假设超出小区出行半径的出行都被认为是区外出行,还是有合理成分的,如果对精度要求不高的话,如此处理对角线0值不失为一个简单有效的方法。

2010年07月20日晚于黄村

End

原文地址:https://www.cnblogs.com/transteel/p/1781865.html