今将PDA矢量图控件开源。该控件是一个矢量图展示性控件,这是根据需求而定的,因此我没有加上一些实时的编辑操作的支持。该控件是在2007年3月份到4月之间完成的。其效果如图所示:(在PPC2002模拟器中)
由于PPC的屏幕太窄,所以右侧的工具栏没有办法展示全部按钮,其他按钮放在了菜单的“当前工具”中。可以用鼠标拖动(Pan工具),用鼠标矩形缩放,点击设置中心点,还原到适应全图,放大,缩小,双击地图对象(菜单中选中查看信息工具)。
此外就是使用控件本身提供的三个对话框,可以实现图层管理控制(例如是否显示,是否可点击),实现导航等功能,不过由于PPC一次只能显示一个窗口,所以导航功能(本来是模拟Photoshop的导航图效果的)的视觉效果将大打折扣,因为正常的效果是一个浮动在控件上的小窗口,可以看到在导航对话框上的拖动实时反应到控件。
源码是依然已 VS2003 + .NET Compact Framework 1.1 的形式提供的(如果使用更高级的IDE请自行升级),源码是使用C#语言编写的。在那个时候的.NET还有很多今天的特性没有添加,例如泛型等。所以在代码里可以看到在应该使用泛型的时候,我是用一种比较费力的重复性编码来完成的。
在附件中我放置了几个从实际管理系统中导出的单线图,还有一个从 mif 地图转换而来的世界地图(如上图所示)。还有一份我当年写的技术文档,不过这份文档写的不够完整,只写了一小部分信息,主要是描述我的自定义文件格式。在 AssemblyInfo.cs 中还可以看到我当年用注释形式记录的一些笔记。
在控件的代码里有一部分算法,例如判断点捕捉线段,多边形,还有图元的几何变换和逆变换(平移,缩放,旋转),其中有一部分我曾经写过文章讲解过,例如图元变换,视图参数缓存的环形队列结构,这些在当年我曾经大量演算,消耗了不少草稿纸,下面是一部分我当年的演算草稿:
最后我提供的是源码的下载连接:
http://files.cnblogs.com/hoodlum1980/GisCtrl_Src.rar
这个源码之前我曾经提供了一个DLL版本的范例,即《发布一个用于WinCE的矢量图控件》这篇文章中所提到的控件。后来我多次提到要将它开源,但因为精力所限,一直没有兑现,今天我特意将它开源。由于我的研究方向在2008年开始从C#.NET逐渐转移到C++方向,所以我今后也不太可能继续去维护它了,所以开源也许是一个唯一比较好的选择。这个控件的代码我曾经说过,代表了我当时的最高水平。我在编写它的过程中,主要考虑的是代码效率,希望这个控件具有尽可能更好的性能,尽可能更少的内存使用。最终产出的就是这样的一个控件,它的性能和功能已能很好的满足当年的项目需求:即展示单线图,并且能把图上的对象和设备信息数据关联起来,当用户在单线图上双击,将弹出设备的属性对话框,巡检员可以修改设备属性,然后再回到办公室将修改同步到数据库,当然我们当时还是设想了用gprs实时同步数据的,包括在野外实时差分校正GPS数据等,但是受限于整个环境和研发能力,这些想法在那时并没有全部实现。在这个项目中,这个控件只是一个模块,此外还有其他的模块,例如有的具有很复杂的逻辑,在实现时具有很高的挑战性和难度,还有一些我觉得实现的较好地方,但是他们多数是为特定需求定制的,所以就不都提供了。
--hoodlum1980