ワークフロー: SQL を使用したテーブルの作成と ArcSDE およびジオデータベースへのテーブルの登録

このトピックは、ArcEditor および ArcInfo にのみ適用されます。

難易度: 中級 データ要件 独自のデータを使用 目的: SQL で空間テーブルと非空間テーブルの両方を作成し、これらのテーブルを ArcSDE に登録してから、ジオデータベースに登録します。

テーブルの作成には SQL を使用できます。テーブルが空間列を含んでいる場合、テーブルは空間テーブルとみなされます。空間テーブルであってもなくても、SQL でデータを投入できます。そのうえで、テーブルを ArcSDE とジオデータベースに登録すれば、ArcSDE とジオデータベースの機能が使えるようになります。

この操作は、カスタム アプリケーションで空間テーブルや非空間テーブルを作成する、または別の機関や契約者からデータベース テーブルを受け取り、そのテーブルに対してジオデータベースと ArcGIS の機能の利用したい場合に行うとよいでしょう。

SQL を使用した非空間テーブルの作成

手順:
  1. SQL クライアントを開き、データベースにテーブルを作成する権限のあるユーザとしてデータベースにログインします。
  2. CREATE TABLE SQL ステートメントで、PID、f_name、l_name、dwel_id という列を持つ非空間テーブル patients を作成します。

    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 で patients テーブルにレコードを追加する場合は、SQL の INSERT ステートメントを使用します。

手順:
  1. patients テーブルに 4 つのレコードを挿入します。

    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. 整数の OID、整数の dwel_id、文字列の string、整数の city_code、ST_Geometry の location の列が含まれた outbreaks テーブルを作成します。

    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 テーブルに 3 つのレコードを挿入します。

メモメモ:

以下のサンプル ステートメントで使用されている 0 は SRID です。実際には別の数値を指定することになります。

手順:
  1. 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 システム テーブルに追加されます。

以下に示す例に記載されたオプションの意味を以下に示します。

手順:
  1. ディレクトリを SDEHOME から bin に変更します。
  2. 登録操作で sdetable コマンドを発行して 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 システム テーブルに追加されます。

これらの例に記載されたオプションの意味を以下に示します。

手順:
  1. outbreaks テーブルを ArcSDE に登録するには、登録操作で sdelayer コマンドを使用します。

    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 を使用できます。

ArcObjects の IClassSchemaEdit3 の RegisterAsObjectClass メソッドを使用すれば、ジオデータベースにテーブルやレイヤを登録できます。構文と使用方法に関する情報については、ArcObjects ライブラリ リファレンスをご参照ください。

以下の一連の手順は、ArcGIS Desktop でジオデータベースに登録する方法の説明です。

カタログ ツリーで、ジオデータベースに登録するテーブルまたはレイヤを右クリックし、[ジオデータベースに登録] をクリックします。

手順:
  1. ArcMap を起動してカタログ ウィンドウを開くか、ArcCatalog を起動します。
  2. 登録するテーブルを含む ArcSDE ジオデータベースに接続します。

    これで、カタログ ツリーの [Database Connections] ノードで、接続が確立されるようになりました。必ずテーブルの所有者として接続してください。

  3. patients テーブルを右クリックします。
  4. [ジオデータベースに登録] をクリックします。
  5. ArcSDE にテーブルを登録したときに [OID] フィールドを ObjectID として指定したので、このフィールドをジオデータベースの ObjectID フィールドとして使用するよう選択します。
  6. [OK] をクリックします。
  7. outbreaks レイヤを右クリックします。
  8. [ジオデータベースに登録] をクリックします。
  9. [OK] をクリックします。

3/6/2012