フィーチャクラスおよびテーブルを作成する際には、各フィールドのデータ タイプを選択します。利用可能なデータ タイプには、さまざまな数値タイプ、テキスト タイプ、日付タイプ、BLOB (Binary Large Object)、GUID (Globally Unique Identifier) などが含まれます。正しいデータ タイプを選択することにより、データを正しく格納し、解析、データ管理、およびビジネス ニーズへの対応を容易にすることができます。
このトピックで説明するデータ タイプには、ArcGIS でフィーチャクラスまたはテーブルを作成するときに利用できるデータ タイプが含まれています。データをデータベースまたはデータベース管理システム (DBMS) のジオデータベースに格納した場合に、ArcGIS と DBMS のデータ タイプが正確に一致しないことがあります。このようなデータ タイプは、使用可能な最も近いデータ タイプと照合されます。このプロセスはデータ タイプ マッピングと呼ばれます。このプロセスでは、値を別のタイプとして DBMS に格納し、データ属性に異なる基準を適用することができます。その結果、ArcGIS Desktop のテーブルまたはフィーチャクラスのプロパティで表示されるデータ タイプは、最初に定義したデータ タイプとは異なる場合があります。DBMS のデータ タイプ マッピング プロセスの詳細については、「DBMS のデータ タイプ」をご参照ください。
また、シェープファイルや dbf テーブルなどの他のデータ格納形式には、異なるデータ タイプ制限が適用されます。異なるデータ格納タイプ間でデータを移動する際は、格納先の形式のデータ タイプとサイズの制限を理解していることを確認してください。
数値
数値は 4 つの数値データ タイプのいずれかで格納することができます。
- Short integer
- Long integer
- Float (単精度浮動小数点数)
- Double (倍精度浮動小数点数)
データ タイプを選択する際には、まず、自然数と有理数のどちらが必要であるかを検討します。自然数 (12、12,345,678 など) を格納できればよい場合は、short integer または long integer を指定します。小数点を持つ有理数 (0.23、1234.5678 など) を格納する必要がある場合は、float または double を指定します。
次に、short integer と long integer のどちらか、または float と double のどちらかを選択する際に、格納領域が最も少ないデータ タイプを選択します。これにより、必要な記憶領域の量を最小限に抑えるだけでなく、パフォーマンスを向上させます。-32,768 ~ 32,767 の整数だけを格納する必要がある場合は、4 バイトを消費する long integer データ タイプではなく、2 バイトしか消費しない short integer データ タイプを指定します。-3.4E38 ~ 1.2E38 の有理数だけを格納する必要がある場合は、8 バイトを消費する double データ タイプではなく、4 バイトを消費する float データ タイプを指定します。データ タイプ、その有効範囲、および格納領域の要件は、下掲の表に示すとおりです。これらはファイルおよびパーソナル ジオデータベースの有効範囲です。有効範囲は、データベースとエンタープライズ/ワークグループ/デスクトップ ジオデータベースで少し異なります。
データ タイプ | 有効範囲 | サイズ (バイト) | 用途 |
Short integer | -32,768 以上 32,767 以下 | 2 | 小数値を含まない特定の範囲内の数値、コード値 |
Long integer | -2,147,483,648 ~ 2,147,483,647 | 4 | 小数値を含まない特定の範囲内の数値 |
Float (単精度浮動小数点数) | -3.4E38 ~ 1.2E38 | 4 | 小数値を含む特定の範囲内の数値 |
Double (倍精度浮動小数点数) | -2.2E308 ~ 1.8E308 | 8 | 小数値を含む特定の範囲内の数値 |
ファイル ジオデータベースまたはパーソナル ジオデータベースのテーブルで数値フィールドを指定する場合は、データ タイプを指定するだけで済みます。データベースまたはエンタープライズ/ワークグループ/デスクトップ ジオデータベースの数値フィールドを指定する場合は、精度 (全桁数) とスケール (小数点以下の桁数) も指定します。
精度とスケールを指定することにより、フィールドに設定可能な値の範囲と数値形式を制限できるため、より厳密な制御が可能になります。たとえば、フィールドのタイプとして精度が 4、スケールが 2 の float を指定する場合、12.34 (または 12.3 や 12) の値を設定することができます。このフィールドに 12.345 を入力しようとすると、最大桁数と小数点以下の桁数を超えているため、エラー メッセージが表示されます。これに対し、フィールドのタイプとして精度が 5、スケールが 3 の float を指定した場合は、12.345、12.34、または 12.3 を入力することができます。
次に、データ タイプとそれらの有効な精度値およびスケール値をまとめます。この表は、データ タイプ、精度、スケールを選択する際に役立ちます。
データ タイプ | 精度 (フィールドの長さ) | スケール (小数点以下の桁数) |
---|---|---|
Short integer* | 1-4 (PostgreSQL) 1-5 (Oracle、SQL Server、Netezza) 5 (Db2、Informix) | 0 |
Long integer | 5-9 (PostgreSQL) 6-9 (Db2、Informix、Netezza、SQL Server) 6-10 (Oracle) | 0 |
浮動小数点 | 1-6 | 1-6 |
数値 | 7+ | 0+ |
*ArcGIS Desktop のデフォルトでは、short integer が精度 5 で作成されます。ただし、short integer 列に格納できる値は、-32,768 ~ 32,767 の範囲内の値だけです。したがって、精度を 5 に設定したとしても、32,767 を超える値または -32,768 未満の値は、short integer フィールドに格納できません。Oracle 以外のデータベースでは、ArcGIS Desktop で作成された short integer 列に精度を指定する必要はありません。SQL Server データベースまたは PostgreSQL データベースでは、ArcGIS Desktop で作成された long integer 列に精度を指定する必要はありません。
数値の範囲とそれをデータベースまたはエンタープライズ/ワークグループ/デスクトップ ジオデータベースに格納する方法の例を次に示します。
範囲値 | データ タイプ | 精度 (フィールドの長さ) | スケール (小数点以下の桁数) |
---|---|---|---|
0 ~ 99 | Short integer | 2 | 0 |
-99 ~ 99* | Short integer | 3 | 0 |
0 ~ 32,767* | Short integer | 5 | 0 |
32,768 ~ 99,999 | Long integer | 5 | 0 |
0.001 ~ 0.999 | 浮動小数点 | 4 | 3 |
1,000.00 ~ 9,999.99 | 浮動小数点 | 6 | 2 |
-123,456.78 ~ 0* | 数値 | 9 | 2 |
0 ~ 1,234.56789 | 数値 | 9 | 5 |
* 負数の場合はマイナス記号を格納するための追加の精度が必要です。
コンピューターに格納できる桁数は、割り当てられる格納領域によって制限されます。データベースとジオデータベースの double データ タイプのフィールドには、15 桁までの精度の数値 (8 バイトの格納領域に収まる最も長い数値) しか正確に格納できません。これを超える桁数の数値は丸められ、科学表記法と同様の形式で格納され、概数となります。たとえば、20 桁の数値「12,345,678,901,234,567,890」を入力した場合、この数値は丸められ、15 桁の数値「1.23456789012346E+19」として格納されます。末尾にあるコード値「E+19」は、小数点の位置を表します。
ファイル ジオデータベースまたはパーソナル ジオデータベースの float タイプのフィールドには、6 桁の精度の数値しか格納できません。たとえば、float タイプのフィールドに、6 桁を超える数値である 123,456.7 を格納することはできません。この数値をファイル ジオデータベースまたはパーソナル ジオデータベースに入力することは可能ですが、6 桁の数値である 123,457 に丸められます。この数値を正確な精度で格納する必要がある場合は、double タイプのフィールドに格納することができます。データベースとエンタープライズ/ワークグループ/デスクトップ ジオデータベースの float データ タイプのフィールドでは、数値の丸めが行われないため、そのフィールドの精度を超える桁数の数値を入力することができません。
テキスト
テキスト フィールドは、文字列を表します。これには、道路名、属性プロパティ、その他のテキスト記述が含まれます。ジオデータベースのテキスト属性を繰り返し使用する場合は、コード値を設定するという方法もあります。テキスト記述は数値でコード化されます。たとえば、道路タイプを数値でコード化する場合には、舗装された道路に 1、砂利の道路に 2 などを割り当てていきます。この方法には、ジオデータベースで使用される格納領域が少なくなるという利点がありますが、ユーザーがコード値を理解する必要があります。ジオデータベース内のコード値ドメインでコード値を定義し、コードを格納する整数フィールドにこのドメインを関連付けると、ArcGIS Desktop でテーブルを表示した際にテキスト記述が表示されます。
テキストに使用される文字は言語によって異なります。言語間でのテキストの変換を容易にするために、ArcGIS では文字のエンコーディングに Unicode を使用しています。
日付
日付データ タイプには、日付、時間、または日付と時間を格納することができます。この情報を表現するデフォルト形式は、mm/dd/yyyy hh:mm:ss と AM または PM の指定です。ArcGIS でテーブル内の日付フィールドに入力した日付は、この形式に変換されます。
BLOB
BLOB は、長いバイナリ数値列として格納されるデータです。ArcGIS はアノテーションとディメンションを BLOB として格納します。また、このタイプのフィールドには、画像、マルチメディア、またはコードのビットなどのアイテムを格納することができます。BLOB フィールドにアイテムを読み込む、または BLOB フィールドの内容を参照するには、カスタム ローダー、カスタム ビューアー、またはサードパーティ アプリケーションを使用する必要があります。
ObjectID
ArcGIS によって維持される ObjectID フィールドは、テーブル内の各行が一意識別子を持つことを保証します。ArcGIS の主な機能 (画面移動、フィーチャの識別、選択セットの表示など) は、このフィールドが存在するかどうかに依存し、値が一意である必要があります。
ほとんどの基本的な ArcGIS Desktop 機能では、ObjectID が一意である必要があるため、ArcGIS の外部でデータベースを直接操作するときは ObjectID の値が重複しないようにしてください。たとえば、1 対多のリレーションシップを持つビューを作成するときに ObjectID が重複する可能性があります。ObjectID が重複している場合、ArcGIS Desktop の機能が正常に動作しなくなります。
データベース テーブルを ArcMap に追加するときには、ObjectID が必要です。ArcGIS が ObjectID として使用する NULL 以外の整数フィールドを検出できない場合、フィールドを選択するように求められます。詳細については、「クエリ レイヤーの一意識別子フィールドの選択」をご参照ください。
Global ID
Global ID と GUID データ タイプは、中括弧 ({}) で囲まれた 36 文字のレジストリ形式の文字列を格納します。これらの文字列によって、ジオデータベース内およびジオデータベース間のフィーチャまたはテーブル行を一意に識別できます。一方向と双方向のジオデータベース レプリケーションでは、フィーチャがこのようにして追跡されます。開発者はそれらをリレーションシップや GUID が必要なアプリケーションに使用することができます。リレーションシップでは、Global ID フィールドが関連元キーの場合、GUID フィールドは関連先のキーでなければなりません。ジオデータベースのデータセットに Global ID を追加するには、カタログ ツリーで右クリックして、[Global ID の追加] をクリックします。これらの値はジオデータベースによって自動的に管理されます。GUID フィールドを作成することもできますが、フィールドの値はユーザーが管理しなければなりません。
パーソナル ジオデータベースや Micorosoft SQL Server など、ネイティブ GUID データ タイプを持つデータベースは、Global ID と GUID の値を 16 バイト データとして格納します。ネイティブ GUID データ タイプを持たないデータベースは、それらの値を 38 バイト データとして格納します。
Global ID に関する注意事項
- GUID フィールドは、フィーチャの [プロパティ] ダイアログ ボックスの [フィールド] タブか、テーブル ウィンドウの [フィールドの追加] コマンドでジオデータベース データセットに追加することができます。
- [Global ID の追加] コマンドは、ジオデータベースのスタンドアロン フィーチャクラス、テーブル、および属性リレーションシップ クラスで利用することができます。このコマンドは、フィーチャ データセットの個々のデータセットで実行することはできません。フィーチャ データセット全体に対してのみ実行することができます。データベースのテーブルで実行することもできません。
- Global ID 列がすでに存在する場合、元の列を破棄して新しい Global ID 列を追加するのではなく、元の列は変更されないままとなります。
- ジオデータベースのフィーチャ データセットに追加するフィーチャクラスに Global ID 列を追加したい場合は、フィーチャ データセットで [Global ID の追加] コマンドを実行する必要があります。これにより、新しいフィーチャクラスとまだ Global ID 列を持っていないフィーチャクラスに、Global ID 列が追加されます。すでに Global ID 列を持っているフィーチャクラスは変更されないままとなります。
- コピーと貼り付け、データ抽出、および XML ワークスペースのエクスポートとインポートを行っても、出力ジオデータベースで Global ID 値は維持されます。他のデータ エクスポートまたはインポート方法では、Global ID 値は維持されません。
ラスター タイプのフィールド
フィーチャのフィールドを画像にリンクするだけのハイパーリンクとは異なり、ラスター タイプのフィールドでは実際にラスター データをジオデータベース内またはジオデータベースとともに格納することができます。詳細については、「ラスター データセットをフィーチャクラスの属性として追加」をご参照ください。
ジオメトリ
ArcGIS のジオメトリ データ タイプは、テーブルに格納するジオメトリの種類 (ポイント、ライン、ポリゴン、マルチポイント、またはマルチパッチ) を示します。ジオメトリ タイプとして格納されるフィールドは、ArcGIS で作成される場合には Shape という名前になります。
ジオメトリは、ArcGIS によって使用されるデータ タイプです。たとえば、新しいフィーチャクラスに [ポリゴン フィーチャ] を選択すると、次に示すように、ArcGIS は Shape フィールドを追加し、ArcGIS データ タイプをジオメトリに設定します。
[フィーチャクラスの新規作成] ダイアログ ボックスの [フィールド プロパティ] セクションで、[ジオメトリ タイプ] として [ポリゴン] が表示されます。
フィーチャクラスを異なるフィーチャ タイプ (ライン、ポイント、マルチポイント、マルチパッチ、ディメンション、またはアノテーション) で作成した場合、Shape フィールドのジオメトリ タイプはフィーチャ タイプに応じて異なります (ライン、ポイント、マルチポイント、マルチパッチ、ポリゴン、ディメンション、およびアノテーション)。
データベースまたはエンタープライズ/ワークグループ/デスクトップ ジオデータベースのフィーチャクラスにジオメトリ フィールドを作成する場合には、database データ タイプというデータ タイプも考慮する必要があります。データベースに Shape フィールドの値を格納する方法は、DBMS が使用するジオメトリ格納タイプによって異なります。データベースにフィーチャクラスを作成するときには、[フィーチャクラスの新規作成] ダイアログ ボックスの [フィールド プロパティ] セクションにフィールドの空間タイプを指定します。ジオデータベースにフィーチャクラスを作成するときに使用されるジオメトリ格納タイプは、指定したコンフィグレーション キーワードの GEOMETRY_STORAGE パラメーターの設定によって決まります。