$ cd /usr/local/arcexplorer
$ ./arcexplorer
图 1. 启动的 ArcExplorer 上一页12345678下一页 预备数据库中的空间数据 现在您已经确认了 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.
对于警告 GSE1036W,暂时可以忽略。该警告是启用步骤中发出的,用于确认某些数据库治理器(DBM)配置参数是否不低于某个最小值,以确保在较复杂的场景中可以使用扩展器的适当功能。但是由于目前只需使用一些简单的查询,因此不必强制调整这些参数。 空间化一个 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 讨论这一过程,因为两者之间有明显的不同。 上一页123456789下一页 DB2 for Linux, UNIX, and Windows 清单 3 显示如何使用 db2se 命令行工具导入 shapefile。只有 shapefile sqMainStreets 被导入到数据库 SPATIAL 中。导入其他两个 shapefile 的命令在 import.sh 文件中,该文件可以在下载小节中找到。当然,DB2 Control Center 中也提供了相同的功能。另外,也可以从您自己的应用程序中通过调用 db2gse.ST_import_shape 存储过程来开始导入。欲了解更多信息,请参阅 Spatial Extender 文档。 清单 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.
对于导入操作,有两件事情要注重。ArcExplorer 要求表中存在一个名为 SE_ROW_ID 的列。那个列的类型必须声明为 INTEGER。这个列中的值用于惟一地标识每一行,也就是说,它必须是一个 ID 列。可以选择让 shape import 自动添加该列并为之生成惟一值(选项 idColumn)。第二件事情是 ArcExplorer 要求所有空间列指定一个空间引用系统。这可以通过像清单 3 中最后一步那样注册空间列来完成。 也有其他方法可以提供强制的 SE_ROW_ID 列。例如,可以使用空间表上的一个视图,通过重新命名视图定义中的 ID 列,从一个已有的 ID 列中取得 SE_ROW_ID 值。另一种方法是使用不同的编号技术,例如在线分析处理(OLAP)函数 ROW_NUMBER() 为新的 SE_ROW_ID 列生成值。具体实现留给有爱好的同学作为练习。 上一页12345678910下一页 DB2 for z/OS DB2 for z/OS 的空间支持提供了一个类似于 db2se 的工具。这个工具的名称为 DSN5SCLP,由于在 z/OS 上运行,因此必须从一个 JCL 脚本中启动该工具。要导入的 shapefile 必须在 z/OS 上的一个分层文件系统(HFS)数据集中。清单 4 中的脚本假设挂载点(mount point)名为 /u/stolze/。在您自己的系统中,可以需要相应地调整这个值。shapefile 被存储为二进制数据。因此,.dbf 文件中的所有数据(包含非空间属性信息)仍然以 ASCII 格式编码。(另一方面,生成的消息文件则以 EBCDIC 格式存储来自导入操作的所有消息。) 和前面一样,DB2 for Linux, UNIX, and Windows 上使用相同的 shapefile。清单 4 显示了如何导入 shapefile sjMainStreets。其他两个 shapefile 可以按相同方式导入,只是需要调整一下文件名和表名。在 下载小节中可以找到用于所有三个表的完整 JCL 脚本 import.jcl。 清单 4. 将示例 shapefile 导入到 DB2 for z/OS 中//IMPORT JOB 'USER=$$USER','',CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1)
//JOBLIB DD DSN=DB2A.SDSNEXIT,DISP=SHR
// DD DSN=DB2A.SDSNLOAD,DISP=SHR
// DD DSN=CEE.SCEERUN,DISP=SHR
// DD DSN=CBC.SCLBDLL,DISP=SHR
//*
//* IMPORT SHAPE FILES
//*
//IMPORT EXEC PGM=IKJEFT01,REGION=0M,DYNAMNBR=20
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//DSNAOINI DD DSN=DB2A.SDSNSAMP(DSNAOINI),DISP=SHR
//CEEDUMP DD SYSOUT=*
//SYSTSIN DD *
DSN5SCLP /import_shape STLEC1 +
-fileName /u/stolze/sjMainStreets +
-createTableFlag 1 +
-srsName NAD83_SRS_1 +
-tableName MAIN_STREETS +
-tableCreationParameters "IN DATABASE SPATIAL" +
-spatialColumn SHAPE -idColumn SE_ROW_ID +
-messagesFile /u/stolze/mainStreets.msg
//*
//* REGISTER SPATIAL COLUMNS
//*
//REGISTER EXEC PGM=IKJEFT01,REGION=0M,DYNAMNBR=20
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//DSNAOINI DD DSN=DB2A.SDSNSAMP(DSNAOINI),DISP=SHR
//CEEDUMP DD SYSOUT=*
//SYSTSIN DD *
DSN5SCLP /register_spatial_column STLEC1 +
-tableName MAIN_STREETS -columnName SHAPE -srsName NAD83_SRS_1
//*
上一页234567891011下一页 DSN5SCLP 要求为每个操作指定 DB2 位置名称(清单中为 STLEC1),其中 db2se 需要一个数据库的名称。为了建立到各个 DB2 子系统的连接,这是必需的。惟一需要注重的其他事项是,可以、也应该在 CREATE TABLE 语句后面添加一个子句,以指定将表放在哪个数据库中。选项 tableCreationParameters 用于提供用于数据库 SPATIAL 的信息。 JCL 脚本不仅导入空间数据,而且还为那些表中的空间列注册一个专用的 SQL Reporting Service (SRS)。这与之前的小节是一样的。这一步实际上不是必需的,因为 ArcExplorer 不在本地访问 DB2 for z/OS。相反,正如接下来的小节中要具体解释的那样,这里使用一个联邦层。 为访问 DB2 for z/OS 上的空间数据设置联邦 不幸的是,不能让 ArcExplorer 直接访问 DB2 for z/OS 中的空间数据。ArcExplorer 依靠于来自 DB2 for Linux, UNIX, and Windows 的编目视图,并且(在内部)使用特定于 DB2 for Linux, UNIX, and Windows 的语法(即方法调用)来处理空间数据。虽然可以模拟所需的 DB2 for Linux, UNIX, and Windows 中的编目视图,但是查询语法显得更精妙一些。 DB2 的联邦功能为我们提供了一个解决方案。我们将空间和非空间数据存储在 DB2 for z/OS 中,但是使用一个 DB2 for Linux, UNIX, and Windows 实例作为联邦服务器。这个联邦服务器透明地通过昵称访问 DB2 for z/OS 中的数据,同时提供所需的编目视图和接受方法调用语法。 但是,需要通过迂回的方法传输空间数据,并在 DB2 for z/OS 与 DB2 for Linux, UNIX, and Windows 中不同的内部表示之间转换空间数据。实现到 DB2 数据源的 DRDA 包装器还没有提供这种转换功能。因此,在转换步骤中可以使用视图,按照其 well-known binary (WKB) 编目传输空间数据。图 2 显示了 ArcExplorer 访问 DB2 for z/OS 中的空间数据的架构。 上一页34567891011下一页 图 2. 联邦设置 箭头表明空间和非空间数据在系统中的流向。来自 ArcExplorer 的查询总是被定向到 DB2 for Linux, UNIX, and Windows。更具体地说,ArcExplorer 访问具有(已注册)空间列的视图。ArcExplorer 完全不知道实际的数据源于何处。视图本身基于一个昵称。那个昵称有一个 BLOB 列,其中包含 WKB 格式的几何图形。根据请求,联邦服务器从远程数据源(即 DB2 for z/OS 子系统)获取 BLOB 值。包装器并不访问含几何信息的基本表 MAIN_STREETS,而是访问视图 MAIN_STREET_VIEW。该视图用于调用函数 ST_AsBinary,以便将空间数据从基本表转换为 WKB 表示。 上述架构可以用清单 5 中所示的一系列 SQL 语句实现。该清单只反映表 MAIN_STREETS 的设置,并通过视图 MAIN_STREETS_HOST 使之可以在 DB2 for Linux, UNIX, and Windows 中被访问。其他表,如 ZIP_CODES 和 CENSUS_BLOCKS,可以以相同方式处理。SQL 脚本 host.sql(可以在下载小节中找到)包含用于所有三个表的 SQL 语句。 清单 5. 设置到 DB2 for z/OS 的联邦访问CREATE WRAPPER drda;
CREATE SERVER host TYPE DB2/ZOS VERSION '9' WRAPPER DRDA
AUTHORIZATION sysadm PASSWord password OPTIONS ( DBNAME 'HOST' );
CREATE USER MAPPING FOR USER SERVER host
OPTIONS ( REMOTE_AUTHID 'SYSADM', REMOTE_PASSWORD 'PASSWORD' );
SET PASSTHRU host;
CREATE VIEW main_streets_view AS
SELECT census1, census2, cfcc, cfcc1, cfcc2, fedirp, fedirs, fename,
fetype, INTEGER(fnode) AS fnode, fraddl, fraddr, length,
se_row_id, source, tlid, INTEGER(tnode) AS tnode, toaddl,
toaddr, zipl, zipr,
db2gse.ST_AsBinary(shape) AS wkb, db2gse.ST_SrId(shape) AS srsId
FROM main_streets;
SET PASSTHRU RESET;
CREATE NICKNAME main_streets_nick
FOR host.sysadm.main_streets_view;
CREATE VIEW main_streets_host AS
SELECT census1, census2, cfcc, cfcc1, cfcc2, fedirp, fedirs, fename,
fetype, fnode, fraddl, fraddr, length, se_row_id, source, tlid,
tnode, toaddl, toaddr, zipl, zipr,
db2gse.ST_MultiLineString(wkb, srsId) AS shape
FROM main_streets_nick;
! db2se register_spatial_column spatial -tableName MAIN_STREETS_HOST
-columnName SHAPE -srsName NAD83_SRS_1;
上一页4567891011下一页 上述设置的总体效果是,所有数据在物理上只存储在 DB2 for z/OS 中,而所有访问则被定向到 DB2 for Linux, UNIX, and Windows。在查询时,DB2 for Linux, UNIX, and Windows 转换查询,以适应 DB2 for z/OS,并且用视图转换空间数据。 可视化空间数据 完成之前的所有预备工作之后,现在可以将注重力放在根据空间数据呈现地图上来。首先,需要添加一个层。一个层是具有共同类型的空间对象(及其非空间属性)的一个集合。例如,所有街道可以形成一个街道层。按照关系 DBMS,一个层对应于一个空间表,也就是有一个几何列和一些其他非几何列的表。表中的所有列都是具有那个表所表示的某种实体类型的实体。其他列中的值描述每个几何图形的属性(例如街道名称)。 可以通过菜单(Layer > Add Layers)或者单击工具条中的 Add Layers 图标在 ArcExplorer 中添加一个层。在新打开的 Catalog 窗口中,第一步是添加一个数据库连接。要连接的数据库必须在本地 DB2 (客户机)实例中编目。另外还必须指定一个用户名和密码。图 3 显示了这一步。 图 3. 设置 DB2 连接 上一步的结果是一个新的连接对象。对于要访问的每个数据库,只需设置一次连接。假如使用前面提到的联邦设置,那么只需要一个到联邦服务器,即 DB2 for Linux, UNIX, and Windows 的连接。可以立即为已有数据库连接添加新层。可以选择该连接,然后获得相关数据库中所有层(已注册的空间列)的列表。对于本场景,选择所有三个层,单击 Add Layers 图标,然后关闭 Catalog 窗口。图 4 演示了这一点。注重,DB2 for z/OS 中空间表的昵称还没有被添加,因此这里没有显示。 上一页567891011下一页 图 4. 添加层 layers 在主窗口的左面板上,现在可以选择要呈现的层,为那个层选择颜色和其他要使用的属性,缩小和放大,找到几何图形并获得相关的属性,以及根据当前选择的地图区域创建图像。还可以上下移动层(通过在左侧的概要图中右键单击层)。这将影响绘制层的顺序,以及哪些层显示在其他层之上。图 5 演示如何使用 Identify 图标显示关于一个选中的人口普查区域的信息。在使用 Identify 特性之前,必须在最左测面板上选中相关的层。 图 5. 获得几何图形的属性 相同的操作也可以在 DB2 for z/OS 子系统中的空间数据上执行。联邦设置会隐藏数据本身的来源。ArcExplorer 只与 DB2 for Linux, UNIX, and Windows 系统打交道。图 6 演示了选择并呈现层 ZIP_CODES_HOST 的结果。在功能上,层与 DB2 for Linux, UNIX, and Windows 数据库中存储的基本表没有区别。 图 6. 呈现 DB2 for z/OS 中的空间数据 对 ArcExplorer 的性能考虑 ArcExplorer 包含 Query Builder 特性。该特性答应根据不同的谓词过滤要显示的几何图形。图 7 展示了该特性,其中涉及所有 17 个人口普查区域,列 HOUSHO_29 包含值 6。 图 7. 使用 ArcExplorer 的 Query Builder 过滤几何图形 上一页67891011下一页 新闻热点
疑难解答