【工作笔记002】在TC中建立应用于出行分布的阻抗矩阵(最短路矩阵)
步骤0:数据准备
所需数据包括小区层、路网层(以及节点层)。
注意:若已经进行了小区与路网的连接,可跳过步骤1;若已经建立路网,可跳过步骤2。
步骤1:小区层与路网层相连并进行ID转换
在节点层的Dataview添加Index列,与小区层连接后对应小区层ID。
【菜单】Tools—Map Editing—Connect…
连接后,做选择集(selection),将对应小区层的节点放入选择集。
问题:当小区重新编辑后,如何更新连接?
步骤2:建立网络(network)
当前层选为路网层,【菜单】Networks/Paths—Create…打开Create Network对话框。
Read length from选Length
Optional Fields选择所有Fields,Options依需要选择,单击OK,找个地方起个名字将network保存下来。创建Network成功的话,TC状态栏会显示Network的路径(绝对路径)。
步骤3:建立最短路矩阵
当前层为路网层(或节点层),【菜单】Networks/Paths—Multiple Paths…,打开Multiple Shortest Path对话框。
Minimize选择需要参与计算的列(这里选择的是time,即TC按路段的行驶时间计算各小区间的最短值)。
From和To都选择Selection。
Store Results选择Matrix File。
单击OK,出现成功对话框,成功生成最短路矩阵。
步骤4:建立可应用于出行分布的费用矩阵
观察步骤3生成的阻抗矩阵可以发现,其矩阵ID是节点层的ID而非小区层的ID。而这个矩阵是无法参与到出行分布中去的。
因此,必须建立使用小区层ID作为ID的矩阵,才能够顺利进行出行分布的操作。
步骤4.1:处理最短路矩阵
【菜单】Matrix—Export,打开Maxtrix Export对话框,选择第2个互斥按钮,即按列输出该matrix。点击OK,选择bin格式保存。
得到包含RCIndex列的数据表。
选中RCIndex列,右键选择Fill…,弹出Fill对话框,可以快速修改该列的数据。
将RCIndex列的数值对应修改为小区层的ID值。
问题:手动修改RCIndex并不是推荐的方法,只不过笔者还没有找到更有效的方法,不得已而为之,不得已。
步骤4.2:新建矩阵
当前层为小区层(或节点层),【菜单】File—New—Matrix,打开Create Matrix File对话框。
IDs are in选择ID(若当前层为节点层,则选择Index),Rows from/Columns from选择All Features(若当前层为节点层,则选择Selection)。点击OK建立空白矩阵。
步骤4.3:将数据导入新建矩阵
当前矩阵为空白矩阵,选中矩阵第1列,【菜单】Matrix—Import,打开Matrix Import Wizard对话框。
选择相应互斥按钮,单击Next,
按上图选择内容,单击Next,
选择All Columns,并相应选择From里面的列,之后单击Finish,导入完毕。如果不能成功导入,可能是因为打开的matrix太多导致选择矩阵的时候出现错误,最无脑的方法是关闭其他无关的矩阵,只留下空白矩阵和要处理完的数据表。
步骤5:矩阵对角线0值的处理
使用多路径最短路方法得到的区内的出行距离为0,关于该0值的处理问题。TransCAD交流QQ群的某人提出了一个简单的方法,即采用该行/列(?)最小值的一半作为该小区内部的出行距离。这个方法从直观上看,假设超出小区出行半径的出行都被认为是区外出行,还是有合理成分的,如果对精度要求不高的话,如此处理对角线0值不失为一个简单有效的方法。
2010年07月20日晚于黄村
End