yanxiaoyong的个人博客分享 http://blog.sciencenet.cn/u/yanxiaoyong 在路上……

博文

GISDK典型程序实例之:非直线系数计算

已有 10806 次阅读 2010-4-29 11:50 |个人分类:程序设计|系统分类:科研笔记| GIS, 程序设计, 交通规划

        本文摘自我编写的教材《交通规划软件实验教程(TransCAD 4.X)》中的8.3.3节(有修改),是一个用来计算公交线路非直线系数的GISDK程序。

        线路非直线系数是指公交线路长度与首末站之间空间直线距离之比。公交线路的长度可以直接通过线图层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”,用于存放计算后的线路非直线系数。



https://blog.sciencenet.cn/blog-404069-317446.html

上一篇:GISDK典型程序实例之:线数据重采样
下一篇:这也叫足球?无语了
收藏 IP: .*| 热度|

0

发表评论 评论 (5 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-1 19:40

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部