DB2配置(ArcSDE for DB2)

本文详细介绍了配置ArcSDE for DB2的步骤,包括安装Spatial Extender、创建数据库、设置权限、创建表空间、开启空间扩展、配置ArcSDE以及创建和注册空间表。在配置过程中,强调了必须先安装空间扩展,然后创建数据库,并提到了在Windows环境下创建数据库和表空间的DB2命令。此外,还展示了如何在DB2中注册空间表和添加空间字段,以及通过sdelayer命令创建要素图层。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置前提

1:在post之前,必须安装空间扩展Spatial Extender 模块(如果是分布式部署,则数据服务器和客户端都要安装),版本和数据库版本一致。注意,必须先安装空间扩展再创建数据库(目前在官网上只能下载Spatial Extender9.5,但下载不到9.5的db2数据库,可以下载9.7的数据库,但下载不到Spatial Extender9.7)

确保安装目录下空间扩展dll存在

在function目录中必须有三个dll文件(db2gse.dll、db2gsefn.dll、db2gsegeo.dll)

2:在使用 ArcSDE 之前,需要先创建其专用的账户,并为其赋予适当的操作权限,后面将用到这个账户来配置 ArcSDE,ArcGIS 也将用此账户来对空间数据进行操作。在 Windows 操作系统中,在“计算机管理”中创建本地用户“SDE”,并将其置于 DB2 管理组中。

3:创建一个满足空间扩展以及 ArcSDE 需要的数据库(只有创建了以后post才会成功)

在Windows环境下用命令编辑器创建数据库,或者用以下代码创建,在我的电脑à运行中输入db2cmd打开DB2命令窗口,并执行以下语句:

创建数据库

db2 CREATE DATABASE GEOTEST USING CODESET UTF-8 TERRITORY US COLLATE USING SYSTEM USER TABLESPACE MANAGED BY DATABASE USING (FILE'C:\db2_data\sdedb\sdetbsp' 51200)

连接ArcgisSOM(db2admin)用户,在下面创建表空间

db2 connect to GEOTEST user ArcgisSOM using 123456

 

db2 CREATE REGULAR TABLESPACE regtbs PAGESIZE 4 K MANAGED BY DATABASE USING ( FILE 'C:\db2_data\sdedb\regtbs' 51200)

 

db2 CREATE REGULAR TABLESPACE idxtbs PAGESIZE 4 K MANAGED BY DATABASE USING ( FILE 'C:\db2_data\sdedb\idxtbs' 51200)

 

db2 CREATE LONG TABLESPACE lobtbs PAGESIZE 4 K MANAGED BY DATABASE USING ( FILE 'C:\db2_data\sdedb\lobtbs' 51200)

 

db2 CREATE USER TEMPORARY TABLESPACE sdespace PAGESIZE 4 K MANAGED BY SYSTEM USING ('C:\db2_data\sdedb\sdespace' )

 

向 PUBLIC 授予所有表空间的使用权限

 

db2 "GRANT USE OF TABLESPACE regtbs TO PUBLIC" 

db2 "GRANT USE OF TABLESPACE lobtbs TO PUBLIC"

db2 "GRANT USE OF TABLESPACE sdespace TO PUBLIC"

 

向sde用户授予 DBADM

db2 "GRANT DBADM ON DATABASE TO USER  SDE"

配置参数。如果不做修改就不能使数据库空间化,也不能post操作

db2 UPDATE DATABASE CONFIGURATION FOR GEOTEST USING ALT_COLLATE_IDENTITY_16BIT

db2 UPDATE DATABASE CONFIGURATION FOR GEOTEST USING APP_CTL_HEAP_SZ 2048

db2 UPDATE DATABASE CONFIGURATION FOR GEOTEST USING APPLHEAPSZ 2048

db2 UPDATE DATABASE CONFIGURATION FOR GEOTEST USING LOGPRIMARY 10

db2 UPDATE DATABASE CONFIGURATION FOR GEOTEST USING LOGFILSIZ 1000

开启空间扩展

db2 connect to GEOTEST user ArcgisSOM using 123456

db2 db2se enable_db GEOTEST –userId sde –pw sde

重启数据库

db2 FORCE APPLICATION ALL

db2 DB2STOP FORCE

db2 DB2START

开启空间扩展方式如下:

有两种方式让数据库应用空间扩展,第一种方式是在 DB2 控制中心中,右键单击数据库,找到空间扩展(Spatial Extender)选项,并应用(Enable)它。
在 DB2 控制中心中应用空间扩展

第二种使用命令:

db2 db2se enable_db GEOTEST –userId sde –pw sde

配置 ArcSDE

通过“ArcSDE for DB2 Post Installation”工具(开始 ->ArcGIS->ArcSDE)来配置 ArcSDE,使得 ArcGIS 可以通过 ArcSDE 与 DB2 空间数据库进行交互。如果 ArcSDE 与要连接的 DB2 不在同一台机器,那么 ArcSDE 所在的机器上要安装 DB2 客户端,并将远程数据库通过 DB2 配置助手编目到本地。ArcSDE 的配置过程包含了创建库、许可授权、创建服务三大部分。在此实例中只需要完成前两步即可

配置成功后,可以利用arccatalog连接该数据库

ArcCatalog 是与 ArcGIS 桌面应用一起安装的用于管理空间数据的工具。通过该工具可以创建用于地图的空间数据连接,包括 Folder Connection(用于连接文件数据)和 Database Connection(用于连接空间数据库)等。如图所示,通过配置“Add Spatial Database Connection”——包括服务器地址,服务(对于部署于 Windows 和 Linux 系统上的 DB2 数据库,“sde:db2”即可),数据库名以及 SDE 账户信息——就可以创建到空间数据源 GEOTEST 的连接。

创建空间图层

有两种方式在已经应用了空间扩展的 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(面数据类型)等多种空间数据类型以满足空间数据的存储需要

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

插入空间数据

 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 类型数据。

连接成功后,我们可以看到SPATIAL_SAMPLE 已经作为 SDE Table 被 ArcCatalog 识别出来。

由上图可知,尽管 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),而其他参数指定了数据库连接信息

命令运行成功之后,可以在 ArcCatalog 中连接 GEOTEST,SPATIAL_SAMPLE 已经成为“SDE Feature Class”类型,通过“预览”,可以看到密密麻麻的点图层了,每一个点代表了来自 SPATIAL_SAMPLE 表的一条记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值