本书是GIS系统开发技术和Visual C++编程技术的集合体。全面介绍和分析了MFC程序的框架结构和各种MFC辅助工具的使用方法,实例剖析了MFC中与图形和数据库应用程序设计有关的类。介绍了GIS系统的开发方法和思路,结合具体代码开发实现了矢量图形系统、数据库管理系统、矢量图形系统和数据库管理系统之间的连接、空间信息查询、图形几何关系计算、区域重叠分析、缓冲区分析、网络分析等功能,实现了一个基本GIS。\r\n 本书是作者2000年出版的《Visual C++开发GIS系统——开发实例剖析》一书的基础上,总结近几年实际开发的经验和技术,进行修订并补充了很多新的内容而写成的。本书既保持了集开发思路、系统构筑、编程技术、实现代码于一体的特点,又在具体内容上进行了更新,融合了许多新的技术,更加强调了实用性。\r\n 本书适用于GIS、CAD、MIS等领域的软件开发人员,以及大专院校的师生。本书的代码适用于VC++5.0,VC++6.0及其新版本。
第1章 VC++开发GIS的思路\r\n第一篇 VC++程序设计技术要点\r\n 第2章 MFC应用程序设计的开发工具\r\n 第3章 MFC应用程序框架\r\n第二篇 实现基本矢量图形系统\r\n 第4章 与绘图操作有关的MFC类及操作\r\n 第5章 实现矢量图形系统的文档和视图\r\n 第6章 鼠标交互绘图\r\n 第7章 矢量图形系统的操作功能\r\n 第8章 图形的选中、移动、旋转、删除\r\n 第9章 图形的存取功能\r\n 第10章 矢量图形系统的其他功能\r\n第三篇 实现数据库管理系统\r\n 第11章 开发数据库应用程序的基础知识\r\n 第12章 数据库应用程序开发技术\r\n 第13章 实现数据库浏览功能\r\n 第14章 实现数据库编辑功能\r\n 第15章 通用数据库过滤功能\r\n 第16章 数据库管理功能通用化\r\n第四篇 实现GIS的常用功能\r\n 第17章 图形元素与属性数据的连接\r\n 第18章 图形元素的平面几何关系计算\r\n 第19章 多边形区域叠加分析\r\n 第20章 缓冲区分析\r\n 第21章 网络分析\r\n附录 代码光盘与技术支持\r\n参考收目
陈建春,34岁,北京交通大学教师、博士长期从事GIS、MIS、CAD、DSS、通用表格系统等的研究和开发工作,开发完成了“通用多媒体GIS”、“青藏铁路调度指挥系统”、“国税纳税申报系统报表制作工具”、“新建铁路施工指挥系统”、“地质图形浏览系统”、“绣花图形编辑系统”、“空中交通管制调度指挥系统”等。先后出版过《Visual C++开发GIS系统》(第一版)、《Visual C++高级编程技术》、《Microsoft Visual C++ 衅形系统开发技术基础》、《矢量图形系统开发与编程》等多部专著。翻译出版了《使和C#进行ASP程序设计》、《Windows 200 Serever规划与移植》等著作。
本书是2000年9月出版的《VisuMC++开发GIS系统——开发实例剖析》的第二版。第一版出版以后,受到了欢迎,同时,读者也陆续提出了许多新的问题,希望得到解答。这些问题集中在地理信息系统(GIS)的一些功能上:例如,怎样计算区域之间的叠加关系?如何计算环形区域之间的叠加关系?如何用图形描述网络?如何计算点、线、面的缓冲区?如何实现网络分析功能?等等。在这种情况下,作者把近几年来自己在GIS系统开发过程中的认识、经验和技术进一步做了总结和整理,决定出版此书的第二版。第二版对第一版的内容进行了全面整理、优化和修正,并增加了网络类图形元素、区域的重叠分析、缓冲区分析、网络分析等全新的内容。
近几年来,GIS技术在全球得到了迅猛的发展,它已经成为IT的重要组成部分。利用GIS技术开发的以多媒体、网络化、自动化为特色的信息处理、信息管理、指挥调度和决策支持系统,已经在各领域发挥着重大作用。GIS技术已经成为电子商务、电子政务、电子军务的重要技术支撑。正因为如此,用于开发GIS的专业开发工具也得到了飞速发展,出现了大量GIS的专业开发工具。应用专业开发工具开发GIS,具有开发起点高、可靠性好、相对简单易学等优点;但也存在着可扩展性差、适用性差、系统庞大、没有系统版权等缺点,尤其是,这些专业开发工具总体上来说还是一个难于真正修改的“黑匣子”,很难通过无缝集成实现实用系统的特殊功能。
应用VC++可以迅速开发出满足特殊要求的实用GIS系统,并在灵活性、可扩展性、系统版权、技术积累等各个方面具有无可比拟的优点。
编写本书的思路
编写本书的思路,在于以开发一个基本GIS为主线,一步步引导读者,去掌握面向对象程序设计的精髓,全面分析MFC程序框架的组成和结构,掌握GIS的开发思路和开发方法。结合VC++开发技术,实例开发组成GIS的矢量图形系统、数据库管理系统、矢量图形系统和数据库管理系统的连接、信息统计和检索、图形几何关系计算、区域重叠分析、缓冲区分析、网络分析等功能模块。使读者能够从程序设计思想、系统构筑、数据组织、MFC程序设计技术、VC++开发工具应用等各个方面,综合掌握MFC程序设计的技术精华。通过本书的内容,期望对读者能有所启发,从程序设计思想和编程技术等方面全面提高系统分析能力和设计能力,并在掌握本书实例开发的GIS基础上,能够自行完善各个功能,开发出各行各业的实用。
本书的特点
●本书是作者多年利用VC++从事开发实用GIS、MIS、DSS、CAD系统的实践经验和技术的提炼和总结,所以本书是理论与实践相结合的产物,是GIS开发方法与具体编程实现合二为一的成果,具有很强的实用性。
●本书通过介绍一个实际的开发过程,并从一个利用AppWizard生成的程序框架出发,一步步展开,分析和组织GIS的数据结构,开发实现了包含基本功能的矢量图形系统、数据库管理系统、矢量图形系统和数据库管理系统的连接、信息统计和检索、图形几何关系计算、区域重叠分析、缓冲区分析、网络分析等功能模块。在开发过程中,结合实际代码进行了实例剖析,让读者在一个实际的开发过程中,掌握系统的设计思路和各种开发技术、开发方法。作者以实际代码结合VC++设计技术向读者介绍系统的具体设计过程,避免了枯燥无味的讲解。
●本书提供完整的源程序代码和全面翔实的代码注释。本书中的内容都是从实现思路、实现方法和具体实现等几个方面进行讲解。作者给出了以标准格式书写并经过全面调试的代码,并在代码中给出了完整的中文注释,使读者尤其是初学者能够轻松地掌握书中的内容。
本书概要
本书的第1章介绍了GIS的特点及其开发方法,介绍了使用VC++开发GIS的思路。本书共分为四篇。
第一篇介绍了VC++程序设计要点。
第2章介绍和剖析了AppWizard、ClassWizard、ClassView、ResourceView、FileView等各个MFC应用程序设计中必须或辅助使用的开发工具;第3章剖析了MFC应用程序框架,介绍了MFC程序框架的组成、基本类和构成思路。
第二篇具体开发实现了一个基本矢量图形系统。
第4章介绍了各种与图形系统设计有关的MFC类和与绘图有关的一些基本操作;第5章实现了基本矢量图形系统的文档和视图;第6章介绍了鼠标交互绘制图形元素的方法,实现了直线、连续直线、圆、圆弧、标注文本、多边形区域、网络点等的交互绘制功能;第7章实现了矢量图形系统的重画、放缩、移动、回溯、显示全图、滚动等操作功能;第8章介绍了鼠标点选图形元素的功能,实现了移动、旋转、删除图形元素等操作功能;第9章介绍了利用串行化存取文档的方法,实现了图形外部文件存取功能;第10章介绍了矢量图形系统的其他一些功能,介绍了子图块组织、图形参数管理、线型定制、子图填充、图形打印输出、与其他系统的接口等功能的实现方法或思路。
第三篇具体开发实现了一个数据数据库管理系统。
第11章介绍了开发数据库应用程序的基础知识,介绍了关系数据库、SQL语言中的基本子式,以及创建ODBC数据源的静态和动态创建方法;第12章剖析了数据库应用程序开发技术,介绍了用AppWizard创建基于ODBC数据库应用程序步骤,详细介绍记录集合类CRecordSet和视图类CDataView所能完成的功能,剖析了各种数据库管理功能的实现步骤;第13章介绍了数据库浏览功能,具体实现了一个数据库浏览视图;第14章具体实现了增加、修改、删除记录等数据库编辑功能;第15章介绍了通用数据库过滤功能,具体实现了一个通用过滤条件编辑器;第16章介绍了通用化数据库管理功能的方法,具体实现了对数据库管理功能的通用化。
第四篇开发实现GIS的一些常用功能。
第17章介绍了在矢量图形系统与数据库管理系统之间建立连接的方式和方法,实现了矢量图形系统与数据库管理系统之间的双向信息查询功能;第18章具体实现了各类图形元素的平面集合关系计算;第19章介绍了多边形区域的重叠分析,实现了多边形区域之间相交、相并、剪裁计算的具体步骤,介绍了环形区域之间相交、相并、剪裁计算的思路;第20章介绍了缓冲区分析功能,具体实现了点、线、面的缓冲区计算;第21章介绍了网络分析功能,具体实现了最佳路径分析、最佳游历路径分析、资源分配、连通分析等功能。
对读者的要求
阅读本书要求读者具有C和C++编程的一些基本知识。受篇幅所限,本书对具体的MFC类函数不做过多的说明,读者可以结合一些VC++的参考手册阅读。本书介绍的编程技术和开发实例是在VC++6.0企业版上实现的,对VC++5.0以及VC++新版本同样适用。
曾学贵教授、魏庆朝教授对于本书的编排进行了悉心指导并提供了宝贵意见,白雁、万传风、杨永平、王斌、高振宇、郭文军、周敏等同志参加了本书的编写工作,杜薇等同志参加本书的录人工作,在此一并感谢。
由于作者水平有限,书中雉免有错误和疏漏之处,敬请读者给予批评指正。
陈建春
2004年3月于北京交通大学