工作流:使用 SQL 创建表并将表注册到地理数据库

本主题仅适用于 ArcGIS for Desktop Standard 和 ArcGIS for Desktop Advanced。

复杂程度:中级 数据要求:使用自己的数据 目标: 使用 SQL 创建空间表和非空间表,而后注册到地理数据库。

您可使用 SQL 创建表文件。如果表中包含空间列,其会被视为一个空间表。而且,也可使用 SQL 语句向非空间表和空间表中填充数据。之后,为了使用 ArcGIS 和地理数据库功能,还可将表注册到地理数据库。

如果要使用自定义应用程序创建空间表或非空间表,或者从其他机构或承建商处接收数据库表,而且还想要充分利用地理数据库和 ArcGIS 的功能,则可能需要执行上述操作。

使用 SQL 创建非空间表

步骤:
  1. 打开 SQL 客户端,以具有数据库中创建表权限的用户身份登录到数据库。
  2. 使用 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 语句向 patients 表中添加记录。

步骤:
  1. 向 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 语句创建包含空间列的表。

步骤:
  1. 创建表 outbreaks,该表包含整型的 OID 列、整型的 dwel_id 列、字符串型的 address 列、整型的 city_code 和 ST_Geometry loc 列:

    Oracle

    CREATE TABLE outbreaks 
    (OID integer NOT NULL, address nvarchar2(120), city_code integer, loc sde.st_geometry);
    

    PostgreSQL

    CREATE TABLE outbreaks 
    (OID integer NOT NULL UNIQUE, address varchar(120), city_code integer, loc sde.st_geometry);
    

    DB2

    CREATE TABLE outbreaks 
    (OID integer NOT NULL, address nvarchar2(120), city_code integer, loc st_geometry);
    

    Informix

    CREATE TABLE outbreaks 
    (OID integer NOT NULL UNIQUE, address varchar(120), city_code integer, loc st_geometry);
    

使用 SQL 向空间表中添加数据

向 outbreaks 表中插入三条记录。

注注:

这些示例语句中的 0 表示 SRID。您将指定其他数字。

步骤:
  1. 使用 INSERT SQL 语句和 ST_Point 函数向 outbreaks 表中添加记录:

    Oracle

    INSERT INTO OUTBREAKS (OID, address, city_code, loc)
    VALUES (1, 
    '1420 kirchestrasse', 
    43, 
    sde.st_geometry (0.00003, 0.00051, null, null, 4326)
    );
    
    INSERT INTO OUTBREAKS (OID, address, city_code, loc)
    VALUES (2, 
    '638 villa arbol', 
    10, 
    sde.st_geometry (0.00020, -0.00029, null, null, 4326)
    );
    
    INSERT INTO OUTBREAKS (OID, address, city_code, loc)
    VALUES (3, 
    '5579 riverview dr', 
    96, 
    sde.st_geometry (-0.00048, -0.00009, null, null, 4326)
    );
    

    PostgreSQL

    INSERT INTO outbreaks (OID, address, city_code, loc)
    VALUES (1, 
    '1420 kirchestrasse', 
    43, 
    sde.st_point (0.00003, 0.00051, null, null, 4326)
    );
    
    INSERT INTO outbreaks (OID, address, city_code, loc)
    VALUES (2, 
    '638 villa arbol', 
    10, 
    sde.st_point (0.00020, -0.00029, null, null, 4326)
    );
    
    INSERT INTO outbreaks (OID, address, city_code, loc)
    VALUES (3, 
    '5579 riverview dr', 
    96, 
    sde.st_point (-0.00048, -0.00009, null, null, 4326)
    );
    

    DB2

    INSERT INTO OUTBREAKS (OID, address, city_code, loc)
    VALUES (1, 
    '1420 kirchestrasse', 
    43, 
    st_point (0.00003, 0.00051, null, null, 0)
    );
    
    INSERT INTO OUTBREAKS (OID, address, city_code, loc)
    VALUES (2, 
    '638 villa arbol', 
    10, 
    st_point (0.00020, -0.00029, null, null, 0)
    );
    
    INSERT INTO OUTBREAKS (OID, address, city_code, loc)
    VALUES (3, 
    '5579 riverview dr', 
    96, 
    st_point (-0.00048, -0.00009, null, null, 0)
    );
    

    Informix

    INSERT INTO outbreaks (OID, address, city_code, loc)
    VALUES (1, 
    '1420 kirchestrasse', 
    43, 
    st_point (0.00003, 0.00051, null, null, 0)
    );
    
    INSERT INTO outbreaks (OID, address, city_code, loc)
    VALUES (2, 
    '638 villa arbol', 
    10, 
    st_point (0.00020, -0.00029, null, null, 0)
    );
    
    INSERT INTO outbreaks (OID, address, city_code, loc)
    VALUES (3, 
    '5579 riverview dr', 
    96, 
    st_point (-0.00048, -0.00009, null, null, 0)
    );
    

将表注册到地理数据库

可使用 ArcGIS for Desktop 将表注册到地理数据库。

下面一组步骤介绍了如何在 ArcGIS for Desktop 中注册到地理数据库:

步骤:
  1. 启动 ArcMap 并打开 Catalog 窗口,或启动 ArcCatalog。
  2. 连接到包含要注册的表的企业级地理数据库。

    此连接在目录树的“数据库连接”节点下进行。请确保以表所有者的身份进行连接。

  3. 右键单击 patients 表,然后单击注册到地理数据库
  4. PID 字段被定义为非空整型列,因此被用作所注册表的 ObjectID。
  5. 右键单击 outbreaks 表,然后单击注册到地理数据库
  6. 为所插入的字段定义了空间参考并且只插入了一种实体类型(点),因此 ArcGIS 会根据注册进行检测并使用该信息来定义要素类。OID 字段被定义为非空整型列,因此被用作所注册要素类的 ObjectID。
11/19/2012