利用VBS编程语言实现清华山维EPS展绘点状地物

(整期优先)网络出版时间:2023-04-22
/ 2

利用VBS编程语言实现清华山维EPS展绘点状地物

李龙山

吉林省易航测绘地理信息有限公司  吉林 长春 130062

摘要:清华山维EPS地理信息系统是以数据库为核心,综合CAD技术与GIS技术,从地理信息角度创建数据模型与图形属性共存为一体,提供了数据采集、数据编辑、数据监理、数据转换、数据分发、数据库建设、数据更新到GIS分析应用的综合地理信息系统平台。伴随着测绘仪器设备的不断发展,可使用无人机、三维激光扫描仪等设备生产出DOM(数字正射影像图)、DEM(数字高程模型)、DRG(数字栅格地图)、DLG数字线划地图)以及复合模式组成的测绘成果。使用全站仪、RTK等设备采集外业数据时可以方便的输入编码,使用清华山维PES软件可以利用VBScript脚本语言根据地物点7位国标编码直接展绘出相应的符号,提高了工作效率。本文阐述如何利用VBScript脚本语言读取测绘仪器的CASS格式数据,然后利用EPS内置函数,直接展绘独立地物符号,以减轻内业编辑的劳动强度。

关键词:清华山维EPS;编码;VBScript脚本语言

0引言

测绘行业随着国产自主研发的GIS类平台软件清华山维EPS的发展,许多实用模块例如外业测图、点云处理、管网处理、地籍处理、房产处理、土地利用、立体测图、变形观测、地理信息系统等都很好的服务于生产实践中。VBScript是Visual Basic Script的简称,即 Visual Basic 脚本语言,有时也被缩写为VBS。它是一种微软环境下的轻量级的解释型语言,它使用COM组件、WMI、WSH、ADSI访问系统中的元素,对系统进行管理,是一种非常流行的编程语言。测绘外业生产中作业员每天要采集许多条外业数据,把这些数据用约定的编码进行归类,然后用VBScript编程脚本语言根据地物编码展绘相应地物,使得复杂的任务变得简单容易,提高了生产效率,减少了手工作业产生的错误。

1程序设计思路

首先自定义分解每行CASS格式数据过程,然后读取CASS格式外业数据文件分解成点名、编码、东坐标、北坐标、高程数组,然后根据EPS函数依据7位国标码创建相应独立地物,添加新创建图形对象空间点、点名到存库列表,最后保存存库列表对象到数据库,完成展绘相应独立地物点。

2主要程序代码

整个程序中重要代码如下:

'自定义分解字符串到数组strs(4)中的过程

Function ScanString(ByVal str, ByVal sep, ByRef strs(), ByRef count)

Dim sepidx1, sepidx2, strtemp

count = 0 : sepidx1 = 1 : sepidx2 = InStr(sepidx1 , str, sep, 1)

While (sepidx2 > 0)

strs(count) = Mid( str, sepidx1, sepidx2-sepidx1)

sepidx1 = sepidx2+1 : sepidx2 = InStr(sepidx1, str, sep, 1): count = count + 1

Wend

strs(count) = Mid( str, sepidx1, Len(str)+1-sepidx1) :count = count + 1

End Function

Sub OnClick()    '脚本入口函数

dim fileName ,  tf, zfc,strs(4),count, dm1,dm,bm,x,y,z   '声明变量filename-----z

fileName = SSProcess.SelectFileName(1,"",0,"南方CASS坐标数据(*.dat)|*.dat|All Files (*.*)|*.*||")    '选择南方CASS外业数据文件名

Set fso = CreateObject("Scripting.FileSystemObject")       '创建script文件系统实例

Set tf = fso.OpenTextFile(fileName, 1)              '以只读方式打开坐标数据文件

do   While Not tf.AtEndOfStream          '开始循环,直到读取数据文件完毕

zfc=trim(tf.readline())            '读取一行文件数据去掉首尾空格

ScanString zfc, ",", strs, count     '以逗号分解字符串到数组strs()中

dm1=strs(0) bm=ucase(strs(1))       ' dm1为点号,转换编码为大写

if bm<>"" then       '如果编码不为空

dm=dm1 & bm               '点名为点号加编码,方便展点后编辑数据

      else

      dm=dm1                   '编码为空点名为点号

      end if

x=strs(2) :  y=strs(3) : z=strs(4)     '东坐标、北坐标、高程

select case bm            '选择编码变量

case "SSJ"      '编码是上水检修井

 SSProcess.createnewobjbycode 5430051 '创建新图形对象上水检修井

    SSProcess.addnewobjpoint  x,y,z,0,dm      '添加新对象的空间点和点名

    SSProcess.addnewobjtosaveobjlist            '添加新创建图形对象到存库列表

……'同理以下是创建新图形对象路灯的过程,省略创建其他图形对象过程

    case "LD"

    SSProcess.createnewobjbycode 3805011

    SSProcess.addnewobjpoint  x,y,z,0,dm

    SSProcess.addnewobjtosaveobjlist

case else       '编码不在自定义的编码列表中

    SSProcess.createnewobjbycode 0       '依据地物编码0创建新图形对象点

    SSProcess.addnewobjpoint  x,y,z,0,dm

    SSProcess.addnewobjtosaveobjlist

    end select        '结束选择语句

loop             '结束循环语句

SSProcess.SaveBufferObjToDatabase       '保存存库列表对象到数据库

tf.Close       '关闭坐标数据文件

End Sub    '结束脚本

3结论

通过这个程序,可以根据CASS外业数据的编码来展绘EPS相对应的独立地物。虽然程序代码简单,但可以大大的提高工作效率。

参考文献

[1]《VBScript程序员参考手册(第三版)》.清华大学出版社.2009年2月

[2]《EPS地理信息基础平台使用说明书》.北京清华山维新技术开发有限公司.2009年7月