工作流:使用 SQL 创建表并将表注册到 ArcSDE 和地理数据库
此主题仅适用于 ArcEditor 和 ArcInfo。
可使用 SQL 来创建表。如果表包含空间列,其将被视为空间表。可使用 SQL 用数据来填充非空间表和空间表。然后,为了使用 ArcSDE 和地理数据库功能,可将表注册到 ArcSDE 和地理数据库。
如果要使用自定义应用程序创建空间表或非空间表,或者从其他机构或承包商接收数据库表,但想要利用地理数据库和 ArcGIS 功能,则可能会执行上述操作。
使用 SQL 创建非空间表
- 打开 SQL 客户端,以具有在数据库中创建表的权限的用户身份登录到数据库。
- 使用 CREATE TABLE SQL 语句创建非空间表 patients,该表包含具有以下名称的列:PID、f_name、l_name 和 dwel_id。
Oracle
CREATE TABLE patients (PID integer NOT NULL, f_name nvarchar2(25), l_name nvarchar2(38), dwel_id integer);
PostgreSQL
CREATE TABLE patients (PID integer NOT NULL UNIQUE, f_name varchar(25), l_name varchar(38), dwel_id integer);
DB2
CREATE TABLE patients (PID integer NOT NULL, f_name varchar(25), l_name varchar(38), dwel_id integer);
Informix
CREATE TABLE patients (PID integer NOT NULL, f_name varchar(25), l_name varchar(38), dwel_id integer);
使用 SQL 向非空间表中添加数据
使用 SQL INSERT 语句向使用 SQL 的 patients 表中添加记录。
- 向 patients 表中插入四条记录。
Oracle
INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id) VALUES (1, 'wolfgang', 'bruker', 4301); INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id) VALUES (2, 'ida', 'pastens', 4301); INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id) VALUES (3, 'ricardo', 'montoya', 1001); INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id) VALUES (4, 'tukufu', 'endel', 9601);
PostgreSQL
INSERT INTO patients (PID, f_name, l_name, dwel_id) VALUES (1, 'wolfgang', 'bruker', 4301); INSERT INTO patients (PID, f_name, l_name, dwel_id) VALUES (2, 'ida', 'pastens', 4301); INSERT INTO patients (PID, f_name, l_name, dwel_id) VALUES (3, 'ricardo', 'montoya', 1001); INSERT INTO patients (PID, f_name, l_name, dwel_id) VALUES (4, 'tukufu', 'endel', 9601);
DB2
INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id) VALUES (1, 'wolfgang', 'bruker', 4301); INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id) VALUES (2, 'ida', 'pastens', 4301); INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id) VALUES (3, 'ricardo', 'montoya', 1001); INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id) VALUES (4, 'tukufu', 'endel', 9601);
Informix
INSERT INTO patients (PID, f_name, l_name, dwel_id) VALUES (1, 'wolfgang', 'bruker', 4301); INSERT INTO patients (PID, f_name, l_name, dwel_id) VALUES (2, 'ida', 'pastens', 4301); INSERT INTO patients (PID, f_name, l_name, dwel_id) VALUES (3, 'ricardo', 'montoya', 1001); INSERT INTO patients (PID, f_name, l_name, dwel_id) VALUES (4, 'tukufu', 'endel', 9601);
使用 SQL 创建空间表
还可使用 CREATE TABLE 语句创建包含空间列的表。
- 创建表 outbreaks,该表包含整型 OID、整型 dwel_id、字符串地址、整型 city_code 和 ST_Geometry location 列。
Oracle
CREATE TABLE outbreaks (OID integer NOT NULL, address nvarchar2(120), city_code integer, location sde.st_geometry);
PostgreSQL
CREATE TABLE outbreaks (OID integer NOT NULL UNIQUE, address varchar(120), city_code integer, location sde.st_geometry);
DB2
CREATE TABLE outbreaks (OID integer NOT NULL, address nvarchar2(120), city_code integer, location st_geometry);
Informix
CREATE TABLE outbreaks (OID integer NOT NULL UNIQUE, address varchar(120), city_code integer, location st_geometry);
使用 SQL 向空间表中添加数据
向 outbreaks 表中插入三条记录。
这些示例语句中的 0 表示 SRID。您将指定其他数字。
- 使用 INSERT SQL 语句和 ST_Point 函数向 outbreaks 表中添加记录。
Oracle
INSERT INTO OUTBREAKS (OID, address, city_code, location) VALUES (1, '1420 kirchestrasse', 43, sde.st_point (0.00003, 0.00051, 0) ); INSERT INTO OUTBREAKS (OID, address, city_code, location) VALUES (2, '638 villa arbol', 10, sde.st_point (0.00020, -0.00029, 0) ); INSERT INTO OUTBREAKS (OID, address, city_code, location) VALUES (3, '5579 riverview dr', 96, sde.st_point (-0.00048, -0.00009, 0) );
PostgreSQL
INSERT INTO outbreaks (OID, address, city_code, location) VALUES (1, '1420 kirchestrasse', 43, sde.st_point (0.00003, 0.00051, 0) ); INSERT INTO outbreaks (OID, address, city_code, location) VALUES (2, '638 villa arbol', 10, sde.st_point (0.00020, -0.00029, 0) ); INSERT INTO outbreaks (OID, address, city_code, location) VALUES (3, '5579 riverview dr', 96, sde.st_point (-0.00048, -0.00009, 0) );
DB2
INSERT INTO OUTBREAKS (OID, address, city_code, location) VALUES (1, '1420 kirchestrasse', 43, st_point (0.00003, 0.00051, 0) ); INSERT INTO OUTBREAKS (OID, address, city_code, location) VALUES (2, '638 villa arbol', 10, st_point (0.00020, -0.00029, 0) ); INSERT INTO OUTBREAKS (OID, address, city_code, location) VALUES (3, '5579 riverview dr', 96, st_point (-0.00048, -0.00009, 0) );
Informix
INSERT INTO outbreaks (OID, address, city_code, location) VALUES (1, '1420 kirchestrasse', 43, st_point (0.00003, 0.00051, 0) ); INSERT INTO outbreaks (OID, address, city_code, location) VALUES (2, '638 villa arbol', 10, st_point (0.00020, -0.00029, 0) ); INSERT INTO outbreaks (OID, address, city_code, location) VALUES (3, '5579 riverview dr', 96, st_point (-0.00048, -0.00009, 0) );
将非空间表注册到 ArcSDE
使用 sdetable 命令将非空间表注册到 ArcSDE。注册后,该表的一条记录将添加到 TABLE_REGISTRY 系统表中。该表中每列的记录还将添加到 COLUMN_REGISTRY 系统表中。
这些示例中所示的选项表示以下内容:
- –o 选项表示正在执行的操作,在本例中为 register。
- –t 选项用于指定要注册的表的名称 (patients)。
- –c 选项用于指定要用作 ObjectID 的列的名称 (PID)。
- –C 选项用于指定从现在开始将由系统来填充列。
- –i 选项指定连接语法。在本例中,使用了地理数据库的直接连接。
- –s 选项表示服务器或数据源。
- –D 选项(不适用于 Oracle)用于指定数据库名称。
- –u 和 –p 选项为表的所有者的用户名和密码。
- 将目录更改为 SDEHOME > bin。
- 发出 sdetable 命令的 register 操作,将 patients 表注册到 ArcSDE。
Oracle
sdetable -o register -t patients -c PID -C SDE -i sde:oracle11g -s server1 -u creator -p powerup
PostgreSQL
sdetable -o register -t patients -c PID -C SDE -i sde:postgresql:server1 -D postdb -s server1 -u creator -p powerup
DB2
sdetable -o register -t patients -c PID -C SDE -i sde:db2 -D db2db -s server1 -u creator -p powerup
Informix
sdetable -o register -t patients -c PID -C SDE -i sde:informix -D idsdb -s server1 -u creator -p powerup
将空间表注册到 ArcSDE
使用 sdelayer 命令将空间表注册到 ArcSDE。注册后,该表的一条记录将添加到 LAYERS 和 TABLE_REGISTRY 系统表中。该表中每列的记录还将添加到 COLUMN_REGISTRY 系统表中,空间列的一条记录将添加到 GEOMETRY_COLUMNS 系统表中。
这些示例中所示的选项表示以下内容:
- –o 选项表示正在执行的操作,在本例中为 register。
- –l 选项用来指定要注册的表的名称 (outbreaks) 和几何列的名称 (location)。
- –e 选项用于指示存储在该表中的几何类型。在本例中,点存储在该表中,因此通过 –e 选项指定 p。
- 几何数据类型 (ST_Geometry) 通过 –t 选项进行指定。
- –C 选项用于指定要用作 ObjectID 的列的名称 (RID),以及指定由系统对列进行维护。在本例中,列尚不存在。因此,ArcSDE 将向表中添加此列。
- –E 选项用于指定图层的 x 坐标和 y 坐标的最小值及最大值。
- ArcSDE 系统表中的空间参考 ID (SRID) 通过 –R 选项进行指定。
- –i 选项用于指定连接语法。在本例中,使用了地理数据库的直接连接。
- –s 选项表示服务器或数据源。
- –D 选项(不适用于 Oracle)用于指定数据库名称。
- –u 和 –p 选项为表的所有者的用户名和密码。
- 使用 sdelayer 命令的 register 操作,将 outbreaks 表注册到 ArcSDE。
Oracle
sdelayer -o register -l outbreaks,location -e p -t ST_GEOMETRY -C RID,SDE -E -498618.389,-243045.144,498618.389,243045.144 -R 0 -i sde:oracle11g -s server1 -u creator -p powerup
PostgreSQL
sdelayer -o register -l outbreaks,location -e p -t ST_GEOMETRY -C RID,SDE -E -498618.389,-243045.144,498618.389,243045.144 -R 0 -i sde:postgresql:server1 -s server1 -D postdb -u creator -p powerup
DB2
sdelayer -o register -l outbreaks,location -e p -t ST_GEOMETRY -C RID,SDE -E -498618.389,-243045.144,498618.389,243045.144 -R 0 -i sde:db2 -s server1 -D db2db -u creator -p powerup
Informix
sdelayer -o register -l outbreaks,location -e p -t ST_GEOMETRY -C RID,SDE -E -498618.389,-243045.144,498618.389,243045.144 -R 0 -i sde:informix -s server1 -D idsdb -u creator -p powerup
将表和图层注册到地理数据库
可使用 ArcGIS Desktop 或 ArcObjects 将表或图层注册到地理数据库。
使用 IClassSchemaEdit3 ArcObjects 方法中的 RegisterAsObjectClass 将表或图层注册到地理数据库。有关语法和用法的信息,请参阅 ArcObjects 库参考。
下面一组步骤介绍了如何在 ArcGIS Desktop 中注册到地理数据库。
在目录树中,右键单击要注册到地理数据库的表或图层,然后单击注册到地理数据库 (Geodatabase)。
- 启动 ArcMap 并打开 Catalog 窗口,或启动 ArcCatalog。
-
连接到包含要注册的表的 ArcSDE 地理数据库。
此连接在 Catalog 目录树的“数据库连接”节点下进行。请确保以表所有者的身份进行连接。
- 右键单击 patients 表。
- 单击注册到地理数据库。
- 将表注册到 ArcSDE 时已将 OID 字段指定为 ObjectID,因此选择该字段用作地理数据库的 ObjectID 字段。
- 单击确定。
- 右键单击 outbreaks 图层。
- 单击注册到地理数据库。
- 单击确定。