第Ⅰ部分 概述 3
第1章 空间信息管理 3
1.1不同行业中使用空间信息 5
1.2空间数据来源 6
1.3管理和分析空间数据 7
1.3.1在数据库中存储空间数据 10
1.3.2空间分析 13
1.4Oracle Spatial的优点 14
1.5本章小结 17
1.6参考文献 17
第2章 Oracle Spatial概述 19
2.1技术和体系结构概述 19
2.2Oracle Spatial入门 21
2.2.1数据模型:存储空间数据 22
2.2.2位置使能 22
2.2.3查询和分析 25
2.2.4可视化空间数据 28
2.2.5高级空间引擎 29
2.3Oracle Spatial技术产品 30
2.3.1Locator 31
2.3.2Spatial选项 33
2.4在Oracle Spatial安装中期望什么 34
2.4.1在数据库中安装Oracle Spatial 34
2.4.2升级 35
2.4.3理解Spatial安装 36
2.4.4检查Spatial安装的版本 36
2.5本章小结 37
第3章 Location-Enabling你的应用程序 39
3.1向表中添加位置信息 40
3.1.1应用专用数据 40
3.1.2地理数据 44
3.2空间表的元数据 47
3.3为应用程序填充空间元数据 52
3.4本章小结 53
第Ⅱ部分 基础空间 57
第4章 SDO_GEOMETRY数据类型 57
4.1Oracle中空间几何体的类型 58
4.1.1点 58
4.1.2线串 58
4.1.3多边形和面 59
4.1.4立方体 59
4.1.5集合 60
4.1.6SDO_GEOMETRY的逻辑实现 60
4.1.7SQL/MM和OGC上的空间数据 61
4.2SDO_GEOMETRY类型、属性和值 62
4.2.1SDO_GTYPE属性 63
4.2.2SDO_SRID属性 65
4.2.3SDO_POINT属性 74
4.2.4SDO_ELEM_INFO和SDO_ORDINATES属性 76
4.3简单二维几何体的例子 79
4.3.1点 79
4.3.2通过直线连接的线串 81
4.3.3通过弧连接的线串 82
4.3.4多边形:边界通过直线连接的环 84
4.3.5多边形:边界通过弧连接的环 85
4.3.6矩形 85
4.3.7圆 87
4.4复杂二维几何体的例子 88
4.4.1构建复杂几何体 88
4.4.2复合元素的SDO_ELEM_INFO 89
4.4.3带void多边形元素的SDO_ELEM_INFO 90
4.4.4复合线串的例子 91
4.4.5复合多边形的例子 92
4.4.6带void的多边形 93
4.4.7集合 94
4.5三维几何体的例子 99
4.5.1三维的点、线串和多边形 100
4.5.2复合面 106
4.5.3简单立方体 109
4.5.4复合立方体 115
4.5.5集合 116
4.6本章小结 118
第5章 空间数据的加载、传输和验证 121
5.1向SDO_GEOMETRY列中插入数据 122
5.2加载和转换空间数据 123
5.2.1用SQL*Loader从文本文件加载 123
5.2.2在Oracle数据库之间传输空间数据 126
5.2.3从外部格式导入 129
5.2.4在SDO_GEOMETRY和WKT/WKB之间转换 130
5.2.5在GML和SDO_GEOMETRY之间转换数据 131
5.3拉伸二维几何体为三维几何体 136
5.4验证空间数据 139
5.4.1验证函数 139
5.4.2验证标准 141
5.4.3复合立方体 147
5.4.4集合 148
5.5调试空间数据 149
5.5.1REMOVE_DUPLICATE_VERTICES 149
5.5.2EXTRACT 150
5.5.3APPEND 153
5.5.4GETNUMELEM、GETNUMVERTICES和GETVERTICES 155
5.5.5EXTRACT3D 155
5.5.6其他函数 157
5.6本章小结 157
第6章 地理编码 159
6.1什么是地理编码 160
6.2Oracle地理编码的体系结构 161
6.2.1解析输入地址 162
6.2.2地址搜索 162
6.2.3计算空间坐标 163
6.3为地理编码设置参考数据 164
6.3.1参数表 164
6.3.2数据表 165
6.4地理编码函数的使用 166
6.4.1GEO_AS_GEOMETRY 167
6.4.2GEOCODE 169
6.4.3GEOCODE_ALL 185
6.5用结构化的地址进行地理编码 192
6.5.1GEOCODE_ADDR 192
6.5.2GEOCODE_ADDR_ALL 194
6.6反地理编码 194
6.7商业数据的地理编码 197
6.7.1添加空间数据列 197
6.7.2对地址进行地理编码:简单的方法 197
6.7.3地址验证和纠正 198
6.7.4自动地理编码 204
6.8地理编码服务器 208
6.8.1体系结构 208
6.8.2安装和配置 209
6.8.3地理编码的使用:XML查询和响应 212
6.9本章小结 218
第7章 在应用程序中操作SDO_GEOMETRY 219
7.1用PL/SQL操作几何体 221
7.1.1VARRAY操作入门 223
7.1.2SDO_GEOMETRY对象的读写 228
7.1.3创建新的几何体 228
7.1.4从几何体中提取信息 230
7.1.5修改已有的几何体 232
7.2在Java中操作几何体 236
7.2.1使用JGeometry类 237
7.2.2使用3D几何体:J3D_Geometry类 242
7.2.3从3D几何体中提取元素:ElementExtractor类 243
7.2.4使用标准的格式:WKT、WKB和GML 246
7.2.5使用ESRI shapefile 249
7.3本章小结 254
第Ⅲ部分 空间与网络分析 257
第8章 空间索引和操作符 257
8.1空间索引 258
8.1.1建立索引之前为空间层插入元数据 260
8.1.2创建空间索引 261
8.1.3空间索引概念 261
8.2空间索引参数 264
8.2.1USER_SDO_INDEX_METADA视图 266
8.2.2空间索引大小需求 267
8.3空间操作符 268
8.3.1空间操作符的语法 268
8.3.2空间操作符的语义 269
8.3.3空间操作符的计算 269
8.4深入理解空间操作符 270
8.4.1SDO_WITHIN_DISTANCE操作符 271
8.4.2SDO_NN操作符 276
8.4.3用于空间相互作用(关系)的操作符 283
8.4.4空间操作符的Hint 297
8.5空间索引的高级特性 303
8.5.1基于函数的空间索引 303
8.5.2本地分区空间索引 306
8.5.3并行索引 310
8.5.4在线索引重建 310
8.5.5空间连接 312
8.5.6三维分析 315
8.6本章小结 320
第9章 几何处理函数 321
9.1缓冲函数 323
9.2关系分析函数 325
9.2.1SDO_DISTANCE 326
9.2.2SDO_CLOSEST_POINTS 329
9.2.3RELATE 331
9.3几何组合函数 337
9.3.1SDO_INTERSECTION 338
9.3.2SDO_UNION 339
9.3.3SDO_DIFFERENCE 340
9.3.4SDO_XOR 342
9.4几何分析函数 343
9.4.1面积、长度和体积函数 343
9.4.2MBR函数 348
9.4.3各种几何分析函数 350
9.5聚合函数 354
9.5.1聚合MBR函数 354
9.5.2其他聚合函数 355
9.6本章小结 360
第10章 网络建模 361
10.1网络建模通用概念 362
10.1.1网络实例 364
10.1.2Oracle网络数据模型 365
10.2数据结构:网络表 366
10.2.1结点表 367
10.2.2边表 368
10.2.3路径表 368
10.2.4路径连接表 369
10.2.5网络元数据 369
10.3网络定义 371
10.3.1“自动”网络定义 371
10.3.2“手动”网络定义 373
10.3.3在同一表中定义多个网络 375
10.3.4删除网络 379
10.3.5在网络表上创建空间索引 380
10.3.6获取网络信息 380
10.3.7验证网络连通性 382
10.3.8网络实例 383
10.4使用Java API分析和管理网络 386
10.4.1分析网络:NetworkManager类 387
10.4.2限制搜索空间:SystemConstraint类 399
10.4.3高级分析:网络约束 401
10.4.4网络结构:Network、Node、Link和Path类 407
10.4.5创建网络:NetworkFactory类 409
10.5调试网络结构 412
10.6使用PL/SQL API分析网络 413
10.6.1使用内存对象 415
10.6.2分析网络 417
10.6.3创建和更新网络 420
10.6.4使用网络约束 423
10.7网络编辑器 430
10.7.1启动编辑器 430
10.7.2使用加载网络 431
10.8本章小结 434
第11章 路由引擎 435
11.1体系架构 436
11.2安装和配置 438
11.3数据结构 440
11.4实例数据:旧金山的街道 442
11.5分区 444
11.6使用路由器:XML查询和响应 446
11.6.1路由请求 448
11.6.2路由选项 449
11.6.3预先对起始位置和终止位置进行地理编码 450
11.6.4地理起始位置和终止位置 450
11.6.5批路由 451
11.7本章小结 453
第Ⅳ部分 可视化 457
第12章 使用MapViewer定义地图 457
12.1在Location-Enabled应用中使用地图的原因 458
12.2MapViewer和Oracle地图概述 460
12.2.1Oracle MapViewer 460
12.2.2Oracle Maps 462
12.3前期准备 463
12.3.1加载样本数据 465
12.3.2Location-Enable应用数据 465
12.3.3加载地理数据 465
12.3.4为MapViewer加载地图、主题、样式和地图缓存定义 465
12.3.5定义数据源 466
12.3.6安装示例应用程序 467
12.4配置MapViewer 468
12.4.1使用管理控制台 469
12.4.2配置参数 472
12.5定义地图 476
12.5.1Map Builder的使用 477
12.5.2样式的使用 480
12.5.3主题的使用 491
12.5.4地图的使用 500
12.6定义地图缓存 506
12.6.1USER_SDO_CACHED_MAPS视图 506
12.6.2使用MapViewer控制台来管理缓存 507
12.6.3创建新的地图缓存 508
12.6.4使用SQL创建地图缓存 510
12.6.5缓存数据格式 513
12.6.6导出缓存定义 513
12.6.7清除和刷新缓存内容 514
12.6.8使用外部数据源 514
12.7本章小结 518
第13章 在应用程序中使用地图 519
13.1MapViewer的APIs概述 519
13.1.1XML、Java、JSPs和PL/SQL 520
13.1.2JavaScript和Ajax:Oracle地图 521
13.1.3选择API 522
13.2剖析地图请求 523
13.2.1什么(what):应当展示在地图上的信息 523
13.2.2哪里(where):地图覆盖的地理区域 524
13.2.3怎样做(how):生成地图的格式和大小 525
13.3与地图进行交互 525
13.3.1控制的详细程度:放大和缩小 525
13.3.2控制地图上显示的区域:平移和重新计算中心 526
13.3.3特性的选择:识别 526
13.3.4选择要在地图上显示的信息:层控制 527
13.4Oracle地图:JavaScript API 527
13.4.1显示地图 528
13.4.2与地图交互:缩放和平移 530
13.4.3添加地图修饰 532
13.4.4添加通用修饰 532
13.4.5创建概况地图 533
13.4.6矩形(选取框)缩放 534
13.4.7添加动态信息:基于主题的FOI 536
13.4.8添加个体FOI 540
13.4.9控制样式 541
13.4.10捕获用户输入:工具和选择器 542
13.4.11事件响应 545
13.5使用Java API 547
13.5.1地图请求 547
13.5.2缩放和平移 550
13.5.3主题控制 553
13.5.4样式控制 557
13.5.5识别和查询 557
13.5.6动态特性 560
13.5.7图例 560
13.5.8地图修饰 562
13.5.9使用地图缓存 563
13.5.10发现数据源、地图、主题 564
13.5.11使用JSP标签 564
13.6使用XML API 569
13.6.1简单的地图请求 570
13.6.2为底图添加主题 572
13.6.3使用多个数据源 573
13.6.4从主题构建地图 574
13.6.5动态主题 575
13.6.6动态特性 578
13.6.7图例 581
13.6.8XML地图响应 582
13.7使用PL/SQL API 583
13.7.1安装API 584
13.7.2一个简单的示例 584
13.8使用管理性API 585
13.8.1浏览地图定义 586
13.8.2管理MapViewer服务器 588
13.8.3重启MapViewer 591
13.9网络地图服务(OGC WMS)接口 591
13.9.1GetCapabilities请求 591
13.9.2GetMap请求 593
13.9.3GetFeaturelnfo请求 595
13.9.4空间参照系统(SRS)映射 597
13.10本章小结 597
第Ⅴ部分 应用中的空间特性 601
第14章 应用程序示例 601
14.1数据准备和安装 602
14.1.1加载地理数据 602
14.1.2location-enabling应用程序数据 602
14.1.3加载地图、主题、样式并为MapViewer定义地图缓存器 603
14.2应用程序安装 603
14.3JavaScript应用程序 604
14.3.1应用程序纵览 604
14.3.2底层实现 608
14.4Java(JSP)应用程序 624
14.4.1应用程序纵览 624
14.4.2底层实现 631
14.5本章小结 644
第15章 案例研究 645
15.1案例研究概述 645
15.2用于管理伦敦公共汽车网络的空间信息 646
15.2.1BusNet 647
15.2.2BusNet中的空间数据和Oracle Spatial 648
15.2.3BusNet中空间数据的用户界面 650
15.2.4BusNet总结 652
15.3P-Info:一个供警察部门使用的移动应用程序 653
15.3.1P-Info的功能 654
15.3.2P-Info体系结构 655
15.3.3在P-Info中使用Oracle Spatial 657
15.3.4P-Info的可度量的附加值 659
15.4Risk Repository for Hazardous Substances系统 660
15.4.1RRGS技术 662
15.4.2在RRGS中使用Oracle Spatial 663
15.4.3从危险品到风险管理 665
15.5美国地质勘探局全国土地覆盖的可视化和分析工具 666
15.5.1美国地质勘探局的可视化和分析工具的体系结构 669
15.5.2美国地质勘探局可视化和分析工具中的Oracle Spatial 670
15.5.3USGS可视化和分析工具带来的好处 673
15.6美国国防部的MilitaryHOMEFRONT LBS系统 673
15.6.1MilitaryHOMEFRONT LBS的体系结构 675
15.6.2MilitaryHOMEFRONT中的Oracle Spatial 677
15.6.3移动Military INSTALLATIONS 681
15.6.4MilitaryHOMEFRONT LBS的好处 683
15.7本章小结 683
第16章 提示、常见失误和常见错误 685
16.1提示 685
16.1.1数据建模和数据装载 685
16.1.2空间查询操作符的性能 688
16.1.3其他空间处理函数的性能 692
16.1.4插入、删除、更新的性能 694
16.1.5关于空间索引扩展性和可操纵性的最佳实践 695
16.2常见失误 701
16.2.1测量数据的范围、经纬度和容差 701
16.2.2SDO_GEOMETRY的NULL值 702
16.2.3使用GEOCODE或GEOCODE_ALL 702
16.2.4在CREATE INDEX中指定“INDEXTYPE is mdsys.spatial_index” 702
16.2.5始终在WHERE子句中使用空间操作符 702
16.2.6没有有效的空间索引时请使用空间函数 702
16.2.7不要移动、导入或者复制MDRT表 704
16.2.8网络元数据 704
16.2.9地图元数据 705
16.3常见错误 705
16.3.1ORA-13226:没有空间索引接口将不被支持 705
16.3.2ORA-13203:读取USER_SDO_GEOM_METADATA视图失败 705
16.3.3ORA-13365:层的SRID与几何体的SRID不符 705
16.3.4ORA-13223:SDO_GEOM_METADATA中<table_name,column_name>的重复项 706
16.3.5ORA-13249,ORA-02289:不能撤销序列/表 706
16.3.6ORA-13249:sdo_index_metadata表有重复条目 706
16.3.7ORA-13207:不正确地使用<operator-name>操作符 707
16.3.8ORA-13000:维数超出范围 707
16.3.9ORA-00904:…无效的标识符 707
16.3.10ORA-00939:函数参数过多 707
16.3.11ORA-13030:SDO_GEOMETRY的维数无效或者ORA-13364:层维数与几何体维数不符 708
16.4本章小结 710
第Ⅵ部分 附录 713
附录A 其他一些空间分析函数 713
附录B 线性参考 725
附录C Oracle数据库中的拓扑数据模型 737
附录D Oracle中的栅格数据存储 751
附录E 在Oracle中使用点云和TIN进行三维建模 769