陈波
(四川中水成勘院测绘工程有限责任公司,四川成都 610000)
地形图分幅图的传统制作方法是:先用AutoCAD 按标准图框裁成分块图,再套上业主的风格样式标准图框,手动修改图廓坐标。整个过程烦琐冗长,重复性操作较多,容易出现错误。针对上述问题,本文对AutoCAD 测绘成果的分幅图制作进行Auto-CAD 的二次开发,从而可以直接进行成果分幅,无须手动套特定样式的图框以及修改图廓坐标,进而优化分幅图的制作过程,本文以Python 语言为基础,对AutoCAD 进行二次开发。
大渡河CSJ 水电站YSG 渣场1:1000 地形图,西藏自治区XQ 流域水电规划ZX 梯级水电站施工场地1:1000 地形图、金沙江上游GT 水电站坝址区1:1000 地形图、重庆潼南SJHD 枢纽工程水下地形图1:500 地形图、西藏自治区XQ 流域水电规划ZX梯级水电站库区1:2000 地形地类图。
(1)《水电工程测量规范(NB/T 35029—2014)》;
(2)《1:5001:10001:2000 外业数字测图技术规程(GB/14 912—2005)》;
(3)《国家基本比例尺地图图式第1 部分:1:5001:10001:2000地形图图式(GB/T 20257.1—2017)》;
(4)《全球定位系统实时动态测量(RTK)技术规范(CH/T 2009—2010)》;
(5)《机载激光雷达数据获取技术规范(CH/T 8024—2011)》;
(6)《机载激光雷达数据处理技术规范(CH/T 8023—2011)》;
(7)《测绘作业人员安全规范(CH 1016—2008)》;
(8)《水电工程三维激光扫描测量规程(NB/T 35109—2018)》;
(9)《水电水利工程施工测量规范(DL/T 5173—2012)》。
2.1.1 AutoCAD
用于CAD 二次开发的计算机语言有很多:C#性能最好、功能最全,但是开发难度太高,开发效率低;VBA 或者VB,难度适中,性能一般,功能有限,VB 在CAD2010 版本以后就没有和CAD 一起安装;Lisp,CAD 原生语言,语法难度最低,但是可读性差。
2.1.2 Python 的特点
在近几年中,Python 在人工智能、web 开发之中应用广泛,同时在金融分析、爬虫等领域也具有很大的作用,其特点如下:简单易学,侧重解决问题,轻语法;面向对象的动态语言,支持函数式、泛型等多种编程范式[1];易于利用已有组件实现系统的功能,跨平台使用,又被称为胶水语言;将源代码转换称为字节码的中间形式,不需编译成为二进制的代码,可直接翻译运行;开源,代码是不保密的,方便共享,用于新的自由软件之中;可扩展性,兼容C 语言编写,然后再Python 程序中进行使用;丰富的库,Python 具有丰富强大的标准库,其中包含正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGl、FTP、电子邮件等;规范代码,采用强制缩进的方式让代码具有非常好的可读性。
2.1.3 Python 环境
集成开发环境是专用于软件开发的程序,集成了几款专门为软件开发而设计的工具,例如:VI/VIM,灵活,支持Python 开发环境自行查找或者撰写脚本,但不清楚模型编辑器是如何工作的;Visual Studio,是一款全功能集成开发平台,支持各种平台的开发;Visual Studio Code(也称作 VS Code)是一款兼容 Linux,Mac OS X 和Windows 平台的全功能代码编辑器,轻量级但功能齐全;PyCharm,是面向于Python 的全功能集成开发环境,开箱即用,可以在PyCharm 中直接运行和调试Python 程序,且它支持源码管理和项目,拥有众多便利和支持社区。本次使用PyCharm 环境,Python3.6,CAD2016。
表1 手动与软件工时对照
2.2.1 分幅图传统制作流程
为解决常规分幅带来的问题,各位研究者提出多种解决方案,并且在AutoCAD、ArcGIS 等软件平台进行实践[2],而传统的地形图分幅目前大多都在CAD 中完成:制作标准图框,包含图幅名称、单位名称、坐标信息、投影信息、成图比例尺、测图员、编图员、检查员、复查员等,按照规范以及业主方的要求设置字体样式、颜色等;CAD 中按结合图表裁切已经编辑好的地形图,按结合图表中的图号逐一命名存盘图号.dwg;将已经裁切好的图号.dwg 套上制作好的标准图框;修改上一步套上标准图框的图号.dwg 中的图廓坐标;按规范命名存储结果。
2.2.2 程序的核心模块和算法
本文编写的程序引用的模块主要有:Autocad(导入导出dwg文件)、APoint(存储点坐标)、array(存储分幅框的图幅范围)、time(延迟运行)、shapely(中间件)、wx(图形用户界面)、tempfile(创建临时文件和目录)、uuid(通用唯一识别码)、os(处理文件和目录)。
图1 软件设计流程
2.2.3 关键函数块
def get_path():通过对话框选取路径;def get_path():分幅范围信息;def execute():截取分幅框内图形,套入图框,存出图幅;def saveModel():处理图框模板;def moveModelMap():移动模板图幅到相应位置;def fillMapInfo ():填充图幅信息;def getNeighbor-Points():填充接图表且获取一个点周围的八个方向点。
从表1 可以看出插件对1:500、1:1000、1:2000 等大比例尺地形图的分幅图制作都是适用的,而且人工制作耗时平均一幅图耗时11~12min,而插件耗时为0.2min,省时约55~60 倍,极大地提升了工作效率,分幅成果图框的错误率也由10%降至1%以下。
(1)Python 与CAD 结合开发能减少测绘中的重复工作,极大地提高测绘生产效率。
(2)Python 代码简洁能快速提高开发效率。
测绘成果为区域经济规划、国土资源调查、城市建设规划等诸多方面提供大量的基础地理信息数据,例如水电站的设计、选址、施工、运营等。近年来,无人机由于具有体积小、造价低、使用方便、对环境要求低等优点而备受各界人士关注,并作为摄影测量平台应用于测绘行业当中[3]。无人机航空摄影测量可以方便快速的采集数据,而后期数据处理、制图都需要人工完成,Python 与CAD 的二次开发可用于地形图、断面等测绘成果中,也可推广到与其有关的如国土空间规划、工装设计、工业制图等成果中,可以很好地简化生产流程,缩短工期,提高效率。