| 免费下载:IBM® DB2® Express-C 9.7.2 免费版 或者 DB2® 9.7 for Linux®, UNIX®, and Windows® 试用版 |
|---|
| 下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。 |
地理信息系统(GIS,Geographic Information System)是一种十分重要的空间信息系统,常用来做空间地理数据的捕获、存储、操作、分析、管理与可视化展现。ArcGIS 是 Esri 公司出品的 GIS 解决方案,作为目前应用最为广泛的企业级 GIS 系统,具备强大的地图制作、空间数据管理、空间分析、信息整合、服务发布与共享的能力。
ArcGIS 主要包括以下五大类:为 GIS 专业人士提供的地理信息开发与使用工具 Desktop GIS,提供企业级地理信息和资源服务的 Server GIS,用于移动应用领域的 Mobile GIS,构建在云架构之上、提供了共享地理信息和服务能力的 Online GIS,以及面向应用程序开发人员的丰富而又强大的开发工具。其中每一类都有更为具体实用的工具满足各种 GIS 业务需要。
本文内容将涉及 Desktop GIS(包括 ArcEditor 和 ArcCatalog)和 Server GIS(包括 ArcGIS Server 和 ArcSDE),但不包含各种工具的安装、配置与部署。
DB2 是 IBM 著名的关系型数据库产品。通过空间扩展(DB2 Spatial Extender),可以让 DB2 UDB 具备存储、管理和分析空间数据的能力。顾名思义,空间扩展(Spatial Extender)作为 DB2 可选组件,通过提供一组专用于空间数据存储的数据类型(spatial data type)、操作空间数据的方法(function)和存储过程(store procedure),扩充了 DB2 的空间数据存储特性。DB2 空间扩展可以让用户在同一个数据库中存储空间数据与自身业务数据,通过统一的的 SQL 接口,就可以对这些数据进行查询、操作,并且利用 DB2 自身的查询优化,空间数据的复杂查询与处理也十分高效。
DB2 空间扩展被很多 GIS 系统广泛支持,ArcGIS 便是其中之一。通过 ArcSDE 可以与 DB2 空间数据库连接,在 ArcGIS 其他工具中使用这些空间数据。
本篇将通过一组实例,讲解如何在 DB2 中存储并应用空间数据,如何与 ArcGIS 进行连接并使用这些空间数据。本文中使用的软件环境是:
- 操作系统:Windows Server 2003 SP2
- 数据库:DB2 Enterprise Edition for Windows® (DB2 ESE) Version 9.7
- 空间扩展:DB2 9.7 Spatial Extender for Windows® on 32-bit AMD and Intel® systems (x86)
- ArcGIS 桌面客户端:ArcEditor 10
- ArcGIS 服务器:ArcGIS Server Enterprise for the Java Platform 10
注意本文中还用到了 ArcSDE for DB2,该工具在 ArcGIS 9.2 版本之后已经不作为单独组件出售,而是作为 ArcGIS Server Enterprise 版的一部分。
所谓空间数据库,对于 DB2 来说,就是在安装了空间扩展组件(DB2 Spatial Extender)之后,应用了空间特性(Enable Spatial Features)的数据库。在该库中,可以使用空间数据类型(如点、线、面类型等)存储数据,可以进行地理编码(geocoding),可以作为空间数据源来为 GIS 工具提供数据。当然,应用空间特性之后的数据库依然可以用于存储普通的业务数据,二者不会相互影响。
要激活空间特性,并在 ArcSDE 中成功连接,数据库本身需要满足一些条件,如:需要有一个 8KB 或者更大的系统临时表空间,并且至少需要 500 页。数据库的表空间和某些参数也需要进行配置,具体条件限制详见 参考资源。通过以下数据库创建脚本,创建了一个满足空间扩展以及 ArcSDE 需要的数据库 GEOTEST。
清单 1. 创建空间数据库
FORCE APPLICATION ALL;
DB2STOP;
DB2START;
CREATE DATABASE GEOTEST USING CODESET UTF-8 TERRITORY US COLLATE USING SYSTEM USER
TABLESPACE MANAGED BY DATABASE USING (FILE 'E:\DB2\NODE0000\GEOTEST\sdetbsp' 51200);
CONNECT TO GEOTEST user db2admin using YOUR_PASSWORD;
CREATE REGULAR TABLESPACE regtbs PAGESIZE 4 K MANAGED BY DATABASE USING
(FILE 'E:\DB2\NODE0000\GEOTEST\regtbs' 102400);
CREATE LONG TABLESPACE lobtbs PAGESIZE 4 K MANAGED BY DATABASE USING
(FILE 'E:\DB2\NODE0000\GEOTEST\lobtbs' 51200);
CREATE USER TEMPORARY TABLESPACE sdespace PAGESIZE 4 K MANAGED BY SYSTEM USING
('E:\DB2\NODE0000\GEOTEST\sdespace');
GRANT USE OF TABLESPACE regtbs TO PUBLIC;
GRANT USE OF TABLESPACE lobtbs TO PUBLIC;
GRANT USE OF TABLESPACE sdespace TO PUBLIC;
CREATE BUFFERPOOL GSEBP8K SIZE 500 PAGESIZE 8 K;
CREATE SYSTEM TEMPORARY TABLESPACE gsesystmptbs PAGESIZE 8K MANAGED BY SYSTEM USING
('E:\DB2\NODE0000\GEOTEST\gsesystmptbs') BUFFERPOOL GSEBP8K;
UPDATE DATABASE CONFIGURATION FOR GEOTEST USING APP_CTL_HEAP_SZ 2048;
UPDATE DATABASE CONFIGURATION FOR GEOTEST USING APPLHEAPSZ 2048;
UPDATE DATABASE CONFIGURATION FOR GEOTEST USING LOGPRIMARY 10;
UPDATE DATABASE CONFIGURATION FOR GEOTEST USING LOGFILSIZ 1000;
FORCE APPLICATION ALL;
DB2STOP FORCE;
DB2START; |
有两种方式让数据库应用空间扩展,第一种方式是在 DB2 控制中心中,右键单击数据库,找到空间扩展(Spatial Extender)选项,并应用(Enable)它。
图 1. 在 DB2 控制中心中应用空间扩展
第二种方式是通过 DB2 命令行工具,通过运行如下代码来让数据库应用空间扩展。
清单 2. 命令行方式应用空间扩展
db2se enable_db GEOTEST; |
图 2. 执行命令应用空间扩展
无论以何种方式,成功应用空间扩展之后,会生成 DB2GSE schema,所有与空间数据相关的数据库对象——包括空间扩展用到的表,空间数据类型(如 DB2GSE.ST_Point)和常用的方法(如 DB2GSE.ST_Transform)、存储过程、触发器等等——都会在这个 schema 之下创建完成。
ArcSDE 是 ArcGIS 与关系型数据库之间的桥梁,它的作用类似于 ODBC,通过 ArcSDE,ArcGIS 应用不必关心底层数据源的具体实现,在 ArcGIS 的角度看来,所有的关系型数据在 ArcSDE 层都已经符合了空间数据模型。
图 3. ArcSDE
在使用 ArcSDE 之前,需要先创建其专用的账户,并为其赋予适当的操作权限,后面将用到这个账户来配置 ArcSDE,ArcGIS 也将用此账户来对空间数据进行操作。在 Windows 操作系统中,在“计算机管理”中创建本地用户“SDE”,并将其置于 DB2 管理组中。
图 4. SDE 账户
此外,还需要为 SDE 账户授予针对空间数据库 GEOTEST 的 DBA 操作权限。
清单 3. 为 SDE 用户授权
CONNECT TO GEOTEST; GRANT DBADM ON DATABASE TO USER SDE; CONNECT RESET; |
通过“ArcSDE for DB2 Post Installation”工具(开始 ->ArcGIS->ArcSDE)来配置 ArcSDE,使得 ArcGIS 可以通过 ArcSDE 与 DB2 空间数据库进行交互。如果 ArcSDE 与要连接的 DB2 不在同一台机器,那么 ArcSDE 所在的机器上要安装 DB2 客户端,并将远程数据库通过 DB2 配置助手编目到本地。ArcSDE 的配置过程包含了创建库、许可授权、创建服务三大部分。在此实例中只需要完成前两步即可。
图 5. 配置 ArcSDE
这一步需要输入之前创建好的 sde 用户密码以及空间数据库名,接下来需要 1 分钟左右时间,ArcSDE 会在空间数据库中创建元数据 Repository。所谓 Repository,是一组在 SDE schema 下的数据库表和方法,这些表都是 ArcSDE 自行维护,建议不要自行修改。另外,当通过 ArcCatalog 来将 shapefile 导入空间数据库的时候,默认也会在 SDE schema 下生成相应的表。
配置过程还涉及 ArcSDE 的许可证授权,这部分不在本文讨论内容之列,读者可以向本地 ArcGIS 管理员索取许可授权文件,继续利用“ArcSDE for DB2 Post Installation”工具进行授权。
有两种方式在已经应用了空间扩展的 DB2 数据库中构建空间数据,一种是创建全新的空间表,另一种是在原有表的基础上添加空间字段。
无论采取哪种方法,表中都需要有一个整型、非空、唯一的字段(这个字段可以不是主键),通常叫 OBJECTID,但也可以是其他名称,这个字段会在 ArcSDE 中注册 DB2 空间表时使用到,并由 ArcGIS 自身来进行维护。
清单 4. 创建空间表
CREATE TABLE SDE.SPATIAL_SAMPLE (
EVENT_KEY INTEGER NOT NULL PRIMARY KEY,
CREATE_TIME TIMESTAMP,
SHIFT CHAR(3),
LATITUDE DECIMAL(31,8),
LONGITUDE DECIMAL(31,8),
CITY VARCHAR(80),
STATE VARCHAR(20),
BORO_CODE CHAR(4),
ADDRESS VARCHAR(254),
SHAPE DB2GSE.ST_POINT,
OBJECTID INTEGER GENERATED ALWAYS AS IDENTITY
); |
通过以上示例代码,创建了一张名为 SPATIAL_SAMPLE 的空间点数据表。SHAPE 字段的数据类型为 DB2GSE.ST_POINT,该数据类型是数据库应用空间扩展之后,才可以使用的空间数据专有的数据类型,每一条记录将对应地图上的一个点。除了 ST_POINT(点数据类型),DB2 还提供了 ST_LINESTRING(线数据类型)、ST_POLYGON(面数据类型)等多种空间数据类型以满足空间数据的存储需要。
图 6. DB2 空间扩展支持的数据类型
EVENT_KEY 字段是 SPATIAL_SAMPLE 表的主键,OBJECTID 字段将被用于在 ArcSDE 中进行注册,而其他字段在 ArcGIS 中都将被当做 SHAPE 点数据的属性。
如果需要在原有非空间表的基础上添加空间字段,可以在 DB2 控制中心中右键点击需要添加字段的表,在 Spatial Extender->Spatial Column 中创建。
空间表创建之后,还需要在 DB2 中对空间字段进行注册,即为空间数据描述其空间参考系统(Spatial Reference System)信息(主要包含常用的标准坐标系,如 NAD_1983_StatePlane_Maryland_FIPS_1900)。通过注册,DB2 会为该空间字段添加约束,来检查数据是否符合所设定的空间参考系统,以保证空间数据的一致性。
DB2 在应用了空间扩展之后,默认支持的空间参考系可以在 DB2GSE.ST_SPATIAL_REFERENCE_SYSTEMS 表中查询,用户也可以通过空间扩展来添加自己所需要的参考系。关于空间参考系统与坐标系的讨论不在本文之列,读者可通过 参考资源获取详细信息。
在 DB2 Control Center 中右键点击需要添加字段的表(SPATIAL_SAMPLE),在 Spatial Extender->Spatial Column 中,选择需要被注册的字段,为其选择空间参考系。在这里,我们为 SDE.SPATIAL_SAMPLE 的 SHAPE 字段选择参考系为 NAD_1983_StatePlane_Maryland_FIPS_1900,其空间参考系 ID(SRSID,即 Spatial Reference System ID)是 1006。
图 7. 注册空间字段
本文最后提供了原始表(ORIGINAL_TABLE)的创建与数据导入脚本,用户可以通过这套脚本将原始表导入。利用原始表中的经纬度字段信息(LONGITUDE 与 LATITUDE),以及 DB2 空间扩展提供的 ST_TRANSFORM 方法,可以生成 SPATIAL_SAMPLE 中 SHAPE 空间字段数据。
清单 5. 插入空间数据
INSERT INTO SDE.SPATIAL_SAMPLE(EVENT_KEY, CREATE_TIME, SHIFT, LATITUDE, LONGITUDE, CITY, STATE, BORO_CODE, ADDRESS, SHAPE) SELECT EVENT_KEY, CREATE_TIME, SHIFT, LATITUDE, LONGITUDE, CITY, STATE, BORO_CODE, ADDRESS, TREAT(DB2GSE.ST_TRANSFORM(DB2GSE.ST_POINT(LONGITUDE, LATITUDE, 1), 1006) AS DB2GSE.ST_POINT) FROM SDE.ORIGINAL_TABLE; |
在以上代码中,除了 SHAPE 以外的字段都可以直接插入空间表 SPATIAL_SAMPLE,再通过经纬度数据 LONGITUDE 与 LATITUDE 生成 SHAPE。其中,DB2GSE.ST_POINT 方法可以接受多个参数以及一个空间参考系 ID,在这里,它接受 ORIGINAL_TABLE 的经纬度数据,以及 SRSID=1,返回 ST_POINT 类型的数据,此时还需要将该点投影到之前注册空间字段时应用的参考系(SRSID=1006),通过 ST_TRANSFORM 方法,可以将空间数据的参考系进行转换。由于 ST_TRANSFORM 的返回结果为 DB2GSE.ST_GEOMETRY 类型(它是 ST_POINT、ST_LINESTRING、ST_POLYGON 等空间类型的超类根节点),再利用 TREAT ( … AS DB2GSE.ST_POINT) 将其转为 SHAPE 字段的 ST_POINT 类型数据。
ArcCatalog 是与 ArcGIS 桌面应用一起安装的用于管理空间数据的工具。通过该工具可以创建用于地图的空间数据连接,包括 Folder Connection(用于连接文件数据)和 Database Connection(用于连接空间数据库)等。如图所示,通过配置“Add Spatial Database Connection”——包括服务器地址,服务(对于部署于 Windows 和 Linux 系统上的 DB2 数据库,“sde:db2”即可),数据库名以及 SDE 账户信息——就可以创建到空间数据源 GEOTEST 的连接。
图 8. 创建空间数据库连接
连接成功后,可看到 SPATIAL_SAMPLE 已经作为 SDE Table 被 ArcCatalog 识别出来。
图 9. 作为 SDE Table 类型
由上图可知,尽管 ArcGIS 已经将空间表识别成 SDE Table 类型,但并没有根据空间字段类型(如 ST_POINT)为其构建相应的要素图层(Feature Layer)。需要应用 ArcSDE 管理指令 sdelayer 来将表信息注册到 ArcSDE 中(实际上就是在 SDE.LAYER 表中添加了一条数据)。
清单 6. 用空间表创建要素图层
sdelayer -o register -l SDE.SPATIAL_SAMPLE,SHAPE -e p -C OBJECTID,USER -t ST_GEOMETRY -u sde -p passw0rd -i sde:db2 -s localhost – D GEOTEST |
在该指令中,通过设定“-o”参数指定 sdelayer 的运行方式为注册(register),“-l”参数来指定需要注册的空间表及其字段,“-e”参数指定该字段的类型(“p”代表 point),“-C”参数指定用于作 ID 的字段,“-t”指定了存储类型(对于 DB2 数据库,使用 ST_GEOMETRY),而其他参数指定了数据库连接信息。关于 sdelayer 的更多用法,请详见 参考资源。
命令运行成功之后,可以在 ArcCatalog 中连接 GEOTEST,SPATIAL_SAMPLE 已经成为“SDE Feature Class”类型,通过“预览”,可以看到密密麻麻的点图层了,每一个点代表了来自 SPATIAL_SAMPLE 表的一条记录。
图 10. SDE Feature Class 类型
图 11. 预览效果
在这一部分中,介绍了结合使用 ArcGIS 与 DB2 的关键步骤,包括如何创建空间数据库和空间表,配置 ArcSDE 与 ArcCatalog 连接、预览空间数据库的过程。第二部分中将会利用在这里创建的空间数据,通过 ArcGIS Server,在 Cognos 报表中展现可视化地图。
| 描述 | 名字 | 大小 | 下载方法 |
|---|---|---|---|
| 本文用到的 ORIGINAL_TABLE 表的创建与初始化脚本 | initOriginalTable.zip | 719KB | HTTP |
学习
-
参考 维基百科(GIS),了解更多关于地理信息系统的详情。
- 参考 Enabling a database for spatial operations,了解数据库激活空间特性所要具备的条件。
- 参考 维基百科(Spatial Reference System),来获取关于空间参考系的知识。
- 参考 ArcSDE Administration Commands – sdelayer,获得关于 sdelayer 指令的详细用法。
- 参考 利用 Spatial Extender:从纬度和经度列数据创建自动维护的空间表(DB2 版本),了解 DB2 空间扩展。
- 随时关注 developerWorks 技术活动 和 网络广播,了解各种 IBM 产品和 IT 行业话题。
- developerWorks 播客:聆听针对软件开发人员的有趣的访谈和讨论。
- developerWorks 演示中心:观看面向初学者的产品安装和设置演示,以及为经验丰富的开发人员提供的高级功能。
获得产品和技术
- 使用可以直接从 developerWorks 下载的 IBM 产品评估试用版软件 构建您的下一个开发项目。
讨论
- 参与论坛讨论。
- 参与 developerWorks 博客 并加入 developerWorks 中文社区:查看开发人员推动的博客、论坛、群组和 wikis,并与其他 developerWorks 用户交流。
