ワークフロー: SQL を使用したテーブルの作成と ArcSDE およびジオデータベースへのテーブルの登録
このトピックは、ArcEditor および ArcInfo にのみ適用されます。
テーブルの作成には SQL を使用できます。テーブルが空間列を含んでいる場合、テーブルは空間テーブルとみなされます。空間テーブルであってもなくても、SQL でデータを投入できます。そのうえで、テーブルを ArcSDE とジオデータベースに登録すれば、ArcSDE とジオデータベースの機能が使えるようになります。
この操作は、カスタム アプリケーションで空間テーブルや非空間テーブルを作成する、または別の機関や契約者からデータベース テーブルを受け取り、そのテーブルに対してジオデータベースと ArcGIS の機能の利用したい場合に行うとよいでしょう。
SQL を使用した非空間テーブルの作成
- SQL クライアントを開き、データベースにテーブルを作成する権限のあるユーザとしてデータベースにログインします。
- 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 ステートメントを使用します。
- 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 ステートメントを使用することができます。
- 整数の 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 です。実際には別の数値を指定することになります。
- 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 コマンドを発行して 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 と指定されています。
- -t オプションでは、ジオメトリ データ タイプを指定します。この場合は、ST_Geometry です。
- -C オプションでは、ObjectID として使用する列の名前、この場合は RID を指定するとともに、この列をシステム管理にすることを指定します。この例の場合、この列は存在していません。このため、ArcSDE によってこの列がテーブルに追加されます。
- –E オプションでは、レイヤの最小と最大の X 座標と Y 座標を指定します。
- –R オプションでは、ArcSDE システム テーブルからの空間参照 ID(SRID)を指定します。
- -i オプションでは、接続構文を指定します。この場合は、ジオデータベースへのダイレクト コネクションが使用されます。
- -s オプションは、サーバまたはデータ ソースを示しています。
- -D オプション(Oracle では使用しません)では、データベース名を指定します。
- –u オプションと –p オプションはテーブルの所有者のユーザ名とパスワードです。
- 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 でジオデータベースに登録する方法の説明です。
カタログ ツリーで、ジオデータベースに登録するテーブルまたはレイヤを右クリックし、[ジオデータベースに登録] をクリックします。
- ArcMap を起動してカタログ ウィンドウを開くか、ArcCatalog を起動します。
-
登録するテーブルを含む ArcSDE ジオデータベースに接続します。
これで、カタログ ツリーの [Database Connections] ノードで、接続が確立されるようになりました。必ずテーブルの所有者として接続してください。
- patients テーブルを右クリックします。
- [ジオデータベースに登録] をクリックします。
- ArcSDE にテーブルを登録したときに [OID] フィールドを ObjectID として指定したので、このフィールドをジオデータベースの ObjectID フィールドとして使用するよう選択します。
- [OK] をクリックします。
- outbreaks レイヤを右クリックします。
- [ジオデータベースに登録] をクリックします。
- [OK] をクリックします。