第1章 VC++开发GIS的思路 1
1.1GIS简介 1
1.1.1GIS的应用领域和范围 1
1.1.2GIS与其他系统的结合 1
1.1.3GIS的专业开发工具 2
1.1.4GIS专业开发工具的优缺点 3
1.1.5VC++开发GIS的优缺点及应用前景 4
1.1.6选用GIS的开发方法 5
1.2.1开发相对完整的矢量图形系统 6
1.2VC++开发GIS的思路 6
1.2.2开发属性数据库管理系统 7
1.2.3建立矢量图形系统与数据库管理系统的连接 7
1.2.4开发各种查询检索、空间分析、网络分析功能 8
第一篇 VC++程序设计技术要点 11
第2章 MFC应用程序设计的开发工具 11
2.1使用MFCAppWizard 12
2.1.1MFCAppWizard的启动 13
2.1.2利用MFCAppWizard产生MFC应用程序的步骤 14
2.2使用ClassView 18
2.2.1启动ClassView 18
2.2.3增加类 19
2.2.2编辑定位 19
2.2.4增加类的成员 22
2.3使用ResourceView 23
2.3.1ResourceView的调用 24
2.3.2ResourceView工作分析 24
2.4使用FileView 28
2.4.1打开一个程序项目 28
2.4.2FileView相关的操作功能 28
2.5使用ClassWizard 30
2.5.1Windows消息 30
2.5.2消息处理函数 32
2.5.3ClassWizard的作用和启动 34
2.5.4ClassWizard管理消息处理函数 35
2.5.5ClassWizard管理重载虚函数 39
2.5.6ClassWizard管理映射变量 41
2.5.7管理Automation和ActiveX事件 45
2.5.8重新创建开发项目的ClassWizard工作信息 45
2.6使用DataView 46
2.7管理多个程序项目 47
2.8使用各设计工具进行编程的几点建议 48
第3章 MFC应用程序框架 50
3.1MFC程序基本框架类和文件组成 50
3.1.1基本程序框架类 50
3.1.2应用程序主要源文件组成 51
3.2MFC应用程序中各个框架类的作用 52
3.3MFC应用程序的执行步骤分析 54
3.4MFC应用程序设计结构体系剖析 56
3.4.1标准菜单的执行分析 56
3.4.2修改标准菜单执行功能 58
3.4.3MFC应用程序多态性的实现 59
3.4.4MFC应用程序中各个框架类对象的相互调用关系 61
4.1.1绘图类简介 65
4.1绘图类 65
第4章 与绘图操作有关的MFC类及操作 65
第二篇 实现基本矢量图形系统 65
4.1.2几个绘图类的主要差别 66
4.1.3绘图类的使用方法 67
4.2绘图设备类 68
4.2.1CGdiObject类 68
4.2.2CPen类 68
4.2.3CBrush类 71
4.2.4CFont类 73
4.2.5CRgn类 77
4.2.6CPalette和CBitmap类 82
4.3.1Windows映像方式及其设置方法 83
4.3坐标映像方式 83
4.3.2逻辑坐标和设备坐标的转换 84
4.4窗口和视口 85
4.4.1窗口和视口的概念 85
4.4.2窗口和视口有关的操作函数 85
4.4.3窗口逻辑坐标与视口设备坐标的转换 86
4.5其他绘图类操作函数 89
4.5.1选用绘图设备对象 90
4.5.2主要绘图属性设置函数 91
5.1组织矢量图形系统的图形元素类 93
5.1.1图形元素基类的组织 93
第5章 实现矢量图形系统的文档和视图 93
5.1.2点类图形元素组织 94
5.1.3线类图形元素组织 98
5.1.4面类图形元素组织 100
5.1.5网络类图形元素的组织 101
5.1.6图形参数类 102
5.2组织矢量图形系统的文挡 104
5.2.1组织面向对象的文档管理机制 104
5.2.2利用MFC模板创建管理图形元素对象指针的对象 104
5.2.3实现矢量图形系统的文档 105
5.2.4实现文档的管理功能 106
5.3.1建立坐标系 116
5.3实现矢量图形系统的视图 116
5.3.2实现各类图形元素的绘制功能 122
5.3.3视图类的OnDraw函数 133
5.3.4实现视图 135
5.4各类图形元素几何属性的计算 136
5.4.1图形元素长度的计算 136
5.4.2图形元素面积的计算 138
第6章 鼠标交互绘图 140
6.1用鼠标绘图要解决的主要问题 140
6.1.1捕捉鼠标操作消息 140
6.1.4保存图形数据到文档 142
6.1.3在屏幕上拖动图形 142
6.1.2捕捉所有的鼠标输入 142
6.1.5将图形以实际的形态重画 143
6.2交互绘制各类图形元素 143
6.2.1加入绘图菜单 143
6.2.2获得图形元素的惟一识别号 146
6.2.3绘制直线 148
6.2.4绘制圆和填充圆 151
6.2.5绘制圆弧 154
6.2.6交互绘制标注文本 162
6.2.7绘制连续直线和多边形区域 170
6.2.8绘制网络点 173
6.2.9绘制网络连接 174
第7章 矢量图形系统的操作功能 177
7.1增加图形操作菜单 177
7.1.1增加菜单资源 177
7.1.2增加消息处理函数 178
7.2图形重画 179
7.2.1全屏重画 179
7.2.2局部重画 180
7.3图形放大和摆动 181
7.3.1图形放大和摆动的计算方法 181
7.3.2图形放大和图形摆动功能的实现 183
7.4重画上屏和重画首屏 186
7.4.1记录屏幕状态 186
7.4.2实现重画上屏和重画首屏功能 189
7.5显示全图 190
7.5.1各类图形元素的边界矩形计算 191
7.5.2实现显示全图功能 195
7.6提高矢量图形系统重画速度的基本方法 198
7.6.1提高图形重画速度的方法 198
7.6.2提高图形重画速度的实现方法 198
7.6.3提高图形元素的绘制速度 200
8.1.1各种图形元素的选中区域 202
第8章 图形的选中、移动、旋转、删除 202
8.1鼠标点选图形元素 202
8.1.2各种图形元素的点选判断函数 207
8.1.3选中图形元素的特殊显示 212
8.1.4实现点选图形元素功能 212
8.1.5放弃选中的图形元素 218
8.1.6图形元素的显示和选中顺序 219
8.2图形移动 220
8.2.1各类图形元素的移动操作 220
8.2.2实现图形移动操作功能 222
8.3.1点与点的旋转操作 225
8.3图形旋转 225
8.3.2各类图形元素的旋转操作 227
8.3.3实现旋转操作功能 229
8.4图形元素的删除 229
8.4.1删除操作的类型 229
8.4.2从屏幕上删除图形元素的方法 230
8.4.3各类图形元素的删除操作 231
8.4.4实现图形元素删除操作 235
第9章 图形的存取功能 237
9.1利用串行化存取文档 237
9.1.1CArchive类及CArchive对象的创建 237
9.1.2Serialize函数 239
9.1.3CObArray类的Serialize函数 241
9.2实现矢量图形系统的存取功能 242
9.2.1实现各个图形元素类的串行化 242
9.2.2MFC框架程序的文档串行化机制 248
9.2.3实现矢量图形系统的文档存取功能 249
9.2.4设置和取消文档修改标志 251
第10章 矢量图形系统的其他功能 253
10.1子图块管理 253
10.1.1组织管理子图块 253
10.1.3实现子图块的绘制功能 255
10.1.2创建子图块的方法 255
10.2管理各种图形参数 257
10.2.1管理颜色 257
10.2.2管理图层 260
10.3定制线型 262
10.3.1线型的描述方式 262
10.3.2实现线型所必须具备的功能 263
10.3.3线型体的数据定义 266
10.4区域的子图填充 268
10.4.1管理填充子图块 268
10.4.2绘制填充子图块 268
10.5与其他图形系统的接口 272
10.5.1读入其他图形系统的图形 273
10.5.2输出可识别的接口文件 279
10.6图形的打印输出 281
10.6.1视图的打印机理和实现方法 282
10.6.2打印功能的实现方法 282
10.6.3实现矢量图形系统的打印功能 285
第三篇 实现数据库管理系统 293
第11章 开发数据库应用程序的基础知识 293
11.1关系数据库 293
11.1.1数据库的概念 293
11.2SQL语言 295
11.1.2关系数据库的基本术语 295
11.2.1选择子式 296
11.2.2过滤子式 298
11.2.3排序子式 299
11.3ODBC及创建ODBC数据源的方法 301
11.3.1ODBC的优势 301
11.3.2VC++中使用ODBC的方法 302
11.3.3创建ODBC数据源 302
11.3.4动态创建ODBC数据源 308
12.1.2MFCAppWizard创建一个数据库应用程序的步骤 312
12.1.1创建一个ODBC数据源 312
12.1创建基于ODBC的数据库应用程序 312
第12章 数据库应用程序开发技术 312
12.2CRecordSet类功能分析 314
12.2.1连接数据源和创建记录集合 315
12.2.2与记录集合的数据交换 318
12.2.3打开和关闭记录集合对象 320
12.2.4过滤记录集合 320
12.2.5排序记录集合 321
12.2.6移动指向记录集合的记录指针 323
12.2.7修改记录集合 326
12.2.8CRecordSet类的其他操作功能 328
12.2.9MFCClassWizard管理CRecordSet派生类 331
12.3CRecordView视图类分析 336
12.3.1CRecordView视图类 336
12.3.2CRecordView视图对象与记录集合对象的联系 337
12.3.3MFCClassWizard管理CRecordView派生类 339
12.4基本数据库管理功能实现剖析 344
12.4.1浏览功能 344
12.4.2增加一个操作菜单 350
12.4.3记录编辑功能 352
12.4.4数据库过滤功能 355
12.4.5数据库排序功能 359
13.1.1视图的创建过程 361
第13章 实现数据库浏览功能 361
13.1创建一个数据库浏览视图 361
13.1.2创建另外一类视图的步骤 363
13.1.3在矢量图形系统中创建数据库浏览视图 366
13.2创建一个CRecordSet派生类对象 373
13.2.1创建一个ODBC数据源 374
13.2.2创建管理记录集合的CRecordSet派生类 375
13.2.3创建记录集合对象 376
13.3实现数据库浏览视图 377
13.3.1建立视图与记录集合对象的联系 377
13.3.2获得数据库浏览视图的滚动区域 378
13.3.3实现数据库浏览视图 379
第14章 实现数据库编辑功能 385
14.1在数据库浏览视图中建立记录指针 385
14.2建立数据库编辑功能操作菜单 389
14.2.1修改菜单资源 389
14.2.2创建消息处理函数 389
14.3建立编辑数据记录的对话框类 391
14.3.1建立对话框资源 391
14.3.2创建编辑数据记录的对话框类 392
14.3.3设置对话框类的外部对象引用 392
14.3.4建立对话框控制与记录集合类的映射变量的映射联系 394
14.4.1获得记录的惟一识别号 396
14.4增加和修改数据记录 396
14.4.2增加记录 397
14.4.3修改记录 401
14.5删除记录 402
14.5.1删除当前记录 402
14.5.2删除所有记录 403
第15章 通用数据库过滤功能 405
15.1过滤操作的实现方式 405
15.1.1固定条件过滤操作 405
15.1.2固定方式过滤操作 405
15.1.3通用条件过滤操作 406
15.2创建组织过滤条件的对话框类 407
15.2.1创建对话框资源 407
15.2.2创建组织过滤条件的对话框类 408
15.3组织过滤条件编辑器的各种功能 409
15.3.1过滤条件编辑器编辑的过滤条件式的语法格式 409
15.3.2定义和初始化对话框类的变量 410
15.3.3产生和分解各级条件子式 413
15.3.4初始化对话框的状态 418
15.3.5增加条件子式 419
15.3.6删除和修改条件子式 425
15.3.7条件子式的分解功能 429
15.3.8实现过滤操作 432
15.4在数据库浏览视图中实现过滤功能 434
15.4.1增加一个操作菜单 434
15.4.2实现数据库过滤操作功能 435
15.5增强过滤条件编辑器的功能 436
15.5.1增强过滤条件分解能力 436
15.5.2增强交互式编辑界面 437
15.5.3存储过滤条件 438
16.1.1可通用化的数据库管理功能 439
16.1各种数据库管理功能的可通用化分析 439
第16章 数据库管理功能通用化 439
16.1.2不易通用化的功能 440
16.2实现数据库管理功能通用化 440
16.2.1通用化功能模块的方法 441
16.2.2数据库操作功能模块通用化的步骤 443
16.2.3选择操作不同的记录集合对象 448
16.2.4增加应用程序管理的记录集合对象 451
16.2.5增加通用数据库操作功能 455
16.3数据库管理功能完全通用化 457
17.1.1连接方式 461
17.1连接方式及连接单元 461
第17章 图形元素与属性数据的连接 461
第四篇 实现GIS的常用功能 461
17.1.2连接单元 462
17.1.3连接的特性 462
17.2属性数据的连接方法 463
17.2.1隐含固定连接法 463
17.2.2动态组织连接信息法 464
17.3实现双向信息查询检索 470
17.3.1通过属性数据检索矢量图形元素 470
17.3.2通过图形元素检索属性数据 472
18.1.1直线与直线的关系 475
18.1直线与多边形区域的关系 475
第18章 图形元素的平面几何关系计算 475
18.1.2直线与多边形区域的相交关系 479
18.1.3连续直线与多边形区域的相交关系 482
18.2圆弧与多边形区域的关系 485
18.2.1圆与直线的关系 486
18.2.2圆弧与直线的关系 489
18.2.3圆弧与多边形区域的关系 492
18.3各类图形元素与圆形区域的关系 495
18.3.1圆与圆的关系 495
18.3.2圆弧与圆形区域的关系 497
18.3.3直线与圆形区域的关系 499
18.3.4连续直线与圆形区域的关系 502
第19章 多边形区域叠加分析 506
19.1两个多边形区域的交集 506
19.1.1两个多边形区域交集的计算思路 506
19.1.2计算两个多边形区域的交集 507
19.2两个多边形区域的并集 515
19.2.1两个多边形区域并集的计算思路 515
19.2.2计算两个多边形区域的并集 517
19.3一个多边形区域剪裁另外一个多边形区域 524
19.3.1计算一个多边形区域剪裁另一个多边形区域的思路 524
19.3.2计算一个多边形区域剪裁另一个多边形区域的补集 525
19.4区域相交、相并、剪裁计算时的重合边界处理 531
19.4.1相交、相并、剪裁计算时的重合边界处理情况分析 531
19.4.2获得重合边界 532
19.4.3相交、相并、剪裁计算时的重合边界处理 536
19.5环形区域的相交、相并、剪裁计算的思路 543
19.5.1实心区域与环形区域的相交、相并、剪裁计算 544
19.5.2两个环形区域相交、相并、剪裁计算的思路和方法 547
第20章 缓中区分析 549
20.1点的缓冲区 549
20.2直线的缓冲区 550
20.3.1用区域并集方法获取连续直线缓冲区 552
20.3连续直线的缓冲区 552
20.3.2计算单侧连续直线缓冲区时的剪裁处理 554
20.3.3加快连续直线缓冲区的计算速度 561
20.4多边形区域的缓冲区 563
第21章 网络分析 565
21.1网络基本信息计算 565
21.1.1枢纽点的确定方法 565
21.1.2节点连接信息的描述方法和处理 566
21.1.3管理整个网络组织和网络连接信息 568
21.2最佳路径分析 577
21.2.1最佳路径分析方法 578
21.2.2正向最佳路径搜索 579
21.2.3逆向最佳路径搜索 585
21.2.4确定搜索方向的方法 589
21.3最佳游历路径分析 590
21.3.1求解最佳游历路径的方法 590
21.3.2实现最佳节点游历功能 591
21.4资源分配 600
21.4.1获取所有节点到中心节点距离法 600
21.4.2中心节点向外延伸法 604
21.5连通分析 612
附录 代码光盘与技术支持 614
参考书目 615