通常,可视化 DB2 数据库中存储和管理的空间和几何数据对于用户理解数据本身非常关键。和 ESRI 一道,IBM® 为此提供了免费的 ArcExplorer™。学习如何在不同平台上设置和使用 ArcExplorer。要显示的空间可以存储在 Linux®、UNIX® 或 Windows® 上一个空间化 DB2® 数据库中。另外还学习如何使用 Version 9 提供的空间支持特性访问存储在 DB2 for z/OS 上的空间数据。
简介
几乎每个数据库都包含空间信息。地址信息是其中最突出的代表。其他例子还包括街道,在数据库中,街道不仅可以通过其名称来表示,还可以通过它在地球上的确切位置来表示。Linestring 就是建模那些对象的一种方式。分公司和客户居住地的位置可以用点描述。类似地,州和国家边界可以用多边形表示。非地理应用程序也可以受益于关系数据库中的空间数据。仓库和货架上的产品的位置可以用显式地建模的地理信息表示。空间距离的计算可以帮助根据不同的标准最优地安排仓库中产品的位置。
DB2 for Linux, UNIX, and Windows 支持(从 Version 7 开始)使用 DB2 Spatial Extender 产品存储、管理和检索数据库中的空间数据。通过这个扩展器,可以像对待任何其他关系数据(例如数字和字符串)一样,使用专用的数据类型为点、线、多边形等几何图原和那些图原的集合建模。DB2 Spatial Extender 不仅提供数据类型,而且还附带了很多用于执行空间操作的空间函数和方法。例如,可以确定两个图形之间的距离,执行空间集合操作,如合并或交叉图形,获取一个 linestring 的长度。
DB2 for z/OS 的空间支持提供了几乎与扩展器相同的功能。虽然在内部实现上有所差异,但是空间类型和函数的使用是类似的。主要不同在于 DB2 for Linux, UNIX, and Windows 中的空间函数通常可以通过方法注释来调用(例如 geometry..ST_Buffer(10, 'METER')..ST_AsText())。DB2 for z/OS 还不支持结构化类型和方法(用于实现扩展器),因此那个平台上的空间支持只接受函数调用语法(例如 ST_AsText(ST_Buffer(geometry, 10, 'METER')))。
虽然对于很多应用程序来说空间计算和比较已经足够,但是有时候将数据库中的数据可视化还是很有帮助的。表格表示法(用于传统关系数据)并不是最适合使空间信息可访问的方法。相反,空间数据需要呈现地图。有很多方法可以提取几何图形并生成那样的地图。一些商业工具 -- Geographic Information Systems (GIS) -- 就是专用于显示和修改空间和非空间数据。其他一些系统则通过根据集合图形生成静态图像(例如 JPEG 或 TIFF)来提供简单的界面。之后,这些图像可以由一个 Web 浏览器显示。
ESRI ArcExplorer 可以从 DB2 Spatial Extender Web 站点(见 参考资料 小节)下载,它是用 Java™ 实现的。因此,它可以在任何含适当的 Java Virtual Machine (JVM) 的平台上使用。但是,ArcExplorer 附带了一个特定于 Windows 的安装例程。这有碍于在其他平台,例如 Linux 和 AIX® 上部署和使用 ArcExplorer。下面的小节描述如何克服这个问题。本文在一个 Linux 系统上设置一个 ArcExplorer,并访问存储在同一个系统上的 DB2 数据库以及 DB2 for z/OS 上维护的另一个数据库中的空间数据。
本文首先解释如何安装、启动和设置 ArcExplorer。接着,道出访问存储在数据库中的数据前需要满足的需求。最后,本文就如何有效地使用 ArcExplorer 给出一些指南。所有内容都基于 Linux 系统上捕捉的屏幕快照进行讲解。但是,同样的步骤也适用于其他系统。
部署 ArcExplorer
ArcExplorer 是用于可视化空间数据的一款轻量级工具。它由 5 个 .jar 文件组成,在下载 小节中的归档文件中可以找到这 5 个文件。您也许会注意到,与 Windows 上的本地安装相比,您也许会注意到,这种 Windows 上的安装更为复杂。在 Windows 上,需要安装一个完全可以运行的产品,其中包括 Java Runtime Environment (JRE)。如今,几乎可以断定每个系统上都已经安装了 Java。因此,可以依赖于已有的 JRE 和 JVM。这样可以帮助减少安装镜像的大小,使之只有 2.5MB -- 而最初的 Windows 安装大小约为 100MB。与此同时,ArcExplorer 自动得益于对已有 Java 包的更新。
与 JVM 类似,ArcExplorer 安装目录中不需要有 db2java.zip 文件的副本。该文件实际上是用于 ArcExplorer 与 DB2 的通信。虽然 README 指示您从 DB2 安装目录复制那个文件,但是更简单、更好的方法是直接从其原始位置(例如 ~/sqllib/java/db2java.zip)使用该文件。通过在 CLASSPATH 环境变量中引用该位置,就可以使用那个文件。
总之,运行 ESRI ArcExplorer 所需的文件只有 aejava_help.jar、arcims_aej.jar、arcims_sdk.jar、sde_sql3.jar 和 xml.jar。此外,下载小节还提供了 shell 脚本 arcexplorer,用于设置 classpath 和同时启动 JVM 和 ArcExplorer。
下载小节中还有其他一些文件。文件 aejava.ico 是一个图像,如果想通过菜单启动 ArcExplorer,则可以使用它作为菜单中的一个图标。文件 LICENSE 包含 ArcExplorer 附带的许可,用户必须遵从该许可。脚本 host.sql 包含一些 SQL 语句,这些语句使用联邦建立到一个远程 DB2 for z/OS 子系统的连接,并通过昵称访问三个含空间数据的远程表。最后,文件 import.jcl 是一个 JCL 脚本,可以使用它将空间数据从 shapefile 导入到 DB2 for z/OS 子系统。shell 脚本 import.sh 则在 DB2 for Linux, UNIX, and Windows 做同样的事情。
有了前面的那些信息,现在可以下载本文提供的 ZIP 归档文件,并将其中的内容解压到您选择的一个目录中。为了启动 ArcExplorer,进入那个目录,调用 arcexplorer 脚本,如清单 1 所示。您将看到 ArcExplorer 出现(还没有经过配置),如图 1 所示。
清单 1. 启动 ArcExplorer
$ cd /usr/local/arcexplorer
$ ./arcexplorer
图 1. 启动的 ArcExplorer
准备数据库中的空间数据
现在您已经确认了 Java 应用程序的基本功能,本节将解释如何设置数据库,从示例 shapefile 中导入空间数据,最后可视化数据。
空间化数据库
为了管理数据库中的空间数据,必须启用数据库的空间操作功能。可以使用工具 db2se 开始 DB2 for Linux, Unix, and Windows 上的启用过程,如清单 2 所示。
清单 2. 启用数据库
$ db2 create database spatial DB20000I The CREATE DATABASE command completed successfully. $ db2se enable_db spatial Enabling database. Please wait ... GSE1036W The operation was successful. But values of certain database manager and database configuration parameters should be increased. |
空间化一个 DB2 for z/OS 子系统还需执行更多的步骤。数据库管理员必须修改 JCL 脚本,以启用数据库。例如,需要使用 DB2 子系统的名称。调整脚本之后,执行脚本,为 DB2 子系统启用空间支持特性。这个过程的细节超出了本文的范围。情参阅文档(见参考资料 小节)。
导入空间数据
本文使用 DB2 Spatial Extender 附带的三个示例 shapefile -- 即 sjMainStreets、sjZipCodes 和 sjCensusBlocks -- 来演示如何使用 ArcExplorer。第一步是将那些 shapefile 导入到空间化数据库中。这里分别针对 DB2 for Linux, UNIX, and Windows 和 DB2 for z/OS 讨论这一过程,因为两者之间有明显的不同。
DB2 for Linux, UNIX, and Windows
清单 3 显示如何使用 db2se 命令行工具导入 shapefile。只有 shapefile sqMainStreets 被导入到数据库 SPATIAL 中。导入其他两个 shapefile 的命令在 import.sh 文件中,该文件可以在下载小节中找到。当然,DB2 Control Center 中也提供了相同的功能。另外,也可以从您自己的应用程序中通过调用 db2gse.ST_import_shape 存储过程来开始导入。
清单 3. 将示例 shapefile 导入到 DB2 for Linux, UNIX, and Windows 中
$ db2se import_shape SPATIAL -filename sjMainStreets -srsName NAD83_SRS_1 \
-tableName MAIN_STREETS -createTableFlag 1 -spatialColumn SHAPE \
-idColumn SE_ROW_ID -commitScope 1000 -client 1
GSE0000I The operation was completed successfully.
$ db2se register_spatial_column SPATIAL -tableName MAIN_STREETS \
-columnName SHAPE -srsName NAD83_SRS_1
GSE0000I The operation was completed successfully.
|
也有其他方法可以提供强制的 SE_ROW_ID 列。例如,可以使用空间表上的一个视图,通过重新命名视图定义中的 ID 列,从一个已有的 ID 列中取得 SE_ROW_ID 值。另一种方法是使用不同的编号技术,例如在线分析处理(OLAP)函数 ROW_NUMBER() 为新的 SE_ROW_ID 列生成值。具体实现留给有兴趣的同学作为练习。