2012年,进入一家跨国科技公司的香港分公司工作,公司有个项目,是帮政府某部门建立的一套信息系统。我们作为系统维护人员,驻点到该部门进行系统维护工作。
该系统是一个很大的通讯信息系统,负责接受市民来电,然后做出一些对策帮助市名。每天24小时操作员在一排屏幕前收听来电和下发指令。整个信息系统包括了21个子系统,其中有通讯模块、车辆自动定位模块和地理资讯等模块。
--------------------------------------
该系統包括以下部分:
- 電腦調派系統:這是一個強力系統,具備處理多項工作的設定功能, 可以應付預計的工作量。
- 電話系統:這個系統可透過來電線路辨別系統, 自動分配來電,取得來電者地址資料,使確認及搜尋 現場地址的時間得以縮短。
- 地理資訊系統: 這個系統與自動車輛定位系統一起操作時,可在數碼地圖上顯示最接近報稱事故現場以及可動用的消防及救護資源,使調配工作更有效率。 這個系統亦可以提供有用的資料,例如位置、 氣體喉管的設計圖、樓宇及車輛通道的資料,協助執行滅火及救援行動。
- 系統亦包括無線數碼網絡 (可傳送數據及影像 往緊急車輛上負責收發現場資料的自動車輛 定位系統及流動數據終端機 )、自動車輛定位 系統 (自動提供所有流動資源的準確位置 數據 ),以及資訊管理系統 ( 記錄和分析資料 及資源管理等)。
- 其他支援系統包括保安系統、故障顯示管理系統、內線電話系統、不間斷供電系統、電訊網絡等。
---------------------------------------
整套系统是2002年开始设计,2005年开始交付使用。我们的维护工作,包括根据客户要求程序定制,增加功能,解决历年积压下来的大量bug。
我的工作范围是维护地理资讯模块,俗称电子地图,它显示全港地图,某部门车辆位置以及位置相关信息。
它有上百个图层,地图来自于政府各个部门,包括地政,交通、警务、水务等,力求达到资料丰富详尽,力图定位更准确接近真实。
为了将各种不同来源、不同格式的地图数据导入到数据库,也方便数据更新,专门做了一套GIS数据转换程序,每一种数据的操作,会在任务菜单上做一个按钮对应,这样客户用起来很便捷。我们主要工作是维护这套转换程序,要求准确无误得转化数据格式。另,每月要提交GIS相关硬件的情况报告。
在公司遇到的第一个问题是,某一政府部门提供的水渠数据,在导入后内容缺失,所以这么多年来,水渠一直没有正式导入地图里。
问题1:文字偏移
刚开始,项目经理和我们说的是: 渠道数据导入arcgis后,(道路的)文字偏离线条太远,文字方向不对,即是说是标注或助记出了问题。
对这个问题,我和深圳同事小Y一起解决。我们这边是项目管理部,深圳是开发部门。小Y在后台代码里查找,做了相应代码修改,将文字拉近距离,并旋转角度。她做好后给我测试,我测试了一下,发现文字确实靠近线条,就提交给客人。
我的工作,是检查深圳提交的程序,做一些完善,然后写份测试计划,给客人演示最新进展,如果客人觉得通过,再写测试报告提交。每一份文字材料,客户都会仔细审核,通过了才能到下一步。
然而,做演示时,客户并不满意,修改的程序被驳回。原来这个问题没那么简单,不止是文字标记问题,是我们的arcgis文件和原文件相比,内容丢失了太多。
客户的测试方法是,打开两台测试专用电脑,一台用microstation显示dgn文件,另一台打开arcgis文件,两边对比。转化后的arcgis地图文件明显缺了很多内容,一些线和矩形都没了,只有一些主线条,这不符合要求,我悻悻而归。
问题2: 没有microstation
这时,我们的测试机上没有microstation程序。要模拟出客户的测试环境,一定要安装microstation。于是我到处打听,我找了以前的供应商,原来因为microstation贵,当年只在客人那儿有装了两台,没在我们的机器上安装;供应商亦提供不到测试版。又在网上到处找安装文件。最后总算在我们机器上装了一台microstation,模拟出一个测试环境。
问题3: 图例是乱码和问号
但是,装好microstation后,在打开的.dgn图上,显示有很多问号,通常发生在两条线的交汇处。而arcgis图也有问题,同样的位置显示出一些乱码,比如方块笑脸什么的。
陷入了困境。这些乱码和microstation上的问号,即是说,标杆文件和待验证文件都不能正常显示,那我们无法知道数据是什么样,更不知道数据转化以后是否正确。
这时我先着手处理armgis上的乱码问题。
不知道这些交叉点到底显示的是什么,就记下某一图幅编号,到客户测试机那里打开microstation,拍几幅照片回来。原来那些位置是一些图例,比如圆里有个点、圆圈里有个叉、一个实心方块或空心方块,总之是一些特别图例。
我还了解到,原来客人只有那台测试机上的microstation显示正常,他们自己办公桌上的电脑里,microstation也是同样的问题,出现一个个问号。
我根据属性查询乱码到底是什么,最后发现arcgis之所以显示乱码,是因为系统里缺少正确的图例集。
Arcgis里有大量Esri自带图例集,例如water,gas类,于是我到处试,看是否Esri有合适的图例集,但试过很多但是都不对。
于是我准备自己来做一套图例,在还没搞清究竟有多少个图例,到底怎么做时,突然有一天运气,在系统中发现了一种图例,命名比较奇特,类似xxlixx,符合这套图例要求。
接着,我又发现,原来在工作电脑某个目录下有一个文件,有类似的命名,是exe可执行文件,打开正好是给microstation安装图例的。装上以后,惊奇得看到microstation里的问号统统不见了,显示出正确的图标。
问题4: 信息缺失
装好了图例以后,还是存在大问题,就是arcgis转完后数据缺失,包括很多线和多边形,剖面阴影等。
这时我和小Y分头找,我从主程序这边查;小Y则从子程序和函数里查,看是否循环或者哪里程序运行的时候发生溢出。
主程序读了几个文件,然后用一个for循环进行转换。其中读入的一个文件,在Arccatalog里可以见到详细内容,是一个二维列表,每项是一串数字,比如1,3,5,7,9;或是2,3,4,6,8...数字毫无规律,不知道什么意思。
又陷入困境。
有一天,我望着microstation的文件,dgn文件是一个数据集,里面有几个文件,每个文件里,有很多级(level),多达三四十级,通过勾选可以达到显示或不显示,但有的层勾选后会少一些内容,有的层勾选后好像没什么分别。
每一幅microstation的占用的层数不同,也没什么规律。microstation最多有64层,一般用了三、四十层,后面是空层。
我以前学过cad画图,cad和microstation都是用于工程结构图,有类似之处。cad的图层,同时包含各种类型图案:线,双线,连续线,矩形,圆形等都在一个图层里。
作图时,右边有一个列表,显示最近使用过的工具,level 1, level2......
我通过联想,觉得这些层和arccatolog的那些数字有关系,然后去验证了一下,发现确实如此。
那我按照arccatalog的数字去勾选了一下,出来的图形和arcgis里即是转完的数据显示一样。由此得知,我们的转换程序做了一次数据筛选,但不知道为什么,因为没有数据说明文档。
我希望能找数据说明文件,但据说一直都没有这个文件,也不好找客户要,实际客户也没有。就只有手头的原始数据和程序,没有说明文档。
问题5: 长线的缺失
找不到数据说明书,好多问题怎么也想不明白,忽然灵机一动,想起去数据的源头地-询问渠务署询问。
我上网查到渠务热线,拨通了电话。接线的阿姨很好,和我说了半天话,明白是技术问题,帮我转到了北区某技术处。技术主管也很有难心,大概和我介绍了一下数据格式,后缀名分别是什么意思:数据集里有的数据是辅助数据,比如宿舍什么的。至于一些更具体的问题,难以说清,他让我写邮件。
之前一次测试中,客人火眼金睛,发现了在一些很偏的地方,arcgis图里少了一条长线,那里只有一些不相连的短线,一截一截排在那里,没有长线将短线串连起来。
我写了一封email,用自己gmail邮箱发的(公司邮箱不能发信到外面),问了3个问题,数据格式,详细写了长线缺失问题,还附了图,给出具体例子:某区块某个编号的图。隔天就回电话,告诉我他,原来那条长线,是一条天然河流,不是水渠,所以不必在图上画出来。
问题6: 客户沟通
我发现接下来,得想法让客户改变测试验收方法。
这天向副项目经理做了汇报:1)dgn里的有些数据是辅助数据,是废的,无需导入数据库;2)到arcgis的数据需要筛选,筛选方法已有,即Arccatalog里的列表。我演示了一下,Microstation勾选后呈现的图和转化后Arcgis显示的图一摸一样。
我明白自己难以说通客户,于是求助项目经理,希望帮忙去和客户说说。庆幸的是,副项目经理听完汇报后同意了,真的去和客户说了。有天中午他上去客户那里,和客户“拗”了很久,超过半个小时,终于说服客人改测试方法,即先在Microstation里做勾选,再与Arcgis图做对比。
结果:
接下来比较顺利了。
和客户约好测试日期,到时去给客户装上所有补丁,教客户按照Arccatalog里筛选表的内容勾选各个levels(这一步比较烦复),然后再做对比工作。没想到,很快就通过了。第二天中午告诉副项目经理,这个项目通过了,他愣了一下,很惊奇,可能本来预着又会发生什么新问题的,没想到居然通过了。
总结:
历时半年,终于解决了这个悬而不决长达9年的bug。
之后系统首次将整个渠务数据导入到数据库。
回头看来,问题的解决没动多少程序,除了第一步改文字偏移问题时,改过程序。
其他很多时候都在查程序,分析逻辑,提出假设然后验证,要从各方面考虑:程序语法,逻辑,数据内容,格式, 以至客户沟通…需要系统性得思考问题,同时亦花费大量时间寻找各种的信息和资源;费时间的还有,一次数据转化耗时8小时,至少一个晚上,而且中间不能出任何差错(后来小Y在程序做了些改动,缩短了转化时间)。
其实这个bug产生的主要原因,是前同事做完以后,没留下具体的程序说明文档,没有注释,多种信息缺失,这中间的逻辑又比较复杂,造成了很多曲折。同时,数据没有说明书,造成很多不理解。
---------------------------------------
附: 发的技术咨询邮件(略)
(dgn数据集里,定义了9种后缀格式文件,其中4种格式– .SEL, .SEN, .SWL, .SWN –是表示水渠信息,其他格式表示辅助设施。而前4种数据里面,有一些无关信息,按照前述level进行筛选。)
---------------------------------------