公交线路中非直线系数中首末站空间距离怎么求?

公交线路中非直线系数中首末站空间距离怎么求?
2024年11月16日 05:55
有1个网友回答
网友(1):

  线路非直线系数是指公交线路长度与首末站之间空间直线距离之比。公交线路的长度可以直接通过线图层Length字段获取,因此计算的关键是求出线路首末站之间的空间直线距离。

  一种简单的方法是用工具栏中的尺子按钮测量每条线路两端点之间的空间直线距离,然后用线路长度除以这个距离就可以计算出一条线路的非直线系数。但当线路较多时用这种方法非常耗费时间,同时精度取决于鼠标点击位置的准确性。另外一种快速但稍复杂的方法,就是使用TransCAD内置的宏语言GISDK实现这一功能。下面给出用GISDK编程计算线路非直线系数的方法。

  首先在Windows下新建一个文本文件,将其名称改为“NLFactor.rsc”,注意扩展名必需为“rsc”而不是“txt”。用记事本打开这个文件,在其中输入以下代码:

  Macro "NLFactor" //宏名称
  //定义一个数据视图view,名称为“Route System”
  view="Route System"
  //将“Route System”置为当前图层
  SetLayer(view)
  //定义视图集view_set,其中包含了一个视图view
  view_set = view + "|"
  //得到视图集中的第一条记录
  rec = GetFirstRecord(view_set, null)
  //外层循环开始,遍历视图集中的所有记录
  while rec <> null do
  //根据视图中的字段ID得到线对象,返回该线对象的所有特征点
  pts = GetLine(view.ID)
  //定义一个距离变量,用于储存线对象长度
  length = 0
  //内层循环开始,遍历线对象的所有特征点
  for i = 1 to pts.length - 1 do
  //计算相邻两个特征点之间的距离并累加得到线对象长度
  length = length + GetDistance(pts[i], pts[i + 1])
  end //内层循环结束
  //计算线对象两端点之间的空间直线距离
  dist = GetDistance(pts[1], pts[pts.length])
  //线对象长度除以端点空间直线距离,得到线路非直线系数
  fac= length/dist
  //将该系数值写入“Route System”图层的“NLFactor”字段中
  view.NLFactor=fac
  //得到视图集中的下一条记录
  rec = GetNextRecord(view_set, null, null)
  end //外层循环结束
  //计算结束,弹出提示框
  ShowMessage("Success!")
  endMacro //宏结束

  输入上述代码后,保存“NLFactor.rsc”文件,然后启动TransCAD,打开要计算非直线系数的线类型地理文件,然后运行这个宏就可以。具体方法参看我的上一篇文章《GISDK典型程序实例之:线数据重采样》。注意线图层中增加一个字段“NLFactor”,用于存放计算后的线路非直线系数。