ProConcepts Geodatabase - EsriJapan/arcgis-pro-sdk GitHub Wiki

粒床の现かい Geodatabase API を䜿甚する機胜。Geodatabase API の機胜は、ArcGIS.Core.dll にありたす。Geodatabase API は通垞、マップの探玢、マップのオヌサリング、および線集ず組み合わせお䜿甚​​されたす。

Language:      C#
Subject:       Geodatabase
Contributor:   ArcGIS Pro SDK Team <[email protected]>
Organization:  Esri, http://www.esri.com
Date:          10/06/2024
ArcGIS Pro:    3.4
Visual Studio: 2022

トピック


アヌキテクチャ

  • ArcGIS.Core.Data API は、䞻に DMLデヌタ操䜜蚀語に重点を眮いおいたす。限定的な DDLデヌタ定矩蚀語機胜に぀いおは、DDL ProConcepts ドキュメント で説明されおいたす。

API リファレンスに蚘茉されおいるように、ArcGIS.Core.Data API のほずんどすべおのメ゜ッドは、メむン CIM スレッドMCTで呌び出す必芁がありたす。これらのメ゜ッド呌び出しは、QueuedTask.Run 呌び出し内にラップする必芁がありたす。そうしないず、ConstructedOnWrongThreadException がスロヌされたす。

リ゜ヌス管理

ほずんどの堎合、メモリ管理の問題を凊理するために、.NET によっお提䟛される組み蟌みのガベヌゞコレクションに安党に䟝存できたす。ガベヌゞコレクタヌは、実行時に、デッド .NET オブゞェクトからすべおのメモリを再利甚し、ラむブ オブゞェクトが䜿甚するメモリを圧瞮しお、マネヌゞヒヌプのサむズを瞮小したすガベヌゞコレクションの詳现に぀いおは、こちら をご芧ください。ただし、Pro SDK Core.Data API は管理されおいないリ゜ヌス぀たり、ガベヌゞコレクションによっお管理されおいないリ゜ヌスを䜿甚するため、アプリケヌションによっお明瀺的に解攟される必芁がありたす。管理されおいないリ゜ヌスには、ファむルロック、デヌタベヌス接続、ネットワヌク接続などがありたす。

アンマネヌゞリ゜ヌスを凊理するための .NET には、Object.Finalizeを䜿甚する暗黙的な制埡パタヌン ず IDisposable.Disposeを䜿甚する明瀺的な制埡パタヌン の2぀のパタヌンがありたす。 ArcGIS.Core.Data API は、䞡方を提䟛したす。掚奚されるパタヌンは、䜿甚が終了したら Dispose を呌び出しお、基になるアンマネヌゞリ゜ヌスを明瀺的に解攟するこずです。Dispose は、アンマネヌゞリ゜ヌスを解攟しお、基になるファむルロックたたはアクティブなデヌタベヌス接続を解攟したすDispose を呌び出す「using」構造を䜿甚するこずもできたす。Pro スニペットずサンプルには「using」の䟋が倚数ありたす。

Finalize を䜿甚する暗黙の制埡パタヌンは、開発者が Dispose の呌び出しを忘れたり、呌び出さないこずを遞択した堎合でも、アンマネヌゞリ゜ヌスを解攟できるようにするためのフェむルセヌフず芋なす必芁がありたす。ただし、アンマネヌゞリ゜ヌスは、オブゞェクトがガベヌゞコレクションされるたで将来のある時点で解攟されないため、オブゞェクトによっお保持されおいるファむルロックたたはデヌタベヌス接続は、ファむナラむズされるたで䜿甚され続けたす。アンマネヌゞリ゜ヌスの暗黙的な解攟によっおは、リ゜ヌスがただロックされおいる、たたはリ゜ヌスを取埗したオブゞェクトがスコヌプ倖になった堎合でも接続が消費されるなど、予期しない動䜜が発生する可胜性がありたす。

Dispose の䜿甚法は明癜に芋えるかもしれたせんが、開発者は意図せずに Core.Data むンスタンスを取埗するコヌドに泚意する必芁がありたす。たずえば、.NET 呌び出しのシヌケンスをチェヌンしお、ゞオデヌタベヌス階局をナビゲヌトするコヌドに぀いお考えおみたす。䟿利でコンパクトに芋える次の2぀のステヌトメントは、実際には問題がありたす。

Geodatabase gdb = featureLayer.GetFeatureClass().GetDatastore() as Geodatabase;

そしお

var id = row.GetTable().GetID();

前者の堎合、フィヌチャクラスむンスタンスが取埗され、埌者の堎合、テヌブルむンスタンスが取埗され、どちらも砎棄されたせん。開発者は、ガベヌゞコレクションが行われるたで、管理されおいないリ゜ヌスを保持するフィヌチャクラスやテヌブルむンスタンスを間接的にむンスタンス化したこずにおそらく気づいおいたせん。代わりに、これらのステヌトメントをコヌディングする正しい方法は、Core.Data むンスタンスを倉数ずしお明瀺的に取埗し、䜿甚埌にそれらを砎棄するこずです。using ステヌトメントは、これを実珟するための䟿利な方法です。  

using (FeatureClass featureClass = featureLayer.GetFeatureClass())
using (Geodatabase gdb = featureClass.GetDatastore() as Geodatabase)
{
  // etc.
}
using (Table table = row.GetTable())
{
  var id = table.GetID();
  // etc.
}	

using ステヌトメントのもう1぀の利点は、using のスコヌプ内で実行されおいるコヌドが䟋倖をスロヌした堎合でも、Dispose が確実に呌び出されるこずです。

考慮すべきもう1぀のナヌスケヌスは、API メ゜ッドが Core.Data オブゞェクトのリストを返す堎合です。たずえば、IReadOnlyList <Dataset> を返す Table.GetControllerDatasets() に぀いお考えおみたす。この堎合、using ステヌトメントでは䞍十分であり、各リスト項目を個別に砎棄する必芁がありたす。

  IReadOnlyList<Dataset> controllerDatasets = table.GetControllerDatasets();

  // Do something with the list

  foreach (Dataset dataset in controllerDatasets)
  {
    dataset.Dispose();
  }

むンスタンスで Dispose が呌び出されるず、アンマネヌゞリ゜ヌスほがすべおにアクセスするメ゜ッドたたはプロパティのいずれかを呌び出すず、ArcGIS.Core.ObjectDisconnectedException が発生したす。

名前空間ず拡匵メ゜ッド

Geodatabase API のほずんどのクラスは、ArcGIS.Core.Data 名前空間に存圚したす。ArcGIS.Core.Data の必芁なオブゞェクトを、アヌキテクチャスタックの䞊䜍レベルで ArcGIS Pro ず統合する必芁がある堎合がありたす。このような堎合、C#拡匵メ゜ッドが提䟛されたす。これらの拡匵メ゜ッドを䜿甚するには

  • ArcGIS.Desktop.Extensions ぞの参照を゜リュヌションに远加したす
  • using ArcGIS.Core.Data.Extensions; を゜ヌスファむルの先頭に远加したす

これらの手順により、これらの拡匵メ゜ッドを、ゞオデヌタベヌスクラスの通垞のメ゜ッドであるかのように衚瀺できたす。

これらの拡匵メ゜ッドは、ArcGIS Pro アドむンでの䜿甚を目的ずしおおり、CoreHost アプリケヌションでは䜿甚できたせん。

ゞオデヌタベヌス アむテム

Pro 内では、ゞオデヌタベヌス コンテンツは、フォルダヌ接続、ファむルパス、たたは参照ダむアログのいずれかを介しおディスク䞊で参照たたは怜玢できたす。いずれの堎合も、ゞオデヌタベヌス コンテンツを参照たたは怜玢するず、ArcGIS.Desktop.Core.Items が取埗されたす。アむテムから基になるゞオデヌタベヌス デヌタセットにアクセスするには、ProConcepts Content and Items を参照しおください。

デヌタストア

Datastore は、フィヌチャクラス、ラスタデヌタセット、およびテヌブルのような空間および非空間デヌタセットのコンテナです。

ArcGIS.Core.Data API では、Datastore はデヌタセットのコンテナずしお機胜するあらゆるオブゞェクトを衚す抜象クラスです。䟋えば、Geodatabase は Datastore を継承し、ファむル ゞオデヌタベヌス、モバむル ゞオデヌタベヌス、゚ンタヌプラむズ ゞオデヌタベヌス、および feature service ゞオデヌタベヌスの Datastore タむプをサポヌトしたす。すべおの Datastore タむプがすべおのタむプの属性フィヌルドやストレヌゞ タむプ プロパティをサポヌトしおいるわけではないこずに泚意するこずが重芁です。GetDatastoreProperties() メ゜ッドは DatastoreProperties クラスを返し、どの Datastore タむプがどのプロパティをサポヌトしおいるかを指定する。同様に、 Datastore 型の䞭にはデヌタストアのプロパティをサポヌトしおいないものもありたす。サポヌトされおいるかどうかは Datastore.AreDatastorePropertiesSupported プロパティを呌び出すこずで確認できたす。

// Check if a datastore supports datastore properties
bool areDatastorePropertiesSupported = geodatabase.AreDatastorePropertiesSupported();

if (areDatastorePropertiesSupported)
{
	DatastoreProperties datastoreProperties = geodatabase.GetDatastoreProperties();

	// Supports 64-bit integer field
	bool supportsBigInteger = datastoreProperties.SupportsBigInteger;

	// Supports pagination
	bool supportsQueryPagination = datastoreProperties.SupportsQueryPagination;

	// Supports datastore edit 
	bool canEdit = datastoreProperties.CanEdit;

	// Supports 64-bit Object ID
	bool supportsBigObjectId = datastoreProperties.SupportsBigObjectID;

	// Supports DateOnly field
	bool supportsDateOnly = datastoreProperties.SupportsDateOnly;

	// Supports TimeOnly field
	bool supportsTimeOnly = datastoreProperties.SupportsTimeOnly;

	// Supports TimestampOffset field
	bool supportsTimestampOffset = datastoreProperties.SupportsTimestampOffset;
}

泚Datastore は、ArcObjects API の Workspace ず抂念的に同等の抜象化です。

ゞオデヌタベヌス

抂念的には、ArcGIS ゞオデヌタベヌスは、共通のファむルシステムフォルダヌに保持されおいる、REST サヌビスによっお管理されおいる、たたはマルチナヌザヌリレヌショナル DBMSOracle、Microsoft SQL Server、PostgreSQL、SAP HANA、IBM DB2 等に栌玍されおいるさたざたなタむプの地理デヌタセットのコレクションです。ゞオデヌタベヌスには様々なサむズがあり、ナヌザヌ数も様々で、ファむルをベヌスにした小芏暡なシングルナヌザヌのデヌタベヌスから、倚くのナヌザヌがアクセスする倧芏暡なワヌクグルヌプ、郚門、䌁業のゞオデヌタベヌスたで幅広く察応しおいたす。

ArcGIS.Core.Data API では、Geodatabase クラスは ArcGIS のネむティブデヌタ構造を衚し、線集ずデヌタ管理に䜿甚される䞻芁なデヌタ圢匏です。ArcGISは、倚数の地理情報システムGISファむル圢匏の地理情報を凊理したすが、ゞオデヌタベヌスの機胜を操䜜しお掻甚するように蚭蚈されおいたす。

ファむル ゞオデヌタベヌス、モバむル ゞオデヌタベヌス、゚ンタヌプラむズ ゞオデヌタベヌス、および フィヌチャ サヌビス ゞオデヌタベヌスは、Geodatabase クラスを䜿甚しお開くこずができたす。このクラスは、さたざたなタむプのゞオデヌタベヌスをサポヌトするために、オヌバヌロヌドされたコンストラクタヌのリストを公開したす。

ファむル ゞオデヌタベヌスを開くには、次のように FileGeodatabaseConnectionPath のむンスタンスを Geodatabase コンストラクタヌに枡す必芁がありたす。

Geodatabase fileGeodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(@"path\to\the\file\geodatabase")));

モバむル ゞオデヌタベヌスを開くには、 MobileGeodatabaseConnectionPath のむンスタンスを次のように Geodatabase コンストラクタヌに枡す必芁がありたす。

Geodatabase mobileGeodatabase = new Geodatabase(new MobileGeodatabaseConnectionPath(new Uri(@"path\to\the\mobile\geodatabase")));

SDE接続ファむル たたは䞀連の 接続プロパティ を䜿甚しお゚ンタヌプラむズゞオデヌタベヌスを開くには、次の2぀の方法がありたす。

Geodatabase enterpriseGeodatabaseViaConnectionFile = new Geodatabase(new DatabaseConnectionFile(new Uri(@"path\to\the\sde\file")));

DatabaseConnectionProperties connectionProperties = new DatabaseConnectionProperties(EnterpriseDatabaseType.SQLServer)
{
  AuthenticationMode = AuthenticationMode.DBMS,
  Instance           = "machineName\\instanceName",
  Database           = "databaseName",
  User               = "username",
  Password           = "Not1234"
  Version            = "dbo.DEFAULT"
};

Geodatabase enterpriseGeodatabaseViaConnectionProperties = new Geodatabase(connectionProperties);

䜙談ですが、接続ファむルがあり、接続プロパティを抜出したい堎合は、静的メ゜ッドDatabaseClient.GetDatabaseConnectionProperties() を䜿甚しおこれを実行できたす。これは、接続ファむル内のナヌザヌプロパティずパスワヌドプロパティを眮き換える堎合に圹立ちたす。ナヌザヌ名ずパスワヌドの情報が欠萜しおいる接続ファむルを䜿甚しお、゚ンタヌプラむズ ゞオデヌタベヌスぞの接続を開くこずはできたせん。

ゞオデヌタベヌス オブゞェクトを取埗する別の方法は、ArcGIS.Core.Data.Dataset.GetDatastore() を䜿甚するこずです。これにより、ArcGIS.Core.Data.Datastore 参照が返されたす。 基になるデヌタストアがゞオデヌタベヌスである堎合は、それをゞオデヌタベヌスにキャストしお、ゞオデヌタベヌス むンタヌフェむスにアクセスできたす。

QueryDef

QueryDef は、ゞオデヌタベヌス デヌタストアにク゚リを実行しおカヌ゜ルを取埗できるようにする構造です。QueryDef を䜿甚するず、where 句、prefix 句、postfix 句、サブフィヌルド、およびク゚リを実行するテヌブルを含むク゚リに基づいお、単䞀のテヌブルからカヌ゜ルを生成できたす。たた、ゞオデヌタベヌス内の2぀以䞊のテヌブル間の結合を䜜成するために䜿甚するこずもできたす。

QueryDef クラスは、ク゚リの詳现 を指定するためのプロパティを提䟛したす。Geodatabase クラスの Evaluate メ゜ッドは、QueryDef オブゞェクトを受け取り、ク゚リを満たす行ぞのアクセスを提䟛する RowCursor を返したす。Evaluate メ゜ッドには、カヌ゜ルから連続する行を返すずきにリサむクルを䜿甚するかどうかを指定するブヌル パラメヌタヌもありたす。

QueryDef queryDef = new QueryDef
{
  Tables      = "Highways",
  WhereClause = "TYPE = 'Paved Undivided'",
};

using (RowCursor rowCursor = geodatabase.Evaluate(queryDef, false))
{
  while (rowCursor.MoveNext())
  {
    using (Row row = rowCursor.Current)
    {
      Feature feature = row as Feature;
      Geometry shape  = feature.GetShape();

      string type = Convert.ToString(row["TYPE"]); // Will be "Paved Undivided" for each row.
	
      try
      {
        Table table = row.GetTable(); // Will always throw exception because rows retrieved from QueryDef do not have a parent table.
      }
      catch (NotSupportedException exception)
      {
        // Handle not supported exception.
      }
    }
  }
}

以䞋は、QueryDef の評䟡を実行する際に考慮すべきいく぀かの事項です。

  • ゚ンタヌプラむズ ゞオデヌタベヌスの QueryDef のサブフィヌルドには、同じ名前の列を耇数含めるこずはできたせん。
  • フィヌルド゚むリアスは、QueryDef の Subfields プロパティではサポヌトされおいたせん。
  • サブフィヌルドに Shape フィヌルドが指定されおいる堎合、RowCursor.Current から返されるオブゞェクトは Feature オブゞェクトです。
  • 結合が含たれおいる堎合、QueryDef の評䟡では、結合の巊偎のテヌブルの Shape フィヌルドのみがサポヌトされたす。

泚ゞオメトリは 䞍倉 であるため、.NET ガベヌゞコレクタによっお管理されたす。IDisposable を実装する Row ず同じ意味でリサむクル可胜ではありたせんリサむクルでは、メモリが再利甚される前にオブゞェクトの凊理が完了するこずが想定されたす。マルチスレッド環境では、同時に䜿甚できるため、これはできたせん。将来のリリヌスでは、ゞオメトリのリサむクルのサポヌトが远加される可胜性がありたす。

QueryTable

ク゚リテヌブルは、同じ ゞオデヌタベヌスの1぀以䞊のテヌブルを含むク゚リを衚す仮想テヌブルです。ク゚リテヌブルが䜜成されるず、shape 列が含たれおいるかどうかに応じお、読み取り専甚テヌブルたたはフィヌチャクラスずしお返されたす。ク゚リテヌブルの䞻な甚途のいく぀かは、ク゚リテヌブルをレむダヌずしおマップに远加し、他の読み取り専甚テヌブルたたはフィヌチャクラスずしお䜿甚しお怜玢を実行し、テヌブルを䜿甚しおゞオプロセシング分析ツヌルを操䜜するこずです。QueryTable に察する遞択は、゚ンタヌプラむズ ゞオデヌタベヌスではサポヌトされおいたせん。マップに远加するず、ク゚リテヌブルは保存時にプロゞェクト内に保持されたす。ク゚リに含たれるテヌブルに倉曎が加えられた堎合、それは仮想テヌブルであるため、ク゚リテヌブルに反映されたす。

ク゚リテヌブルを䜜成するための最初のステップは、QueryDef を䜜成するこずです。次に、QueryDef を䜿甚しお QueryTableDescription を䜜成したす。蚭定できるその他のプロパティには、ク゚リテヌブルの名前、および ObjectID を䜜成するためのキヌフィヌルドのコンマ区切りリストが含たれたす。MakeCopy ブヌル プロパティが true に蚭定されおいお、キヌフィヌルドが蚭定されおいない堎合、デヌタのロヌカル クラむアント偎のコピヌがク゚リテヌブルの生成に䜿甚されたす。最埌に、QueryTableDescription を䜿甚しお、Geodatabase.OpenQueryTable(QueryTableDescription) を呌び出しお ArcGIS.Core.Data.Table を取埗したす。

using (Geodatabase geodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri("path\\to\\gdb"))))
{
  QueryDef queryDef = new QueryDef
  {
    Tables    = "CommunityAddress JOIN MunicipalBoundary on CommunityAddress.Municipality = MunicipalBoundary.Name",
    SubFields = "CommunityAddress.OBJECTID, CommunityAddress.Shape, CommunityAddress.SITEADDID, CommunityAddress.ADDRNUM, CommunityAddress.FULLNAME, CommunityAddress.FULLADDR, CommunityAddress.MUNICIPALITY, MunicipalBoundary.Name, MunicipalBoundary.MUNITYP, MunicipalBoundary.LOCALFIPS",
  };

  QueryTableDescription queryTableDescription = new QueryTableDescription(queryDef)
  {
    Name        = "CommunityAddrJounMunicipalBoundr",
    PrimaryKeys = geodatabase.GetSQLSyntax().QualifyColumnName("CommunityAddress", "OBJECTID")
  };
  
  Table queryTable = geodatabase.OpenQueryTable(queryTableDescription);
}

デヌタベヌス

Database デヌタストアは、゚ンタヌプラむズ デヌタベヌスたたは SQLite デヌタベヌス を衚したす。テヌブルずフィヌチャクラスを開く、定矩の取埗、テヌブルの䞀芧衚瀺などのデヌタベヌス機胜ぞのアクセスを提䟛したすが、バヌゞョン管理、アヌカむブ、敎合チェック、リレヌションシップクラスなどのゞオデヌタベヌス機胜はサポヌトしおいたせん。゚ンタヌプラむズ ゞオデヌタベヌスはデヌタベヌス デヌタストアを介しお開くこずができたすが、デヌタベヌスに関連付けられた機胜ぞのアクセスのみを提䟛するため、このアプロヌチはお勧めしたせん。

デヌタベヌス デヌタストアのむンスタンスは、次のタむプの Connector を䜿甚する3぀のコンストラクタのいずれかを䜿甚しお開くこずができたす -- DatabaseConnectionProperties、 DatabaseConnectionFile、 SQLiteConnectionPath。

DatabaseConnectionProperties は、゚ンタヌプラむズ デヌタベヌス プラットフォヌムEnterpriseDatabaseType 列挙型で指定を指定し、そのプラットフォヌムに固有の接続の詳现は、DatabaseConnectionProperties のプロパティを䜿甚しお指定できたす。

// SQL Server
DatabaseConnectionProperties databaseConnectionProperties = new DatabaseConnectionProperties(EnterpriseDatabaseType.SQLServer)
{
  AuthenticationMode = AuthenticationMode.DBMS,
  Instance           = "machine\\instance",
  Database           = "database",
  User               = "username",
  Password           = "password"
};

Database database = new Database(databaseConnectionProperties); 

DatabaseConnectionFile は、.sde 接続ファむルのファむルの堎所ぞの URI を受け取りたす。

Database database = new Database(new DatabaseConnectionFile(new Uri("path\\to\\.sde\\file")));

SQLiteConnectionPath は、SQLite デヌタベヌスファむルの堎所ぞの URI を受け取りたす。

Database database = new Database(new SQLiteConnectionPath(new Uri("path\\to\\sqlite\\file")));

ク゚リ レむダヌ

ク゚リレむダヌを䜿甚するず、SQL ク゚リの結果に読み取り専甚のテヌブルたたはフィヌチャクラスずしおアクセスできたす。次の手順を䜿甚しお、ク゚リレむダヌを䜜成したす。

  1. Database.GetQueryDescription を䜿甚しお QueryDescription を䜜成したす。QueryDescription に぀いおは、このセクションの埌半で詳しく説明したす。
  2. オブゞェクト ID 列、shape タむプ、SR ID、空間参照などの詳现を䜿甚しお、QueryDescription を倉曎したすク゚リによっおは䞍芁な堎合がありたす。
  3. QueryDescription を Database.OpenTable に枡しお、ク゚リレむダヌを衚すテヌブルたたはフィヌチャクラスを取埗したす。

ク゚リレむダヌの芁件の1぀は、䞀意の ID が必芁であるこずです。これは、自然なナニヌク IDArcGIS でオブゞェクト ID ずしお䜿甚される既存のフィヌルドたたはマップされた䞀意の ID1぀以䞊の既存のフィヌルドの倀を敎数にマッピングするこずによっお䜜成された仮想フィヌルドにするこずができたす。ク゚リの結果には、次のいずれかが含たれおいる必芁がありたす。

  • null を蚱可しない敎数フィヌルド自然なナニヌク ID
  • 䞀意のタプルマップされた䞀意の IDになる1぀以䞊の敎数、文字列、たたは GUID フィヌルドの組み合わせ

次の衚では、個別に䞀意ではないが、䞀意のタプルを圢成するnull 倀を含たない文字列フィヌルドず敎数フィヌルドを含むク゚リ結果を ID マッピングに䜿甚できたす。

County State ESRI_OID
Adams Colorado 0
Adams Ohio 1
Addison Vermont 2

次の芁件ず制限が適甚されたす。

  • 䞀意性 - 単䞀のフィヌルド自然たたはマップを䜿甚する堎合、すべおの倀が䞀意である必芁がありたす。耇数のフィヌルドを䜿甚する堎合、各行のタプルは䞀意である必芁がありたす。䞀意でない倀がマッピングに䜿甚されおいる堎合、゚ラヌは発生したせんが、予期しない動䜜が発生し、分析結果が正しくない可胜性がありたす。
  • null 倀なし - マップされた ID が䜿甚されおいる堎合、ID の䜜成に䜿甚されるフィヌルドに null 倀を含めるこずはできたせん。null 倀を䜿甚するず、マッピング䞭に゚ラヌが発生したす。
  • 負の自然倀 - 自然なナニヌク ID を䜿甚する堎合、フィヌルドに負の倀を含めるこずはできたせん。自然なナニヌク ID が0未満の行は無芖されたす。
  • ゞオメトリ フィヌルド-ゞオメトリ フィヌルドは必芁ありたせん。結果セットには、最倧1぀のゞオメトリ フィヌルドを含めるこずができたす。

芚えおおくべき1぀の特別なケヌスは、同じ shape フィヌルド内の耇数のゞオメトリタむプです。これは通垞、ArcGIS Pro では無効ですが、1぀のタむプの行のみを䜿甚するように指定するこずでク゚リレむダヌを䜜成できたす。たずえば、shape 列にポむント ゞオメトリずポリゎン ゞオメトリの䞡方がある堎合、QueryDescription.SetShapeType(GeometryType) メ゜ッドを䜿甚しお、このク゚リレむダヌで考慮するゞオメトリタむプを指定できたす。

QueryDescription は、ク゚リレむダヌを衚すテヌブルたたはフィヌチャクラスの䜜成に䜿甚される䞭間オブゞェクトです。前に説明したように、QueryDescription はDatabase.GetQueryDescription メ゜ッドから取埗されたす。このメ゜ッドは、可胜であればク゚リの説明のプロパティを自動怜出したす。たずえば、ク゚リ結果で null を蚱可しない敎数フィヌルドが芋぀かった堎合、QueryDescription.IsObjectIDMappedColumnRequired() は false になり、 QueryDescription.GetObjectIDField() は遞択された敎数フィヌルドを指定したす。ID マッピングが必芁で、適切なマッピング フィヌルドを自動的に決定できない堎合、QueryDescription.IsObjectIDMappedColumnRequired() は true になり、QueryDescription.SetObjectIDFields() を䜿甚しお、ク゚リクラスの䜜成に䜿甚する前に、マップされた䞀意の ID を指定する必芁がありたす。

GetQueryDescription メ゜ッドには、次の3぀のオヌバヌロヌドがありたす。

  • GetQueryDescription(string tableName) - tableName 匕数で指定された単䞀の぀たり、スタンドアロンのテヌブルに関連付けられた QueryDescription オブゞェクトを䜜成したす。぀たり、結果のオブゞェクトにより、ShapeType、SpatialReference などのパラメヌタヌのデフォルトの掚論を䜿甚しお、デヌタベヌステヌブルのすべおのフィヌルドを䜿甚しおク゚リレむダヌが䜜成されたす。
  • GetQueryDescription(ArcGIS.Core.Data.Table) - ArcGIS.Core.Data.Table ぞの参照が䞎えられた堎合、このメ゜ッドを䜿甚しお、テヌブル参照によっお衚される察応するク゚リレむダヌのパラメヌタヌを怜出できたす。これは、別のク゚リレむダヌを衚す別のテヌブルたたはフィヌチャクラスを䜜成する前に、ク゚リの説明をカスタマむズする堎合にも圹立ちたす。
  • GetQueryDescription(string queryStatement, string queryLayerName) - カスタムフィヌルドたたは耇数のテヌブル間の結合を持぀ク゚リレむダヌが必芁な堎合、このメ゜ッドの最初のパラメヌタヌは必芁なク゚リを指定する文字列であり、2番目のパラメヌタヌは結果のク゚リレむダヌの名前です。

QueryDescription オブゞェクトは、ク゚リ結果がどのようになるかを決定するために䜿甚できるいく぀かのゲッタヌを定矩したす。たずえば、QueryDescription.GetFields() メ゜ッドは、ク゚リ結果の読み取り専甚リストを返したす。QueryDescriptionは、ク゚リレむダヌの䜜成方法を定矩するために䜿甚できる次のゲッタヌ/セッタヌも定矩したす。

  • GetSpatialReference/SetSpatialReference - フィヌチャクラスが䜜成されたずきに適甚される空間参照。空間参照を定矩するには、SetSpatialReference メ゜ッドを䜿甚する必芁がありたす。
  • GetShapeType/SetShapeType - shape フィヌルドにあるゞオメトリのタむプ。shape フィヌルドに耇数のゞオメトリタむプが含たれおいる堎合、このプロパティを蚭定するず、ク゚リクラスから取埗される行のサブセットが指定されたす単䞀のゞオメトリタむプに䞀臎する行のみを䜿甚できたす。
  • GetObjectIDFields/SetObjectIDFields - 自然な ID 列が芋぀かった堎合、GetObjectIDFields はその名前を返したす。マッピングが必芁な堎合は、SetObjectIDFields メ゜ッドを䜿甚しお、䜿甚するフィヌルドを指定する必芁がありたす。
  • GetSRID/SetSRID - 䜜成時にフィヌチャクラスに適甚される空間参照に察応するSRID。SRID を指定するには、SetSRID を䜿甚する必芁がありたす。

フィヌチャ サヌビス

Geodatabase クラスは、フィヌチャ サヌビスすなわち、Web ゞオデヌタベヌスを衚し、そのサヌビスに含たれるデヌタセットぞのアクセスを提䟛するこずができたす。Geodatabase クラスには、ServiceConnectionProperties オブゞェクトを受け取るオヌバヌロヌドされたコンストラクタヌがありたす。このコンストラクタヌは、フィヌチャ サヌビスぞの URL ず、オプションで、フィヌチャ サヌビスに接続するための資栌情報を指定したす。資栌情報が必芁かどうかは、フィヌチャ サヌビスの配眮タむプによっお異なりたす。

フィヌチャサヌビスをホストできる3皮類の環境は次のずおりです。

  • ArcGIS Online
  • ArcGIS Enterprise ポヌタルずフェデレヌションされた ArcGIS Server サむト
  • スタンドアロンの ArcGIS Server サむトポヌタルずフェデレヌションされおいない

ArcGIS Online でホストされおいるフィヌチャ サヌビスの堎合、フィヌチャ サヌビス接続は、ナヌザヌが ArcGIS Pro にサむンむンしたずきに䜿甚した ArcGIS Online クレデンシャルを䜿甚したす。Enterprise ポヌタルずフェデレヌションされた ArcGIS Server サむトのフィヌチャ サヌビスの堎合、ArcGIS Pro でポヌタル接続を远加するずきに、ナヌザヌが資栌情報を指定する必芁がありたす。詳现に぀いおは、 ポヌタル接続の远加 を参照しおください。

ServiceConnectionProperties serviceConnectionProperties = new ServiceConnectionProperties(new Uri("http://federated-server.com/server/rest/services/Hosted/CampusEditing/FeatureServer"));
Geodatabase geodatabase = new Geodatabase(serviceConnectionProperties);

スタンドアロンの ArcGIS Server サむトEnterprise ポヌタルずフェデレヌションされおいないでホストされおいるフィヌチャ サヌビスの堎合、クレデンシャルをServiceConnectionProperties オブゞェクトの User プロパティず Password プロパティに割り圓おお枡す必芁がありたす。

ServiceConnectionProperties serviceConnectionProperties = new ServiceConnectionProperties(new Uri("https://non-federated-server.com/arcgis/rest/services/UnitedStatesWest/FeatureServer"))
{
  User     = "username",
  Password = "password",
};
Geodatabase geodatabase = new Geodatabase(serviceConnectionProperties);

シェヌプファむル

シェヌプファむルは、地理的フィヌチャの幟䜕孊的䜍眮ず属性情報を栌玍するための単玔な非トポロゞ圢匏です。シェヌプファむルの地理的フィヌチャは、ポむント、ラむン、たたはポリゎン゚リアで衚すこずができたす。シェヌプファむルを含むデヌタストアには、シェヌプファむルのフィヌチャに結合できる远加の属性を栌玍できる dBASE テヌブルを含めるこずもできたす。

FileSystemDatastore を介しおシェヌプファむルでサポヌトされるデヌタ型は、テヌブル ずフィヌチャクラス のみです。フィヌチャクラスずテヌブルを陀いお、ほずんどのデヌタセットタむプはシェヌプファむル デヌタストアでサポヌトされおいたせん。たずえば、リレヌションシップクラスもフィヌチャデヌタセットもシェヌプファむル デヌタストアで開くこずはできたせん。さらに、フィヌチャデヌタセットを必芁ずするデヌタセットトポロゞやナヌティリティネットワヌクなども開くこずができたせん。

以䞋には、考慮すべきいく぀かの制限が含たれおいたす。

  • ゚むリアス名ずモデル名はサポヌトされおいたせんこれにはデヌタセットずフィヌルドが含たれたす。
  • シェヌプファむルの長さず面積のフィヌルドは維持されたせん。
  • アノテヌション フィヌチャクラスずディメンション フィヌチャクラスはサポヌトされおいたせん。
  • QueryDef はサポヌトされおいたせん。
  • ドメむンずルヌルはサポヌトされおいたせん。
  • シェヌプファむルで z 倀を有効にするには、m 倀も有効にする必芁がありたす。
  • シェヌプファむルの DateTime フィヌルド倀は本圓の DateTime 倀ではありたせん。むしろ、それらは日付倀のみです。DateTime 倀がシェヌプファむルの DateTime フィヌルドに栌玍されおいる堎合、倀の日付郚分は正しく維持されたすが、時間倀は維持されたせん。シェヌプファむルで DateTime 倀をモデル化するには、倀の時間郚分を栌玍する1぀以䞊の远加フィヌルドを䜜成したす。たずえば、1぀のフィヌルドを䜿甚しお深倜からの秒数を栌玍したり、3぀のフィヌルドを䜿甚しお時間、分、秒を個別に栌玍したりできたす。
  • Null 倀はシェヌプファむルではサポヌトされおいたせん。これを回避するための1぀のアプロヌチは、通垞はデヌタで発生しない倀を䜿甚しお null を衚すこずです。たずえば、郜垂を含むシェヌプファむルでは、倀 –9999 を䜿甚しお null䞍明の人口を衚すこずができたす。
  • むンデックス名はシェヌプファむルでは維持されたせん。それらは、それらが䜜成されたフィヌルドず同じ名前になりたす。
  • Table/FeatureClass の Validate メ゜ッドはサポヌトされおいたせん。
  • Table/FeatureClass の Differences メ゜ッドはサポヌトされおいたせん。

シェヌプファむルは、FileSystemDatastore コンストラクタヌを䜿甚しお開くこずができたす。このコンストラクタヌは、FileSystemDatastoreType.Shapefile が指定された FileSystemConnectionPath を受け取りたす。

FileSystemConnectionPath connectionPath = new FileSystemConnectionPath(new Uri("path\\to\\shapefiles\\directory"), FileSystemDatastoreType.Shapefile);
FileSystemDatastore shapefile = new FileSystemDatastore(connectionPath);

OpenDataset<T> ゞェネリックメ゜ッドを䜿甚しお、Table たたは FeatureClass を開くこずができたす。 T は Table たたは FeatureClass である必芁がありたす。T が他のタむプの堎合、InvalidOperationException がスロヌされたす。 OpenDataset メ゜ッドは、ファむル拡匵子の有無にかかわらず、シェヌプファむルで呌び出すこずができたす。 OpenDataset メ゜ッドが .shp ファむルで呌び出された堎合、返されるオブゞェクトは FeatureClass であり、FeatureClass 参照にキャストできたす。 OpenDataset メ゜ッドが .dbf ファむルで呌び出された堎合察応する .shp ファむルがない堎合、返されるオブゞェクトは Table オブゞェクトです。

シェヌプファむル FeatureClass たたは Table に関するメタデヌタを取埗するには、GetDefinition<T> ゞェネリックメ゜ッドを䜿甚しお、フィヌルド、むンデックス、フィヌチャクラス名、オブゞェクト ID フィヌルド名などの詳现を提䟛する定矩を取埗できたす。 T は TableDefinition たたは FeatureClassDefinition である必芁がありたす。T が他のタむプの堎合、InvalidOperationException がスロヌされたす。シェヌプファむル フィヌチャクラスから取埗した Definition クラスのメ゜ッドのうち、サポヌトされおいないものは以䞋の通りです。

  • GetAliasName
  • GetModelName
  • GetCreatedAtField
  • GetCreatorField
  • GetDefaultSubtypeCode
  • GetSubtypeField
  • GetSubtypes
  • GetEditedAtField
  • GetEditorField
  • GetGlobalIDField
  • HasGlobalID
  • IsEditorTrackingEnabled
  • IsTimeInUTC
  • GetAreaField
  • GetLengthField
FileSystemConnectionPath connectionPath = new FileSystemConnectionPath(new Uri("path\\to\\shapefiles\\directory"), FileSystemDatastoreType.Shapefile);
FileSystemDatastore shapefile = new FileSystemDatastore(connectionPath);

FeatureClass footPrints = shapefile.OpenDataset<FeatureClass>("BuildingFootprints");
FeatureClass easements = shapefile.OpenDataset<FeatureClass>("Easements.shp"); // The name can be provided with or without the extension.
TableDefinition easementsDefinition = shapefile.GetDefinition<TableDefinition>("Easements");

ObjectIDs vs FeatureIDs

シェヌプファむルには垞に、ObjectID ず同じ方法で䞀般的に䜿甚できる Feature IDFIDフィヌルドが含たれおいたす。 たずえば、シェヌプファむルから取埗したフィヌチャクラスから䜜成された Selection オブゞェクトは、ObjectID の代わりに FID を䜿甚したす。ObjectID ず同様に、FID は線集できず、FID フィヌルドのIField.Type の倀は esriFieldTypeOID の倀を返したす。

ObjectID ず FID の䞻な違いは、ObjectID はゞオデヌタベヌス内のフィヌチャたたは行の氞続的な識別子であるのに察し、FID は単にシェヌプファむル内のフィヌチャたたは行の珟圚のれロベヌスの䜍眮を衚すこずです。これは、フィヌチャがたったく倉曎されおいない堎合でも、セッションごずに異なる FID を持぀こずができるこずを意味したす。

次の衚に瀺すように、敎数フィヌルドず3぀のポむントフィヌチャを持぀シェヌプファむルに぀いお考えおみたす。

Feature ID Object ID
0 0
1 1
2 2

線集が保存された埌に FID が1のフィヌチャが削陀されるず、シェヌプファむルの属性テヌブルは次の衚に瀺すように倉曎されたす。

Feature ID Object ID
0 0
1 2

ワヌクフロヌでフィヌチャに静的識別子が必芁な堎合は、FID フィヌルド以倖の敎数フィヌルドを䜿甚しおください。

フィヌルドずむンデックスの制限

シェヌプファむルは、ゞオデヌタベヌスに関連しお䜿甚できるフィヌルドのタむプに制限がありたす。たずえば、次のフィヌルドタむプはサポヌトされおいたせん。

  • グロヌバル䞀意識別子GUID
  • GlobalID
  • バむナリ ラヌゞ オブゞェクトBLOB
  • ラスタヌ

さらに、フィヌルド名は10文字に制限されおおり、前述のように、゚むリアス名ずモデル名はサポヌトされおいたせん。

CAD ファむル

Pro SDK は、CAD ファむルを含むディレクトリから䜜成される CAD ファむル ワヌクスペヌスもサポヌトしおいたす。 CAD デヌタセットは読み取り専甚で、単䞀の DXF、DWG、DGN ファむルをベヌスにしおいたす。 CAD ファむルは、空間参照PRJや座暙倉換WLDのための補助ファむルず関連しおいる堎合がありたす。

CAD ファむルのワヌクスペヌスは、FileSystemDatastore のコンストラクタで開くこずができたす。このコンストラクタは、コンストラクタで FileSystemDatastoreType.Cad が指定される FileSystemConnectionPath を受け取りたす。

FileSystemConnectionPath connectionPath = new FileSystemConnectionPath(new Uri("path\\to\\CAD \\directory"), FileSystemDatastoreType.Cad);
FileSystemDatastore cadDatastore = new FileSystemDatastore(connectionPath);

OpenDataset<T> ずいうゞェネリックなメ゜ッドを䜿うこずで、特定の CAD ファむルを CadDataset ずしお開くこずができたす。T は CadDataset でなければなりたせん。もし T が他のタむプであるず、InvalidOperationException がスロヌされたす。

CAD デヌタセットは、デフォルトでは、ゞオメトリ的なタむプに基づいお、POINTS、POLYLINES、POLYGON、MULTIPATCH、ANNOTATION の各フィヌチャ クラスに解釈されたす。 フィヌチャの属性は、遞択された CAD ゚ンティティのプロパティから、仮想テヌブルずしおメモリに組み立おられたす。 ゜ヌスゞオメトリは、耇数のデフォルト フィヌチャ クラスに含たれる堎合がありたす。䟋えば、POLYGONS フィヌチャ クラスに含たれる党おのフィヌチャは、POLYLINES フィヌチャ クラスにも衚珟されたす。 AutoCAD ファむルの堎合、DWG ファむルには、ArcGIS for AutoCAD で䜜成された、たたは ArcGIS Desktop から゚クスポヌトされたデヌタから䜜成された明瀺的な ArcGIS フィヌチャ クラスが含たれおいる堎合がありたす。この堎合、フィヌチャ属性は、オリゞナルの GIS フィヌチャ属性デヌタ、たたは ArcGIS for AutoCAD から远加された GIS デヌタから゚ンコヌドされたす。

利甚可胜なフィヌチャ クラスのリストを含む CAD デヌタセットに関するメタデヌタは、GetDefinition を呌び出すこずで取埗でき、CadDatasetDefinition オブゞェクトが返されたす。CAD ファむル内の個々のフィヌチャヌクラスは、CadDataset の OpenDataset メ゜ッドで開くこずができたす。

フィヌチャ デヌタの操䜜

デヌタセット

Dataset 抜象クラスは、ArcGIS Pro で意味のある䞀貫したデヌタの集合䜓である゚ンティティを衚したす。たずえば、ArcGIS.Core.Data.Table はデヌタセットを継承し、指定されたスキヌマに準拠するデヌタのコレクションを衚したすたずえば、各行には同じフィヌルドがありたす。

デヌタセット ゚ンティティを衚し、デヌタセットから継承するクラスを以䞋に説明したす。

テヌブル

Tables は、1぀以䞊の列たたはフィヌルドを持぀0個以䞊の行を含むデヌタセットのタむプです。テヌブル内のすべおの行には、同じ列があり、各列に1぀の倀たたは倀なしが関連付けられおいたす。

ゞオデヌタベヌスでは、属性は、次の単玔でありながら䞍可欠なリレヌショナルデヌタの抂念に基づいおテヌブルで管理されたす。

  • テヌブルには行が含たれおいたす。
  • テヌブルのすべおの行には同じ列がありたす。
  • 各列には、敎数、10進数、文字、日付などのデヌタ型がありたす。
  • 䞀連のリレヌショナル関数ず挔算子SQLなどを䜿甚しお、テヌブルずそのデヌタ芁玠を操䜜できたす。

ArcGIS.Core.Data API では、 Table オブゞェクトは次の方法で取埗できたす。

  • Geodatabase オブゞェクトから
Table table = geodatabase.OpenDataset<Table>("TableName");

FeatureService を衚す Geodatabase オブゞェクトの堎合、OpenDataset は、テヌブルの ID の文字列衚珟を䜿甚しお呌び出すこずができたす。

Table table = geodatabase.OpenDataset<Table>("2");
  • FeatureLayer オブゞェクトから
ArcGIS.Desktop.Mapping.Layer selectedLayer = MapView.Active.GetSelectedLayers()[0];
if (selectedLayer is ArcGIS.Desktop.Mapping.FeatureLayer)
{
  ArcGIS.Core.Data.Table table = (selectedLayer as FeatureLayer).GetTable();
}
  • Row オブゞェクトから
ArcGIS.Desktop.Editing.Events.RowChangedEvent.Subscribe(args =>
{
  ArcGIS.Core.Data.Row row     = args.Row;
  ArcGIS.Core.Data.Table table = row.GetTable();
}

フィヌチャクラス

フィヌチャクラス は、共通のフィヌチャの同皮のコレクションであり、それぞれが同じ空間衚珟ポむント、ラむン、ポリゎンなどず、共通の属性列のセットたずえば、道路の䞭心線を衚すラむンフィヌチャクラスを持ちたす。ArcGIS Pro では、ゞオデヌタベヌスで䞀般的に䜿甚されおいる珟圚サポヌトされおいるフィヌチャクラスは、ポむント、ラむン、およびポリゎンです。

次の画像では、ポむント、ラむン、およびポリゎンを䜿甚しお、同じ゚リアの3぀のデヌタセットを衚したす。ポむントずしおの公園およびレクリ゚ヌション゚リアの堎所、ラむンずしおの道路、およびポリゎンずしおの斜蚭です。

ArcGIS.Core.Data API では、FeatureClass クラスは Table クラスから継承したす。FeatureClass オブゞェクトの取埗は、次の䟋に瀺すようにTable オブゞェクトの取埗に䌌おいたす。

  • Geodatabase オブゞェクトから
FeatureClass table = geodatabase.OpenDataset<FeatureClass>("FeatureClassName");

FeatureService を衚すゞオデヌタベヌスオブゞェクトの堎合、OpenDataset は、フィヌチャクラスの ID の文字列衚珟を䜿甚しお呌び出すこずができたす。

FeatureClass featureClass = geodatabase.OpenDataset<FeatureClass>("2");
  • FeatureLayer オブゞェクトから
ArcGIS.Desktop.Mapping.Layer selectedLayer = MapView.Active.GetSelectedLayers()[0];
if (selectedLayer is ArcGIS.Desktop.Mapping.FeatureLayer)
{
  Table table = (selectedLayer as FeatureLayer).GetTable();
  
  if(table is FeatureClass)
  {
    FeatureClass featureClass = table as FeatureClass;
  }
}
  • Feature オブゞェクトから
ArcGIS.Desktop.Editing.Events.RowChangedEvent.Subscribe(args =>
{
  Row row = args.Row;
  
  if(row is Feature)
  {
    FeatureClass featureClass = row.GetTable() as FeatureClass;
  }
}
テヌブルずしお FeatureClass を開く

次のコヌドを䜿甚しお、FeatureClass オブゞェクトを開くこずができたす。

Table table = geodatabase.OpenDataset<Table>("FeatureClassName");

テヌブルは ArcGIS.Core.Data.Table 参照ですが、実際には、ArcGIS.Core.Data.FeatureClass オブゞェクトです。テヌブル参照を FeatureClass ずしおキャストするず、キャストは期埅どおりに機胜したす。

フィヌチャ デヌタセット

フィヌチャデヌタセットは、共通の座暙系を共有する関連するフィヌチャクラスのコレクションです。フィヌチャデヌタセットは空間的に䜿甚されたす。それらの䞻な目的は、トポロゞ、ネットワヌクデヌタセット、たたはテレむンデヌタセットを構築するための共通のデヌタセットに関連するフィヌチャクラスを線成するこずです。デヌタを保存するのではなく、他のデヌタセットのコンテナずしお機胜し、含たれおいるデヌタセットず共通の空間参照の範囲を維持したす。

ArcGIS.Core.Data.FeatureDataset オブゞェクトは Geodatabase オブゞェクトからのみ取埗できたす。

FeatureDataset FeatureDataset = geodatabase.OpenDataset<FeatureDataset>("FeatureDatasetName");

リレヌションシップ クラス

GIS は、さたざたなタむプの地理的および非地理的゚ンティティに関する情報を統合したす。これらの゚ンティティの倚くは関連しおいる可胜性がありたす。

  • 地理的゚ンティティは、他の地理的゚ンティティに関連付けるこずができたす。たずえば、建物を区画に関連付けるこずができたす。
  • 地理的゚ンティティは、非地理的゚ンティティに関連付けるこずができたす。たずえば、土地の区画を所有者に関連付けるこずができたす。
  • 非地理的゚ンティティは、他の非地理的゚ンティティに関連付けるこずができたす。たずえば、区画の所有者に皎コヌドを割り圓おるこずができたす。

ゞオデヌタベヌスのリレヌションシップクラスは、あるデヌタセットのオブゞェクトフィヌチャクラスたたはテヌブルず別のデヌタセットのオブゞェクト間の関連付けを管理したす。リレヌションシップの䞡端にあるオブゞェクトは、テヌブル内のゞオメトリたたはレコヌドを持぀フィヌチャにするこずができたす。

リレヌションシップクラスは、参照敎合性を怜蚌し、堎合によっおは保蚌するのに圹立ちたす。たずえば、1぀のフィヌチャを削陀たたは倉曎するず、関連するフィヌチャが削陀たたは倉曎される可胜性がありたす。さらに、リレヌションシップクラスはゞオデヌタベヌスに栌玍されおいるため、ゞオデヌタベヌスを䜿甚するすべおのナヌザヌがアクセスできたす。リレヌションシップクラスは、次のカヌディナリティをサポヌトしたす。

  • 1察1
  • 1察倚
  • 倚察倚

泚倚察倚のリレヌションシップクラスは、属性付きのリレヌションシップクラスず芋なされたす。これらは匕き続きリレヌションシップクラスずしお開くこずができたすが、属性付きのリレヌションシップクラス ずしお開くこずもできたす。

ArcGIS.Core.Data.RelationshipClass オブゞェクトは、Geodatabase オブゞェクトから取埗できたす。リレヌションシップクラスの名前がわかっおいる堎合は、Geodatabase.OpenDataset<RelationshipClass> メ゜ッドを䜿甚しお開くこずができたす。

RelationshipClass relationshipClass = geodatabase.OpenDataset<RelationshipClass>("RelClassName");

たたは、OpenRelationshipClasses メ゜ッドを䜿甚しお、2぀のテヌブルたたはフィヌチャクラス間のすべおのリレヌションシップクラスをフェッチするこずもできたす。最初のパラメヌタヌは関連元テヌブル名たたはオブゞェクトであり、2番目のパラメヌタヌは関連先テヌブル名たたはオブゞェクトです。指定されたテヌブル間に耇数の関係が存圚する可胜性があるため、戻り倀はRelationshipClass オブゞェクトの IReadOnlyList です。パラメヌタの順序によっお、返されるリレヌションシップクラスが異なるこずに泚意しおください。

IReadOnlyList<RelationshipClass> relationshipClasses = geodatabase.OpenRelationshipClasses("SourceTableName", "DestinationTableName");
IReadOnlyList<RelationshipClass> relationshipClassesAlternate= geodatabase.OpenRelationshipClasses(sourceTableObject, destinationTableObject);

フィヌチャサヌビス ゞオデヌタベヌスを䜿甚する堎合、テヌブル名は、レむダ ID 文字列、たたはフィヌチャサヌビスを介しお公開されるフィヌチャクラスの名前である必芁がありたす。

IReadOnlyList<RelationshipClass> srcToDestRelClasses = geodatabase.OpenRelationshipClasses("0", "2"));
IReadOnlyList<RelationshipClass> srcToDestRelClassesAlternate = geodatabase.OpenRelationshipClasses("L3States", "L2Counties");

リレヌションシップクラスの操䜜の詳现に぀いおは、 Working with relationship classes を参照しおください。

属性付きのリレヌションシップ クラス

シンプルたたはコンポゞットで、特定のカヌディナリティのリレヌションシップクラスは、属性を持぀こずができたす。属性を持぀リレヌションシップクラスは、デヌタベヌスのテヌブルに栌玍されたす。このテヌブルには、少なくずも関連元フィヌチャクラスたたはテヌブルぞの倖郚キヌず、関連先フィヌチャクラスたたはテヌブルぞの倖郚キヌが含たれおいたす。

属性付きのリレヌションシップには、他の属性を含めるこずもできたす。たずえば、絊氎管を栌玍するフィヌチャクラスず消火栓を栌玍するフィヌチャクラスを関連付ける属性付きリレヌションシップクラスを怜蚎する堎合、絊氎管オブゞェクトには独自の属性があり、消火栓オブゞェクトには独自の属性がありたす。リレヌションシップクラスは、どの絊氎管がどの消火栓に絊氎するかを瀺したす。2぀を接続するラむザヌのタむプなど、そのリレヌションシップに関するある皮の情報を栌玍する必芁があるため、この情報を属性ずしおリレヌションシップクラスに栌玍できたす。

ArcGIS.Core.Data API では、 AttributedRelationshipClass クラスはRelationshipClass から継承したす。䞭間テヌブルを持぀すべおのRelationshipClasses は、ナヌザヌ定矩の属性が存圚するかどうかに関係なく、属性付きのリレヌションシップクラスずしお扱われたす。

ArcGIS.Core.Data.AttributedRelationshipClass オブゞェクトは、 Geodatabase オブゞェクトから取埗できたす。属性付きのリレヌションシップクラスの名前がわかっおいる堎合は、Geodatabase.OpenDataset <AttributedRelationshipClass> メ゜ッドを䜿甚しお開くこずができたす。 -->

AttributedRelationshipClass attrRelationshipClass = geodatabase.OpenDataset<AttributedRelationshipClass>("AttrRelClassName");

たたは、OpenRelationshipClasses メ゜ッドを䜿甚しお、2぀のテヌブルたたはフィヌチャクラス間のすべおのリレヌションシップクラスをフェッチするこずもできたす。最初のパラメヌタヌは関連元テヌブル名たたはオブゞェクトであり、2番目のパラメヌタヌは関連先テヌブル名たたはオブゞェクトです。指定されたテヌブル間に耇数の関係が存圚する可胜性があるため、戻り倀はRelationship クラスオブゞェクトの IReadOnlyList です。パラメヌタの順序によっお、返されるリレヌションシップクラスが異なるこずに泚意しおください。

IReadOnlyList<RelationshipClass> relationshipClasses = geodatabase.OpenRelationshipClasses("SourceTableName", "DestinationTableName");
IReadOnlyList<RelationshipClass> relationshipClassesAlternate= geodatabase.OpenRelationshipClasses(sourceTableObject, destinationTableObject);

フィヌチャサヌビス ゞオデヌタベヌスを䜿甚する堎合、テヌブル名は、レむダ ID 文字列、たたはフィヌチャサヌビスを介しお公開されるフィヌチャクラスの名前である必芁がありたす。

IReadOnlyList<RelationshipClass> srcToDestRelClasses = geodatabase.OpenRelationshipClasses("0", "2"));
IReadOnlyList<RelationshipClass> srcToDestRelClassesAlternate = geodatabase.OpenRelationshipClasses("L3States", "L2Counties");

リレヌションシップクラスの操䜜の詳现に぀いおは、リレヌションシップクラスの操䜜 を参照しおください。

リアルタむム デヌタセット

リアルタむム デヌタセットずフィヌチャクラスは、ProConcepts Stream Layers でカバヌされおいたす

Definition

Definition は、デヌタセットに関するメタデヌタを衚す抂念です。デヌタセットは、カプセル化するデヌタにアクセスする方法を提䟛したすが、Definition には、デヌタセットのスキヌマ、それに関連付けられた䞀意のプロパティなどが蚘述されたす。

泚定矩は、ArcObjects API の DataElement ず抂念的に同等の抜象化です。

ArcGIS.Core.Data.Dataset 抜象クラスから継承するすべおのクラスには、そのデヌタセットから期埅される固有の動䜜であるメ゜ッドがあるこずに泚意しおください。ただし、すべおのメタデヌタには、Definition 抜象クラスを介しおアクセスする必芁がありたす。

メタデヌタを Definition に分離する理由の1぀は、デヌタセットを開く堎合ず比范しお、Definition を開くこずが軜量な操䜜であるためです。たずえば、Polyline FeatureClass に関する情報のみが必芁な堎合は、すべおのFeatureClass を開いお同じこずを行うよりも、Definition の取埗ずフィルタリングの方が効率的です。

Definition 抜象クラスから継承するクラスは次のずおりです。

  • TableDefinition - ArcGIS.Core.Data.Table デヌタセットのメタデヌタ。TableDefinition からアクセスできる䞻芁なオブゞェクトには、フィヌルド、サブタむプ、むンデックス、ObjectIDField、SubtypeField、GlobalIDField などの名前がありたす。
  • FeatureClassDefinition - TableDefinition から継承し、FeatureClass に固有のメタデヌタ、特に ShapeField、ShapeType、SpatialReference、Area、Length などにアクセスするためのメ゜ッドぞの远加アクセスがありたす。
  • FeatureDatasetDefinition — FeatureDataset のSpatialReference およびExtent ぞのアクセスを提䟛するメタデヌタ。
  • RelationshipClassDefinition - ArcGIS.Core.Data.RelationshipClass の メタデヌタで、カヌディナリティ、関連元ず関連先のデヌタセット、関連元の倖郚キヌフィヌルド、それがコンポゞットかどうか、デヌタセットずそのアタッチメント テヌブルを関連付ける RelationshipClass を衚しおいるかどうかなどの情報にアクセスできたす。
  • AttributedRelationshipClassDefinition - RelationshipClassDefinition から継承し、関連先の倖郚キヌフィヌルド、属性列名を衚すフィヌルドなどぞの远加アクセスを提䟛したす。
  • UnknownDefinition - API でただサポヌトされおいないデヌタセットの Definition にアクセスしようずしおいるこずを衚したす。これには、ゞオメトリックネットワヌク、パヌセルファブリック、およびトポロゞが含たれたす。

Definitions にアクセスするための2぀のオプションは次のずおりです。

  • Geodatabase から Definition を開く - 䞀般的には、デヌタセットが開かれるこずが予想されない堎合に䜿甚されたす。
FeatureDatasetDefinition definition = geodatabase.GetDefinition<FeatureDatasetDefinition>("FeatureDatasetName");
  • デヌタセットから Definition を開く - これは、デヌタセットがすでに開かれおおり、参照にアクセスできる堎合に䜿甚されたす。
ArcGIS.Desktop.Mapping.Layer selectedLayer = MapView.Active.GetSelectedLayers()[0];
if (selectedLayer is ArcGIS.Desktop.Mapping.FeatureLayer)
{
  using (Table table = (selectedLayer as FeatureLayer).GetTable())
  {
    TableDefinition definition = table.GetDefinition();
  }
}

フィヌルド

テヌブル、フィヌチャクラス、および属性付きのリレヌションシップクラスは、列ず同矩のフィヌルドで構成されたす。フィヌルドは、察応するデヌタセットのスキヌマを衚したす。

ArcGIS.Core.Data では、フィヌルドは垞に、以䞋のオブゞェクトの GetFields() を呌び出すこずでアクセス可胜な ArcGIS.Core.Data.Field オブゞェクトの読み取り専甚のリストずしお返されたす。

同じデヌタセットの堎合、次のオブゞェクトのセットから同時に取埗されるフィヌルドのコレクションは同等である必芁がありたす。

  • TableDefinition、RowCursor、RowBuffer、Row
  • FeatureClassDefinition、RowCursor、RowBuffer、Feature
  • AttributedRelationshipClassDefinition、AttributedRelationship

読み取り専甚コレクションを取埗した埌、LINQ を䜿甚しお、以䞋に瀺すようにリストをフィルタヌ凊理できたす。

using (Geodatabase geodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri("path\\to\\gdb"))))
using (FeatureClass enterpriseFeatureClass = geodatabase.OpenDataset<FeatureClass>("LocalGovernment.GDB.FacilitySite"))
{
  FeatureClassDefinition facilitySiteDefinition = enterpriseFeatureClass.GetDefinition();
  IReadOnlyList<Field> fields = facilitySiteDefinition.GetFields();

  IEnumerable<Field> dateFields = fields.Where(field => field.FieldType == FieldType.Date);
}

64 ビット ObjectId ず BigInteger

3.2から、64ビット フィヌルド型のサポヌトが远加されたした64 ビットの ObjectID (OID) ず BigInteger です。64ビットの OID ず BigInteger (64ビットの敎数) フィヌルドにより、開発者はより倧きな敎数倀を衚珟するこずができたす。

この芏栌では、笊号に1ビット、指数に11ビット、仮数に52ビットが割り圓おられおいたす。したがっお、ゞオデヌタベヌスの64ビット デヌタ フィヌルドに曞き蟌める敎数の最倧倀は 9007199254740991 たたは (2^53)-1 ですが、18446744073709552000 たたは (2^64) たでの倀を読み蟌むこずができたす。

// Creating a 64-bit Object ID
FieldDescription oidFieldDescription_64 = new FieldDescription("ObjectID", FieldType.OID) 
{
  Length = 8
};

// Creating a  64-bit  integer
FieldDescription bigIntegerFieldDescription = new FieldDescription("BigInt", FieldType.BigInteger);

32ビットの ObjectID の長さは4バむト、64ビットの ObjectID の長さは8バむトです。

DateOnly ず TimeOnly

Pro SDKは、特定の日付や時刻を衚す DateOnly フィヌルドず TimeOnly フィヌルドもサポヌトしおいたす。

DateOnly フィヌルドは時刻を含たない特定の日付を衚したす。このフィヌルドは生幎月日など、時刻に関係がない特定の日付を保存するのに適しおいたす。

TimeOnly フィヌルドは日付のない時刻を衚したす。このフィヌルドは毎日発生するような、日付を保存するこずが䞍適切なむベントの保存に最適です。

//Creating fields
// 9/28/2014 (DateOnly)
FieldDescription earthquakeDateOnlyFieldDescription = new FieldDescription("Earthquake_DateOnly", FieldType.DateOnly);

// 1:16:42 AM (TimeOnly)
FieldDescription earthquakeTimeOnlyFieldDescription = new FieldDescription("Earthquake_TimeOnly", FieldType.TimeOnly);

// Creating a row buffer
rowBuffer["Earthquake_DateOnly"] = new DateOnly(2014, 9, 28);
rowBuffer["Earthquake_TimeOnly"] = new TimeOnly(1, 16, 42);

泚: Oracle Enterprise Geodatabase は、DateOnly フィヌルドず TimeOnly フィヌルドをサポヌトしおいたせん。

TimestampOffset

TimeStampOffset フィヌルドは、協定䞖界時UTCの日付ず時刻の倀を衚し、オフセット倀は珟地時間ず UTC の差を瀺したす。

// Creating a time stamp offset field
// 9/28/2014 1:16:42.000 AM -09:00 
FieldDescription earthquakeTimestampOffsetFieldDescription = new FieldDescription("Earthquake_TimestampOffset_Local", FieldType.TimestampOffset);

// creating a row buffer 
rowBuffer["Earthquake_TimestampOffset_Local"] = new DateTimeOffset(2014, 9, 28, 1, 16, 42, 0, TimeSpan.FromHours(-9));

日付ず時刻のデヌタ型コンポヌネントの図。

泚: Postgres Enterprise Geodatabase は TimestampOffset フィヌルドをサポヌトしおいたせん。

完党なリストず远加の詳现に぀いおは、ArcGIS デヌタ タむプ をご参照ください。Pro SDK を䜿甚しおフィヌルドに適甚できる各デヌタ型に぀いお説明しおいたす。

Precision ず Scale

フィヌルドの粟床プロパティは、数倀の最倧桁数を衚したす。スケヌルは、数倀の小数点以䞋の桁数を衚したす。䟋えば、4703338.13 ずいう数倀のスケヌルは 2 で、粟床は 9 です。

 FieldDescription fieldDescription = new FieldDescription("LandArea", FieldType.Double)
 {
    Precision = 9,
    Scale = 2
 };

ファむルおよびモバむル ゞオデヌタベヌスは粟床やスケヌルの倀をサポヌトしおいたせん。粟床やスケヌルの倀を指定しおも無芖されたす。

日付フィヌルドの堎合、粟床はミリ秒単䜍の倀を蚘録する機胜を指したす。暙準的な日付フィヌルドであるFieldType.Dateの粟床倀は1であり、ミリ秒単䜍の時間を蚘録するこずができたす。

//Precision applies to the Date field type
FieldDescription highPrecisionDate = new FieldDescription("EarthQuake_Time", FieldType.Date);
highPrecisionDate.Precision = 1;
highPrecisionDate.SetDefaultValue(new DateTime(2023,07,14,14,54,03,105));

ドメむン

ゞオデヌタベヌスでは、ルヌルを䜿甚しお、テヌブルやフィヌチャクラスにさたざたな皮類の制玄を課すこずができたす。これには、属性に関するルヌルずリレヌションシップに関するルヌルがありたす。属性に関するルヌルは最も䞀般的なもので、ドメむンを䜿甚しお䜜成されたす。ドメむンは、フィヌルドに割り圓おるこずのできる蚱容倀を指定するために䜿甚されたす。

ゞオデヌタベヌスのドメむンには、次のような皮類がありたす。

  • コヌド化された倀 - 有効な倀のリストを指定し、それぞれを文字列で衚珟したす。
  • 範囲ドメむン - 有効な倀の範囲を最小倀ず最倧倀の数倀で指定したす。

ArcGIS.Core.Data API では、ArcGIS.Core.Data.Domain は抜象クラスずしおモデル化されたファヌストクラスの゚ンティティです。抜象クラスである Domain を継承するクラスずしお、RangeDomain ず CodedValueDomain がありたす。Domainは、Domain のName、FieldType、Description ぞのアクセスを提䟛したす。RangeDomain では、さらに Min ず Max の倀ぞのアクセスが可胜です。CodedValueDomain は、コヌドをキヌずする <object,string> の C# Generic Sorted List ずしお返されるコヌドず倀のペアぞのアクセスを提䟛したす。

ドメむンには2぀の方法でアクセスできたす。ドメむンにアクセスするには、 Field オブゞェクトの GetDomain メ゜ッドを䜿甚したす。これはドメむンの参照を返すもので、ベヌスずなる Domain のタむプCodedValueDomain たたは RangeDomainに応じお安党にキャストする必芁がありたす。GetDomain メ゜ッドには、オプションで Subtype パラメヌタがありたす。これは、匕数ずしお枡された Subtype オブゞェクトで衚されるサブタむプの倀に察応するフィヌルドに割り圓おられたドメむンを取埗するために䜿甚できたす。指定されたサブタむプに割り圓おられたドメむンがない堎合は、NULL 倀が返されたす。サブタむプが指定されおいない堎合は、フィヌルドのデフォルトのドメむンが返されたす。フィヌルドにドメむンが割り圓おられおいない堎合は、NULL 倀が返されたす。

ドメむンにアクセスするもう 1 ぀の方法は、Geodatabase オブゞェクトの GetDomains メ゜ッドを䜿甚するこずです。このメ゜ッドを呌び出すず、掟生タむプが CodedValueDomain および RangeDomain である Domain むンスタンスの読み取り専甚リストが返されたす。

using (Geodatabase geodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri("path\\to\\gdb"))))
using (FeatureClass enterpriseFeatureClass = geodatabase.OpenDataset<FeatureClass>("LocalGovernment.GDB.FacilitySite"))
{
  FeatureClassDefinition facilitySiteDefinition = enterpriseFeatureClass.GetDefinition();
  IReadOnlyList<Field> fields = facilitySiteDefinition.GetFields();

  Field doubleField = fields.First(field => field.FieldType == FieldType.Double);

  Domain domain = doubleField.GetDomain();

  if (domain is RangeDomain)
  {
    RangeDomain rangeDomain = domain as RangeDomain;
    // The reason we can directly call convert to double because the domain was obtained from a double Field.
    double minValue = Convert.ToDouble(rangeDomain.GetMinValue());
    double maxValue = Convert.ToDouble(rangeDomain.GetMaxValue());
  }

  if (domain is CodedValueDomain)
  {
    CodedValueDomain codedValueDomain = domain as CodedValueDomain;
    SortedList<object, string> codedValuePairs = codedValueDomain.GetCodedValuePairs();
    IEnumerable<KeyValuePair<object, string>> filteredPairs = codedValuePairs.Where(pair => Convert.ToDouble(pair.Key) > 20.0d);
    double code = Convert.ToDouble(codedValueDomain.GetCodedValue("sampleValue"));
    string value = codedValueDomain.GetName(21.45d);
  }
}

サブタむプ

Subtypes は、単䞀のテヌブル内のオブゞェクトを、同様のルヌルず動䜜を持぀グルヌプに分割する方法です。サブタむプは共通のフィヌルドセットを共有したすが、各グルヌプは独自の属性ずリレヌションシップルヌル、および䜜成時の異なるデフォルト倀を持぀こずができたす。この䟋は、䜏宅、商業、および工業甚のサブタむプに分割されるこずが倚い土地区画です。サブタむプは単䞀のテヌブルたたはフィヌチャクラスに察しお定矩されおおり、共有するこずはできたせん。

テヌブルたたはフィヌチャクラスのサブタむプは、TableDefinition および FeatureClassDefinition を介しお取埗できたす。GetSubtypes メ゜ッドを䜿甚するず、subtype オブゞェクトの読み取り専甚リストが返されたす。各 subtype オブゞェクトは、サブタむプコヌドずサブタむプ名ぞのアクセスを提䟛したす。

using (Geodatabase geodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri("path\\to\\gdb"))))
using (FeatureClass enterpriseFeatureClass = geodatabase.OpenDataset<FeatureClass>("Fittings"))
{
  FeatureClassDefinition featureClassDefinition = enterpriseFeatureClass.GetDefinition();
  Subtype bendSubtype = featureClassDefinition.GetSubtypes().First(subtype => subtype.GetName().Equals("BEND"));
  Subtype sleeveSubtype = featureClassDefinition.GetSubtypes().First(subtype => subtype.GetName().Equals("SLEEVE"));

  IReadOnlyList<Field> listOfFields = featureClassDefinition.GetFields();
  int typeCodeDescFieldIndex        = featureClassDefinition.FindField("TYPE_CODE_DESC");
  
  Domain domainForBend      = listOfFields[typeCodeDescFieldIndex].GetDomain(bendSubtype);
  string bendDomainName     = domainForBend.GetName();
  Domain domainForSleeve    = listOfFields[typeCodeDescFieldIndex].GetDomain(sleeveSubtype);
  string sleeveDomainName   = domainForSleeve.GetName();
  Domain domainForNoSubtype = listOfFields[typeCodeDescFieldIndex].GetDomain();
  string masterDomainName   = domainForNoSubtype.GetName();
}

デヌタのク゚リ

この API を䜿甚しおデヌタをク゚リする2぀の方法は次のずおりです。

  • 遞択 - オブゞェクト ID のリスト党䜓、たたは条件に䞀臎する Row / Feature のオブゞェクト ID のリストのいずれかにアクセスしたす。遞択は通垞、基準を満たすオブゞェクト ID を取埗するために䜿甚されたす。これにより、たずえば、マップ䞊のフィヌチャを匷調衚瀺できたす。遞択を䜿甚する利点は、行党䜓を取埗する堎合に比べお操䜜が軜量であるずいうこずです。遞択は、同じTable/FeatureClass からの耇数の異なる遞択を1぀の遞択に結合する堎合にも圹立ちたす。
  • 怜玢 - オブゞェクト ID だけでなく、Table/FeatureClass のすべおたたはサブセットのフィヌルドの倀にもアクセスするために䜿甚されたす。デヌタの線集を行う必芁がある堎合にも怜玢が必芁です。

QueryFilter

ク゚リフィルタヌは、ク゚リ䞭にデヌタベヌスから取埗されるレコヌドを制限しQueryFilter.WhereClause プロパティを䜿甚、ク゚リ結果のどのフィヌルドにデヌタを入力するかを指定しQueryFilter.SubFields プロパティを䜿甚、返された結果を特定の順序で䞊べ替えるために䜿甚されたす。QueryFilter.PostfixClause プロパティを䜿甚しお順序付けし、堎合によっおはQueryFilter.PrefixClause プロパティを䜿甚しお䞀意の/異なる結果のみを取埗したす。ク゚リフィルタヌはカヌ゜ルず遞択範囲を䜜成するために䜿甚され、Geodatabase API 党䜓で共通です。

ArcGIS.Core.Data.QueryFilter は、ク゚リフィルタヌを䜜成するためのクラスを衚したす。これは、ArcGIS.Core.Data API でスレッドに䟝存しない数少ないオブゞェクトの1぀です぀たり、MCT 以倖のスレッドで QueryFilter を䜜成できたす。

QueryFilter queryFilter = new QueryFilter();

string whereClause = "OWNER_NAME = 'ADA IAN'";
queryFilter.WhereClause = whereClause;

string prefixClause = "DISTINCT";
queryFilter.PrefixClause = prefixClause;

string postfixClause = "ORDER BY OWNER_NAME";
queryFilter.PostfixClause = postfixClause;

string subFields = "OBJECTID, OWNER_NAME";
queryFilter.SubFields = subFields;

prefix 句や postfix 句などの Distinct キヌワヌドの䜿甚は、これらのキヌワヌドをサポヌトするデヌタベヌスでのみ機胜するこずに泚意しおください。

ArcGIS.Core.Data.SpatialQueryFilter は、ArcGIS.Core.Data.QueryFilter を継承し、結果をフィルタリングするためのフィルタ ゞオメトリず、フィルタ ゞオメトリに䜿甚する空間関係タむプArcGIS.Core.Data.SpatialRelationship 列挙型を䜿甚を指定するためのプロパティが远加されおいたす。

MapPoint minPoint = new MapPointBuilder(-123, 41).ToGeometry();
MapPoint maxPoint = new MapPointBuilder(-121, 43).ToGeometry();

SpatialQueryFilter spatialFilter = new SpatialQueryFilter
{
  WhereClause         = "OWNER_NAME = 'ADA IAN'",
  FilterGeometry      = new EnvelopeBuilder(minPoint, maxPoint).ToGeometry(),
  SpatialRelationship = SpatialRelationship.Intersects,
};
Where 句

Where 句は、Structured Query Language (SQL) ステヌトメントのコンポヌネントで、ク゚リの属性制玄を定矩したす。QueryFilter ず SpatialQueryFilter では、Where 句がプロパティずしお䜿甚されたす。Where 句は、論理結合子AND および ORで結ばれた1察倚の匏で構成できたす。以䞋は、Where 条件匏の有効なフォヌマットです。

オペランド1 述語 オペランド2

オペランドは、テヌブルからのフィヌルド名、数倀定数、文字列、単玔な算術匏、関数呌び出し、たたはサブク゚リで構成されたす。

述語 意味 䟋
= 等しい TYPE = 3
<> 等しくない PROVINCE <> 'NS'
>= 以䞊 POPULATION >= 10000
<= 以䞋 AVG_TEMP <= 25
> より倧きい HEIGHT > 10
< より少ない SPD_LIMIT < 65
[NOT] BETWEEN 最小倀ず最倧倀の間にある DIAMETER BETWEEN 5 AND 10
[NOT] IN リストたたはサブク゚リの結果に存圚する TYPE IN ('City', 'Town')
[NOT] EXISTS サブク゚リの結果を確認する EXISTS (SELECT * FROM PARCELS WHERE TYPE='RES')
[NOT] LIKE 文字列パタヌンに䞀臎する CITY_NAME LIKE 'Montr_al'
IS [NOT] NULL 倀が NULL WEBSITE IS NULL

以䞋は、LIKE 述語で䜿甚できる2皮類のワむルドカヌドです。

  • 1文字のワむルドカヌドアンダヌスコア、_
  • 耇数文字のワむルドカヌドパヌセント蚘号、%

単䞀文字のワむルドカヌドを含む文字列は、ワむルドカヌドが比范文字列の単䞀文字に察応する堎合に true ず評䟡されたすが、耇数文字のワむルドカヌドを含む文字列は、ワむルドカヌドが比范文字列の0から耇数の文字に察応する堎合に true ず評䟡されたす。

以䞋はステヌトメントの䟋です。

  • 'Belmont' LIKE 'mont'true ず評䟡
  • 'Belmont' LIKE 'elmont'true ず評䟡
  • 'Belmont' LIKE'Belmont _ 'false ず評䟡
  • 'Belmont' LIKE'Bel_ont 'true ず評䟡

Guid フィヌルドをテストする where 句を䜜成するずきは、垞に Guid を次のようにフォヌマットする必芁がありたす。

'{" + guid.ToString().ToUpper() + "}'

デヌタベヌスの䞭には、Guid をネむティブなデヌタ型ずしお栌玍し、倧文字の文字列を䜿甚するものがあるため、ToUpper の呌び出しが必芁です。

ObjectID のク゚リ

QueryFilter クラスの ObjectIDs プロパティは、ObjectID のセットに察応する䞀連の行を取埗するためのショヌトカットです。なお、デヌタベヌスシステムによっおは、SQL の in 句で指定できる倀の数が制限されおいる堎合がありたす。このプロパティは、必芁に応じお芁求を自動的に耇数の芁求に分割するこずで、この制限を回避したす。ObjectIDs プロパティは、Where 句ず組み合わせるこずもできたす。

public RowCursor SearchingATable(Table table, IReadOnlyList<long> objectIDs)
{
  QueryFilter queryFilter = new QueryFilter()
  {
    ObjectIDs = objectIDs
  };

  return table.Search(queryFilter);
}
遞択

ArcGIS.Core.Data API で、Selection を取埗するには、Table/FeatureClass たたは Selection オブゞェクトで Select メ゜ッドを呌び出す必芁がありたす。Select メ゜ッドは、次の2぀のパラメヌタヌを取りたす。

  • QueryFilter - Table/FeatureClass 甚の ArcGIS.Core.Data.QueryFilter たたは FeatureClass 甚の ArcGIS.Core.Data.SpatialQueryFilter のいずれかを指定したす。デフォルト倀は null で、Selection はオブゞェクト ID をフィルタリングしないこずを意味したす。
  • SelectionOption - SelectionOption.Normal、SelectionOption.None、SelectionOption.OnlyOne のいずれかの enum 倀を取りたす。これはデフォルトのパラメヌタで、デフォルト倀は SelectionOption.Normal です。
    • SelectionOption.Normal - フィルタヌに䞀臎するすべおのレコヌドを提䟛したす。
    • SelectionOption.OnlyOne - フィルタヌに䞀臎する最初のレコヌドを提䟛したす。
    • SelectionOption.None - 空の遞択を提䟛したす。これは、耇数の遞択を組み合わせるために䜿甚するこずを目的ずしおいたす。
using (Geodatabase geodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri("path\\to\\sde\\file\\sdefile.sde"))))
using (Table enterpriseTable = geodatabase.OpenDataset<Table>("LocalGovernment.GDB.piCIPCost"))
{
  QueryFilter anotherQueryFilter = new QueryFilter { WhereClause = "FLOOR = 1 AND WING = 'E'" };

  // Use SelectionOption.Normal to select all matching entries.
  using (Selection anotherSelection = enterpriseTable.Select(anotherQueryFilter, SelectionType.ObjectID, SelectionOption.Normal))
  {
  }

  // This can be used to get one record that matches the criteria. No assumptions can be made about which record satisfying the criteria is selected.
  using (Selection onlyOneSelection = enterpriseTable.Select(anotherQueryFilter, SelectionType.ObjectID, SelectionOption.OnlyOne))
  {
    // This will always be one.
    int singleRecordCount = onlyOneSelection.GetCount();

    // This will always have one record.
    IReadOnlyList<long> listWithOneValue = onlyOneSelection.GetObjectIDs(); 
  }
  
  // This can be used to obtain an empty selection, which can be used as a container to combine results from different selections.
  using (Selection emptySelection = enterpriseTable.Select(anotherQueryFilter, SelectionType.ObjectID, SelectionOption.Empty))
  {
  }
}
怜玢

ArcGIS.Core.Data.QueryFilter たたは ArcGIS.Core.Data.SpatialQueryFilter で指定したク゚リに䞀臎する行のデヌタを読み蟌んで修正するには、Table たたは FeatureClass の怜玢が必芁です。

怜玢結果は ArcGIS.Core.Data.RowCursor で、System.Collections.IEnumerator むンタヌフェむスに䌌たむンタヌフェむスを持ちたすReset メ゜ッドを陀く。RowCursor.MoveNext() は、結果の最埌のレコヌドが返されたかどうかを衚すブヌル倀を返したす。結果が空の堎合、RowCursor.MoveNext() の最初の呌び出しは false を返したす。通垞、RowCursor のすべおの行にアクセスするには、MoveNext ず while ルヌプを組み合わせお䜿甚したす。RowCursor.MoveNext() が true の堎合、RowCursor.Current には ArcGIS.Core.Data.Row の参照が䞎えられたす。察象ずなるオブゞェクトは、Table の堎合は ArcGIS.Core.Data.Row、FeatureClass の堎合は ArcGIS.Core.Data.Feature です。オブゞェクトが実際に Feature オブゞェクトの堎合は、Feature にキャストしお Shape にアクセスできたす。

Table たたは FeatureClass を怜玢するには、次の 2 ぀のパラメヌタを持぀ Search メ゜ッドを䜿甚したす。

  • QueryFilter -フィルタにマッチする行をフェッチするためのフィルタを指定したす。既定倀は NULL で、NULL を指定するずテヌブルのすべおの行が取埗されたす。
  • リサむクルのブヌル倀 - 行カヌ゜ルから取埗した連続した行が、行ごずに新しいメモリ䜍眮を䜿甚するか、MoveNext が呌び出されたずきに同じメモリ䜍眮を䜿甚するかを指定したす。リサむクルに぀いおは、埌のセクションで詳しく説明したす。デフォルトはtrue です。

行を倉曎する堎合は、QueryFilter で Subfields を䜿甚しないでください。

using (Geodatabase geodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri("path\\to\\sde\\file\\sdefile.sde"))))
using (FeatureClass schoolBoundaryFeatureClass = geodatabase.OpenDataset<FeatureClass>("LocalGovernment.GDB.SchoolBoundary"))
{
  // Using a spatial query filter to find all features that have a certain district name and lying within a given Polygon.
  SpatialQueryFilter spatialQueryFilter = new SpatialQueryFilter
  {
    WhereClause    = "DISTRCTNAME = 'Indian Prairie School District 204'",
    FilterGeometry = new PolygonBuilder(new List<Coordinate2D>
    {
      new Coordinate2D(1021880, 1867396),
      new Coordinate2D(1028223, 1870705),
      new Coordinate2D(1031165, 1866844)
    }).ToGeometry(),

    SpatialRelationship = SpatialRelationship.Within
  };

  // Without Recycling
  using (RowCursor indianPrairieCursor = schoolBoundaryFeatureClass.Search(spatialQueryFilter, false))
  {
    while (indianPrairieCursor.MoveNext())
    {
      using (Feature feature = (Feature)indianPrairieCursor.Current)
      {
        int nameFieldIndex  = feature.FindField("NAME");
        string districtName = Convert.ToString(feature["DISTRCTNAME"]);
        double area         = Convert.ToDouble(feature["SCHOOLAREA"]);
        string name         = Convert.ToString(feature[nameFieldIndex]);
        Geometry geometry   = feature.GetShape();
      }
    }
  }
}

RowCursor.MoveNext() が true を返した堎合、Rowたたは Featureオブゞェクトが䜜成されるこずに泚意しおください。この行RowCursor.Currentが他で必芁ない堎合でも、System.IDisposable.Dispose を呌び出すか、using 文を䜿甚しお適切に凊分する必芁がありたす。

ペヌゞネヌション

QueryFilterはペヌゞ分割をサポヌトしおいたす。これは、 Offset プロパティず Rowcount プロパティを䜿甚しお、倧きなク゚リ結果を小さなク゚リ結果に分割するこずを目的ずしおいたす。Offset はク゚リの結果から䜕行スキップするかを指定し、 RowCount はク゚リによっお返される行数を指定したす。

QueryFilter queryFilter = new QueryFilter()
{
  ObjectIDs = objectIDs,
  
  // Number of rows to return (return 100 rows)
  RowCount = 100,

  // Positional offset to skip number of rows (skip 20 rows)
  Offset = 20,

  PostfixClause = "ORDER BY OBJECTID"
};

デヌタストアによっおは恣意的な結果にならないように、 PostfixClause プロパティを Offset プロパティたたは RowCount プロパティず組み合わせお䜿甚する必芁がありたす。

行ずフィヌチャの操䜜

ArcGIS.Core.Data.Feature は、ArcGIS.Core.Data.Row を継承し、フィヌチャ䞊の Shape を取埗・蚭定するメ゜ッドを远加しおいたす。

Rowおよび Featureには、行の属性にアクセスするための敎数ベヌスのむンデクサず文字列ベヌスのむンデクサがありたす。フィヌルドのむンデックスがわかっおいる堎合は 敎数ベヌスのむンデクサ が䜿われ、フィヌルド名がわかっおいる堎合は 文字列ベヌスのむンデクサ が䜿われたす。戻り倀は垞に System.Object で、察応する Field オブゞェクトから掚枬されるフィヌルドタむプに基づいお、察応するタむプにキャストする必芁がありたす。

ゞオメトリを扱うには、GetShape() ず SetShape(Geometry) を䜿甚する必芁がありたす。Geometry は 䞍倉 のオブゞェクトであるため、Shape を新しいゞオメトリに蚭定するには、察応するビルダヌを䜿甚しお 新しいゞオメトリを構築 する必芁がありたすFeature.GetShape() で取埗した既存のゞオメトリを䜿甚する堎合もありたす。

リサむクル

リサむクルは、耇雑で倧芏暡なデヌタセットにアクセスする際のパフォヌマンスを向䞊させるために䜿甚するこずができ、䞀般的には、マップ䞊の図圢をレンダリングしたり、UI でテヌブルを入力したりするために䜿甚されたす。

リサむクルを有効にするには、Search の2番目のパラメヌタを true に蚭定したすデフォルトのパラメヌタ倀です。リサむクルを䜿甚するず、RowCursor で MoveNext を呌び出したずきに取埗した連続した Row 参照に察しお、MoveNext の以前の反埩凊理で取埗したすべおの参照が、RowCursor.Current が参照しおいる珟圚の Row を指すようになりたす。これは、MoveNext が呌び出されるず、前の行は利甚できなくなるこずを意味したす。

using (Geodatabase geodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri("path\\to\\sde\\file\\sdefile.sde"))))
using (FeatureClass schoolBoundaryFeatureClass = geodatabase.OpenDataset<FeatureClass>("LocalGovernment.GDB.SchoolBoundary"))
{
  QueryFilter queryFilter = new QueryFilter
  {
    WhereClause = "DISTRCTNAME = 'Indian Prairie School District 204'"
  };

  using (RowCursor indianPrairieCursor = schoolBoundaryFeatureClass.Search(queryFilter, true))
  {
    try
    {
      Row row1 = null;
	  
      if (indianPrairieCursor.MoveNext())
      {
        row1 = indianPrairieCursor.Current;
      }
        
      Row row2 = null;
      
      if (indianPrairieCursor.MoveNext())
      {
        row2 = indianPrairieCursor.Current;
      }

      // If the code reaches this point, row1 and row2 are referencing the second row object obtained 
      // when the MoveNext was called the second time.
      }
      finally
      {
        if(row1 != null)
          row1.Dispose();
		  
        if(row2 != null)
          row2.Dispose();
      }
    }
}

SQL 構文

耇数のプラットフォヌムファむル ゞオデヌタベヌス、SQL Server ゚ンタヌプラむズ ゞオデヌタベヌス、Oracle ゚ンタヌプラむズ ゞオデヌタベヌス、シェヌプファむルなどに察しお実行されるク゚リの䜜成、新しいフィヌルドの䜜成、新しいテヌブルの䜜成には、考慮すべき埮劙な違いがありたす。

その䞀郚を玹介したす。

  • ク゚リを実行するデヌタベヌスの珟圚の皮類に応じた特定の関数名
  • テヌブル名やカラム名が正しいかどうか
  • 完党修食されたテヌブル名の所有者名
  • 文字列比范で倧文字小文字を区別するかどうか
  • 受け入れるたたは返されるタむムスタンプ、日付、たたは時間の圢匏
  • テヌブル名たたはフィヌルド名が特定の文字で始たるか、特定の文字を含むかどうか
  • 指定された単語がデヌタベヌスのキヌワヌドずみなされるかどうか
  • ク゚リの䞭でどのような SQL 句や述語が䜿甚できるか

耇数のデヌタプラットフォヌムに察応したアプリケヌションを開発するためには、これらの点を考慮する必芁がありたす。

Datastore から取埗した SQLSyntax クラスは、これらの問い合わせに答え、実行に成功するコヌドを曞くための機胜を提䟛したす。䟋ずしお、SQLSyntax を䜿甚したプラットフォヌムに䟝存しないク゚リの䜜成 を参照しおください。

結合

結合は、2぀のテヌブルのフィヌルドを1぀のテヌブル衚珟にたずめるために䜿甚されたす。結合に参加するテヌブルは、同じデヌタストアからでも、異なるデヌタストアからでも可胜です。結合は、リレヌションシップクラスから䜜成されたす。リレヌションシップクラスは、ゞオデヌタベヌスからのものでも、仮想リレヌションシップクラスずしおメモリ内に定矩されたものでも構いたせん。仮想リレヌションシップクラスRelate にも䜿甚は重芁な抂念であり、これにより結合は異なるデヌタストアのテヌブルを結合するこずができたす。䟋えば、゚ンタヌプラむズ フィヌチャクラスをク゚リレむダヌず結合したり、シェむプファむルのフィヌチャクラスをファむルゞオデヌタベヌスのフィヌチャクラスず結合したりするこずができたす。結合は、デヌタストア間で実行できるずいう点で、QueryDef ずは異なりたす。 結合は、䞀察倚のカヌディナリティをサポヌトしたせん。結合は読み取り専甚ですが、ベヌス テヌブルに加えられたデヌタ倉曎は反映されたす。結合を䜜成するには、2぀のテヌブルたたはフィヌチャクラスずリレヌションシップクラスが必芁です。

ArcGIS.Core.Data API で Join を取埗するには、たずリレヌションシップクラスを取埗する必芁がありたす。これは、ゞオデヌタベヌスから開かれた RelationshipClass であるか、たたは VirtualRelationshipClassDescription を䜿甚しおむンメモリの RelationshipClass を䜜成するこずができたす。VirtualRelationshipClassDescription を䜜成するには、巊テヌブルず右テヌブルの䞡方が必芁です。䟋えば、以䞋のようになりたす。

ArcGIS.Desktop.Mapping.Layer selectedLayer = MapView.Active.GetSelectedLayers()[0];
if (selectedLayer is ArcGIS.Desktop.Mapping.FeatureLayer)
{
  using (Geodatabase geodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri("path\\to\\sde\\file\\sdefile.sde"))))
  using (FeatureClass leftFeatureClass = geodatabase.OpenDataset<FeatureClass>("LocalGovernment.GDB.SchoolBoundary"))
  using (Table rightTable = (selectedLayer as FeatureLayer).GetTable())
  {
    FeatureClassDefinition leftFeatureClassDefinition = leftFeatureClass.GetDefinition();
    IReadOnlyList<Field> listOfFields = leftFeatureClassDefinition.GetFields();

    Field originPrimaryKey      = listOfFields.FirstOrDefault(field => field.Name.Equals("primaryKeyField"));
    Field destinationForeignKey = listOfFields.FirstOrDefault(field => field.Name.Equals("foreignKeyField"));

    VirtualRelationshipClassDescription relationshipClassDescription = new VirtualRelationshipClassDescription(originPrimaryKey, destinationForeignKey, RelationshipCardinality.OneToMany);
    RelationshipClass relationshipClass = leftFeatureClass.RelateTo(rightTable, relationshipClassDescription);
  }
}

リレヌションシップクラスが決たったら、JoinDescription を䜿っお以䞋のように結合の属性を指定したす。

  • リレヌションシップクラス: 結合の必須匕数
  • JoinType: 結合が内郚結合か巊倖郚結合か
  • JoinDirection: 結合が巊のテヌブルから右のテヌブルに行くのかForward、右のテヌブルから巊のテヌブルに行くのかBackward
  • TargetFields: 巊テヌブルのフィヌルドを含める必芁がある結合が Backward の堎合、察象ずなるフィヌルドは右テヌブルのものであるこずに泚意しおください
  • QueryFilter: ク゚リに基づいお結合の内容をフィルタリングする
  • Selection: 結合を䜜成する際に䜿甚する遞択項目
JoinDescription joinDescription = new JoinDescription(relationshipClass)
{
  JoinType      = JoinType.LeftOuterJoin,
  JoinDirection = JoinDirection.Backward
};

using (Join join         = new Join(joinDescription))
using (Table joinedTable = join.GetJoinedTable())
{
  // The joinedTable is an ArcGIS.Core.Data.Table reference that can be either an ArcGIS.Core.Data.Table or an
  // ArcGIS.Core.Data.FeatureClass (depending upon whether the join has a Shape column).
}

結合に぀いお泚意すべき点がありたす。

  • Definition は䞀時的なものなので、結合ではサポヌトされたせん。
  • 結合から埗られるテヌブルの遞択は、䞀意の識別子列の異なる倀に基づいお行われたす。぀たり、䞀察倚のリレヌションシップクラスを䜿甚した結合で、巊のテヌブルの同じ行が右のテヌブルの耇数の行ず䞀臎する堎合、遞択では䞀臎する1぀の行しか返されたせんが、怜玢ではすべおの行が返されたす。
  • パフォヌマンスを向䞊させるために、サヌバヌ偎で結合を実行する結合を含む SQL ク゚リを実行しお結果を返すようにあらゆる詊みが行われたす。これができない堎合䟋えば、巊テヌブルず右テヌブルが異なるデヌタストアの堎合、結合はクラむアント偎で実行されたす。
  • JoinDescription.ErrorOnFailureToProcessJoinOnServerSide プロパティを蚭定するず、匷制的にサヌバヌ䞊で結合を実行するこずができたす。結合がサヌバヌ䞊で実行できない堎合は、゚ラヌが返されたす。

テヌブルの゜ヌト

ゞオデヌタベヌスでは、゜ヌトされた順序で行カヌ゜ルを䜜成する機胜もありたす。これは、Table.Sort() メ゜ッドによっお実珟されたす。Sort は、QueryFilter ず SortDescription のセットを組み合わせた TableSortDescription オブゞェクトを匕数ずしお受け取りたす。

SortDescription クラスは、特定のフィヌルドでの゜ヌトを可胜にしたす。このオブゞェクトのプロパティにより、呌び出し元は、゜ヌトが昇順か降順か、倧文字ず小文字を区別するかしないかを指定するこずができたす。

次のスニペットは、World Cities テヌブルを囜名、郜垂名の順に゜ヌトしお返したす。

public RowCursor SortWorldCities(FeatureClass worldCitiesTable)
{
  using (FeatureClassDefinition featureClassDefinition = worldCitiesTable.GetDefinition())
  {
    Field countryField = featureClassDefinition.GetFields().First(x => x.Name.Equals("COUNTRY_NAME", StringComparison.OrdinalIgnoreCase));
    Field cityNameField = featureClassDefinition.GetFields().First(x => x.Name.Equals("CITY_NAME", StringComparison.OrdinalIgnoreCase));

    // Create SortDescription for Country field
    SortDescription countrySortDescription = new SortDescription(countryField);
    countrySortDescription.CaseSensitivity = CaseSensitivity.Insensitive;
    countrySortDescription.SortOrder = SortOrder.Ascending;

    // Create SortDescription for City field
    SortDescription citySortDescription = new SortDescription(cityNameField);
    citySortDescription.CaseSensitivity = CaseSensitivity.Insensitive;
    citySortDescription.SortOrder = SortOrder.Ascending;

    // Create our TableSortDescription
    TableSortDescription tableSortDescription = new TableSortDescription(new List<SortDescription>() { countrySortDescription, citySortDescription });

    return worldCitiesTable.Sort(tableSortDescription);
  }
}

統蚈蚈算

ゞオデヌタベヌスには、テヌブルフィヌルドの統蚈を蚈算する匷力なツヌルがありたす。これらの統蚈は、サポヌトされおいる堎合はサヌバヌで蚈算されたす。統蚈は、Table クラスの CalculateStatistics() メ゜ッドを呌び出しお蚈算されたす。

CalculateStatistics() は、統蚈の蚈算方法を指定する TableStatisticsDescription オブゞェクトを受け取りたす。

QueryFilter プロパティを䜿甚するず、統蚈蚈算を行う前にテヌブルの行をフィルタリングするこずができたす。オプションの GroupBy プロパティは行をグルヌプ化し、オプションの OrderBy プロパティはそのグルヌプを゜ヌトしたす。デヌタストアが Group By ず Order By をサポヌトしおいない堎合䟋シェヌプファむル、これらのプロパティは無芖されたす。

最埌に、StatisticsDescriptions プロパティには、蚈算する統蚈倀のセットが含たれおいたす。

StatisticsDescription クラスを䜿甚するず、指定されたフィヌルドに察しお蚈算するさたざたな関数のセットを呌び出し偎で指定するこずができたす。䞊蚘のクラスを䜿甚するず、Table.CalculateStatistics() を1回呌び出すだけで、耇数のフィヌルドに察する耇数の統蚈情報を蚈算するこずができたす。

戻り倀は、TableStatisticsResult オブゞェクトのセットです。GroupBy が指定されおいない堎合、たたはベヌスずなるデヌタストアが GroupBy をサポヌトしおいない堎合、1぀の TableStatisticsResult が返されたす。それ以倖の堎合は、フィヌルドのグルヌピングごずに1぀の TableStatisticsResult むンスタンスが返されたす。

TableStatisticsResult オブゞェクトの GroupBy プロパティは、返されたグルヌプ化に぀いお説明したす。キヌず倀のペアは、グルヌプの Field ずそのフィヌルドの倀を衚したす。元の GroupBy の各フィヌルドに察しお1぀の key-value ペアが返されたす。

StatisticsResults リストには、蚈算された統蚈情報のリストが含たれおいたす。

StatisticsResults オブゞェクトでは、各フィヌルドに察しおどの統蚈が芁求されたかに基づいお、適切なプロパティのみが入力されたす。

䟋えば、3぀のフィヌルドRegion、Population_1990、Population_2000を含む Country テヌブルを考えおみたしょう。4぀の地域、"North"、"South"、"East"、"West" がありたす。これらの地域のそれぞれに぀いお、Population_1990 ず Population_2000 フィヌルドの合蚈ず平均を蚈算したいず考えたす。この蚈算を行うために、TableStatisticsDescription を以䞋のように組み立おたす。

Table.CalculateStatistics() メ゜ッドは、以䞋のようなTableStatisticsResults オブゞェクトのリストを返したす。

次のコヌドサンプルは、䞊蚘の䟋ず䞀臎しおいたす。

// Calculate the Sum and Average of the Population_1990 and Population_2000 fields, grouped and ordered by Region
public void CalculateStatistics(FeatureClass countryFeatureClass)
{
  using (FeatureClassDefinition featureClassDefinition = countryFeatureClass.GetDefinition())
  {
    // Get fields
    Field regionField = featureClassDefinition.GetFields().First(x => x.Name.Equals("Region"));
    Field pop1990Field = featureClassDefinition.GetFields().First(x => x.Name.Equals("Population_1990"));
    Field pop2000Field = featureClassDefinition.GetFields().First(x => x.Name.Equals("Population_2000"));

    // Create StatisticsDescriptions
    StatisticsDescription pop1990StatisticsDescription = new StatisticsDescription(pop1990Field, new List<StatisticsFunction>() { StatisticsFunction.Sum, StatisticsFunction.Average });
    StatisticsDescription pop2000StatisticsDescription = new StatisticsDescription(pop2000Field, new List<StatisticsFunction>() { StatisticsFunction.Sum, StatisticsFunction.Average });

    // Create TableStatisticsDescription
    TableStatisticsDescription tableStatisticsDescription = new TableStatisticsDescription(new List<StatisticsDescription>() { pop1990StatisticsDescription, pop2000StatisticsDescription });
    tableStatisticsDescription.GroupBy = new List<Field>() { regionField };
    tableStatisticsDescription.OrderBy = new List<SortDescription>() { new SortDescription(regionField) };

    // Calculate Statistics
    IReadOnlyList<TableStatisticsResult> statisticsResults = countryFeatureClass.CalculateStatistics(tableStatisticsDescription);

    // Code to process results goes here...
  }
}

異なるク゚リ構文を䜿甚する堎合

デヌタのク゚リには、テヌブルたたはフィヌチャクラスの怜玢、QueryDef、QueryTable、ク゚リレむダヌ、結合 など、さたざたな構成がありたす。以䞋に、特定のシナリオにおける特定の構成芁玠の利点を瀺したす。

  • ゞオデヌタベヌスに登録されおいる1぀のテヌブルを察象ずした単玔なク゚リ: Table.Search や FeatureClass.Search が最も適しおいたす。
  • デヌタを取埗するためにゞオデヌタベヌス内で結合を行う単発のク゚リ: QueryDef は、ク゚リに䞀臎するデヌタを含む行カヌ゜ルを返すので、最も適しおいたす。
  • ゞオデヌタベヌス内の2぀以䞊のテヌブルを結合する同じク゚リを耇数回䜿甚する堎合: QueryTable の方が適しおいるかもしれたせん。QueryDef の評䟡を耇数回実行するのに比べお、パフォヌマンス䞊の利点があるためです。
  • ゞオデヌタベヌス内の1぀のテヌブルを含むク゚リの結果をマップに远加したり、ゞオプロセシングツヌルで結果を䜿甚したりする堎合: この目的には、QueryTable が最も適しおいたす。さらに、QueryTable はバヌゞョン管理されたデヌタ子孫バヌゞョンを䜿甚する堎合やアヌカむブされたデヌタ過去の時点のデヌタを䜿甚する堎合でも機胜したす。
  • ゞオデヌタベヌス内の2぀以䞊のテヌブルを結合するク゚リの結果をマップに远加したり、ゞオプロセシングツヌルで結果を䜿甚する: この堎合、QueryTable たたは結合が適しおいたす。どちらの構造も再垰的な結合が可胜であり結合テヌブルから結合を䜜成したり、ク゚リテヌブルからク゚リテヌブルを䜜成したり、バヌゞョン管理されたデヌタやアヌカむブされたデヌタを扱うこずができたす。
  • 単玔なク゚リや結合をデヌタベヌス内で実行する堎合ゞオデヌタベヌスのスキヌマがない堎合: ク゚リレむダヌが最も適した構成です。
  • 耇数のデヌタストアファむルゞオデヌタベヌスず SQL Server デヌタベヌスなどにたたがる結合を実行する堎合: 結合は、耇数のデヌタストアのデヌタを結合できる唯䞀の構成芁玠です。

バヌゞョニング

バヌゞョニングにより、耇数のナヌザヌが長時間のトランザクション環境で空間デヌタや衚圢匏デヌタを同時に線集するこずができたす。ナヌザヌは、デヌタの抜出やフィヌチャのロックを事前に行うこずなく、デヌタベヌスを盎接倉曎するこずができたす。

以䞋は、API が提䟛する5぀の䞻芁な機胜です。

  • ゞオデヌタベヌス内のすべおのバヌゞョンを、バヌゞョンのプロパティを含めお䞀芧衚瀺する
  • 特定のバヌゞョンぞの接続
  • 新しいバヌゞョンの䜜成
  • 異なるバヌゞョンのテヌブルずフィヌチャクラスの違いを䞀芧衚瀺する
  • リコンサむルずポスト

VersionManager オブゞェクトは、Geodatabase オブゞェクトからアクセスできたす。VersionManager は、珟圚接続されおいるバヌゞョン、履歎バヌゞョンのリスト、および珟圚接続されおいるナヌザヌが所有するすべおのパブリック バヌゞョン、保護されたバヌゞョン、およびプラむベヌト バヌゞョンのリストぞのアクセスを提䟛したす。VersionManager は、Geodatabase オブゞェクトの IsVersioningSupported メ゜ッドが true を返した堎合にのみアクセス可胜です。特定のゞオデヌタベヌスで䜿甚されおいるバヌゞョニングのタむプブランチたたはトラディショナルは、VersionManager.GetVersioningType() を呌び出すこずで確認できたす。

The VersionBase class represents either a Version or a HistoricalVersion in a Geodatabase. The VersionManager.GetCurrentVersionBaseType() returns whether the current geodatabase is connected to a Version or a HistoricalVersion.

返されるバヌゞョンは ArcGIS.Core.Data.Version オブゞェクトであり、以䞋ぞのアクセスが可胜です。

  • 名前、アクセス タむプ、説明などの属性
  • 芪バヌゞョン オブゞェクト
  • 子バヌゞョン オブゞェクトのリスト
  • 珟圚のナヌザがそのバヌゞョンの所有者であるかどうか

VersionManager から取埗した Version オブゞェクトで衚されるバヌゞョンに接続するには、Version オブゞェクトの Connect メ゜ッドを呌び出し、察応する Geodatabase オブゞェクトを返すこずで、Geodatabase のそのバヌゞョンのデヌタセットを取埗するこずができたす。

VersionManagerクラスの別のメ゜ッドである GetVersionNames() は、バヌゞョンそのものではなく、バヌゞョン名のリストを提䟛したす。適甚可胜なバヌゞョンのリストを衚瀺するこずが目的であれば、このルヌチンは高速で軜量です。この名前は、埌で VersionManager.GetVersion(string) を呌び出しお、Version を取埗するために䜿甚できたす。

新しいバヌゞョンを䜜成するには、適切なプロパティを持぀ VersionDescription を䜜成する必芁がありたす。このバヌゞョン説明は、VersionManager クラス の CreateVersion に枡されたす。これにより、デフォルトの子ずなる新しいバヌゞョンが䜜成されたす。トラディショナルなブランチではないバヌゞョニングを䜿甚しおいる堎合は、オヌバヌロヌドにより、他のバヌゞョンの子であるバヌゞョンを䜜成するこずができたす。

違いを芋぀けるには、以䞋のようなワヌクフロヌが考えられたす。

  1. Geodatabase で説明されおいるメ゜ッドのいずれかを䜿甚しお、Geodatabase オブゞェクトを取埗したす。
  2. VersionManager を䜿甚しお、察象ずなる他の Version オブゞェクトを芋぀けたす。
  3. Connect() を䜿甚しお、他のバヌゞョンの Geodatabase オブゞェクトを取埗したす。
  4. 䞡方の Geodatabase オブゞェクトから察応する Table/FeatureClasses を開きたす。
  5. Differences メ゜ッドを䜿甚しお、DifferenceCursor を取埗したす。

差分のタむプは、ArcGIS.Core.Data.DifferenceType 列挙䜓を䜿甚しお Differences メ゜ッドのパラメヌタずしお指定できたす。

フィヌチャ サヌビス ワヌクスペヌスでは、ArcGIS Enterprise 10.7 以降のブランチ バヌゞョニングのみがサポヌトされたす。゜ヌス テヌブルは子ブランチのもので、タヌゲット テヌブルは DEFAULT のものでなければなりたせん。差分タむプの DeleteNoChange は子バヌゞョンで行われた削陀を、Insert は子バヌゞョンで行われた挿入を、UpdateNoChange は子バヌゞョンで行われたすべおの曎新を返したす。その他の差分タむプはサポヌトされおいたせん。

using (Geodatabase geodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri("path\\to\\sde\\file\\sdefile.sde"))))
using (VersionManager versionManager = geodatabase.GetVersionManager())
{
  IReadOnlyList<Version> versionList = versionManager.GetVersions();
  IReadOnlyList<Version> childVersionList = null;

  try
  {
    IEnumerable<Version> publicVersions = versionList.Where(version => version.GetAccessType() == VersionAccessType.Public);

    // The default version will have a null Parent.
    Version defaultVersion = versionList.First(version => version.GetParent() == null);

    childVersionList = defaultVersion.GetChildren();
    Version qaVersion = childVersionList.First(version => version.GetName().Contains("QA"));

    using (Geodatabase qaVersionGeodatabase = qaVersion.Connect())
    {
      FeatureClass currentFeatureClass = geodatabase.OpenDataset<FeatureClass>("featureClassName");
      FeatureClass qaFeatureClass      = qaVersionGeodatabase.OpenDataset<FeatureClass>("featureClassName");

      DifferenceCursor differenceCursor = currentFeatureClass.Differences(qaFeatureClass, DifferenceType.DeleteNoChange);

      while (differenceCursor.MoveNext())
      {
        // The current row value refers to the row on the source Table/FeatureClass.
        // Thus, for DeleteNoChange differences, the row will be null.
        using (Row current = differenceCursor.Current)
        {
        }

        long objectID = differenceCursor.ObjectID;
	  
        // Do something with the object Id.
      }
    }  
  }
  finally
  {
    if (versionList != null)
    {
      foreach (Version version in versionList)
      {
        version.Dispose();
      }
    }

    if (childVersionList != null)
    {
      foreach (Version version in childVersionList)
      {
        version.Dispose();
      }
    }
  }
}

バヌゞョンのリコンサむルずポスティングは、Version クラスの Reconcile ず Post ずいう二぀の異なるメ゜ッドで実珟されたす。

Post メ゜ッドは、匕数ずしお PostOptions オブゞェクトを䜿甚したす。ポスト オプションオブゞェクトは、郚分ポストのために遞択したフィヌチャのリスト、サヌビス同期タむプ (Post を同期しお実行するかどうか)、タヌゲットバヌゞョン (デフォルトバヌゞョンを指定する堎合は null を䜿甚したす) を指定したす。

Reconcile メ゜ッドは、匕数ずしお ReconcileOptions オブゞェクトを䜿甚したす。リコンサむル オプション オブゞェクトは、競合の解決方法 (競合が芋぀かったら䞭断するか継続するか)、競合の怜出タむプ (行単䜍たたは列単䜍)、タヌゲットバヌゞョン (デフォルトバヌゞョンを指定する堎合は null を䜿甚) を指定したす。

同じ線集セッションで、リコンサむルの盎埌にバヌゞョンをポストするには、オヌバヌロヌド Reconcile(ReconcileOptions, PostOptions) を䜿甚する必芁がありたす。

ノヌト: トラディショナル バヌゞョニングはスタンドアロン ポスト、Version.Post(PostOptions) をサポヌトしないので、ポストには Version.Reconcile(ReconcileOptions, PostOptions) を䜿甚しなければなりたせん。ブランチ バヌゞョニングはスタンドアロン ポスト Version.Post(PostOptions) をサポヌトしたすが、Version.Reconcile() をあらかじめ呌び出しおおく必芁がありたす。

トラディショナルのバヌゞョニングを䜿甚する堎合、競合解決のタむプを蚭定するこずで、タヌゲットバヌゞョンず線集バヌゞョンのどちらを優先しお競合を解決するかを指定するこずもできたす。

ブランチ バヌゞョンのオヌナヌを倉曎するには、Version.ChangeOwner ルヌチンを呌び出したす。

リコンサむルを行う際、線集䞭のバヌゞョンはタヌゲット バヌゞョンからの倉曎で曎新されたす。タヌゲット バヌゞョンに倉曎をマヌゞするこずはありたせん。リコンサむル埌、コンフリクトを確認した埌、タヌゲット バヌゞョンに倉曎をポストするこずでマヌゞプロセスが完了したす。

パヌシャル ポスト

パヌシャル ポストするこずで、開発者はバヌゞョンで行われた倉曎のサブセットをポストするこずができたす。䜿甚䟋ずしおは、電力䌚瀟が新しい分譲䜏宅の蚭備を蚭蚈するためにバヌゞョンを䜿甚する堎合がありたす。プロセスのある時点で、新しい䜏宅の1ブロックは完成しおいるが、残りの分譲地は未建蚭のたたです。郚分的にポストするこずで、ナヌザは完成した䜜業をポストする䞀方で、ただ建蚭されおいないフィヌチャをバヌゞョンに残し、埌でポストするこずができたす。

どのフィヌチャをポストするかを指定するには、PostOptions.PartialPostSelections プロパティを䜿いたす。このプロパティは、ObjectID ベヌスの遞択リストを保持したす。曎新や挿入の堎合、これらの遞択項目の䜜成は比范的簡単です。䟋えば、フィヌチャクラスの ConstructedStatus フィヌルドを䜿甚しお、フィヌチャがポストできる状態であるこずを瀺すこずができたす。

QueryFilter constructedFilter = new QueryFilter()
{
  WhereClause = "ConstructedStatus = 'True'"
};
Selection constructedSupportStructures = supportStructureFeatureClass.Select(constructedFilter, SelectionType.ObjectID, SelectionOption.Normal);

削陀されたフィヌチャのセットを取埗するク゚リを発行するこずができないため、ポストしたいフィヌチャの削陀を指定するのは少し難しいです。代わりに、手動で ObjectID のリストを䜜成する必芁がありたすこのリストの䜜成はもちろん開発者次第ですが、属性ルヌルを䜿甚しおフィヌチャの削陀を蚘録するずいう実装案もありたす。このリストを䜜成したら、次のようにしお Selection を䜜成したす。

Selection deletedSupportStructures = supportStructureFeatureClass.Select(null, SelectionType.ObjectID, SelectionOption.Empty);
deletedSupportStructures.Add(deletedSupportStructureObjectIDs);

どちらの堎合も、遞択項目にそのバヌゞョンで倉曎されおいないフィヌチャが含たれおいるず、パヌシャル ポストは倱敗したす。䞊蚘のセクションで説明したように、倉曎されたフィヌチャを確認するために Table.Differences を䜿甚するこずができたす。

パヌシャル ポストは、ArcGIS Enterprise 10.9 以降のブランチ バヌゞョニングでサポヌトされおおり、パヌセル ファブリック、トポロゞヌでは珟圚サポヌトされおいたせん。

rcGIS Enterprise 11.3 たたは Pro SDK 3.3 以降、ナヌティリティ ネットワヌクは、パヌシャル ポストをサポヌトしおいたす。

コンフリクト

リコンサむル操䜜の間、子バヌゞョンで行われた倉曎は、マヌゞしたいタヌゲット バヌゞョンず比范されたす。コンフリクトが存圚する堎合、Version.GetConflicts() メ゜ッドはタヌゲット バヌゞョンずの Conflict のリストを返したす。Conflict クラスには、コンフリクト タむプや前埌の行の倀など、行の ObjectId による 2 ぀のバヌゞョンの違いに関する情報が含たれおいたす。

珟圚のずころ、Version.GetConflicts() メ゜ッドはブランチ バヌゞョンのデヌタ ストアからの競合をサポヌトしおいたす。

アヌカむブず履歎管理

履歎管理は、ゞオデヌタベヌス内のすべおのデヌタたたは䞀郚のデヌタに加えられた倉曎を蚘録し、アクセスするための機胜を提䟛したす。履歎管理は、時間の経過に䌎うデヌタの倉化を捉え、管理し、分析するためのメカニズムです。

組織は、以䞋のような䞀般的な質問に答えるために、デヌタに加えられた倉曎を保存する必芁がありたす。

  • ある時点での特定の属性の倀は䜕だったのか
  • 特定のフィヌチャや行は時間の経過ずずもにどのように倉化したのか
  • ある空間領域は時間ずずもにどのように倉化したのか

履歎管理は、デヌタの倉化を保存するこずで、このような質問ぞの回答を支揎したす。履歎管理は、履歎管理が有効になった瞬間から無効になるたで、デヌタセットの倉曎を維持するずいうこずを理解するこずが重芁です。

デヌタセット䞊の履歎管理の有効化ず無効化は、Python たたはゞオプロセシングツヌルによっお行われたす。ゞオデヌタベヌス API の2぀のルヌチンが履歎管理ぞのアクセスを提䟛したす。

  • Table.IsArchiveEnabled() は、テヌブルで履歎管理が有効になっおいる堎合に true を返したす。
  • 有効な堎合は、Table.GetArchiveTable() を䜿甚しお実際の履歎管理テヌブルを返すこずができたす。

䞊蚘のように個々の履歎管理テヌブルを衚瀺するこずもできたすが、VersionManager クラスのルヌチンを䜿甚しお履歎バヌゞョンに接続する方が簡単な堎合が倚いです。履歎バヌゞョンは、ゞオデヌタベヌス内のすべおの履歎管理されたデヌタセットが特定の時間にどのような状態であったかを瀺す読み取り専甚の衚珟を提䟛したす。履歎バヌゞョンは、日付ず時刻、たたは名前付きの履歎マヌカヌを䜿甚しおアクセスできたす。履歎マヌカヌずは、名前が付けられた特定の日時のこずです。たずえば、「Twin Pines Mall safety incident」ずいう名前の履歎マヌカヌは、1985幎10月26日の午前1時15分ずいう日時を参照しおいたす。履歎マヌカヌの䜜成には、CreateHistoricalVersion メ゜ッドを䜿甚したす。

HistoricalVersion historicalVersion = versionManager.CreateHistoricalVersion(new HistoricalVersionDescription("Historical marker snapshot at the moment", DateTime.Now));

タむムスタンプは各履歎バヌゞョンで䞀意でなければなりたせん。履歎バヌゞョンは、タむムスタンプをキヌずしおキャッシュされたす。

GetCurrentHistoricalVersion メ゜ッドは、珟圚遞択されおいる履歎バヌゞョンを返したす。GetHistoricalVersion は、日時たたは履歎マヌカヌ名のいずれかから履歎バヌゞョンオブゞェクトを取埗したす。ゞオデヌタベヌス䞊のすべおの履歎マヌカヌのリストを取埗するには、GetHistoricalVersions メ゜ッドを䜿甚できたす。HistoricalVersion](https://pro.arcgis.com/en/pro-app/latest/sdk/api-reference/topic7499.html) オブゞェクトを取埗したら、[Connect` メ゜ッドはその特定の時点のゞオデヌタベヌス接続を返したす。

using (Geodatabase geodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri("path\\to\\sde\\file\\sdefile.sde"))))
using (VersionManager versionManager = geodatabase.GetVersionManager())
{
  if (versionManager.GetCurrentVersionBaseType() == VersionBaseType.HistoricalVersion)
  {
    HistoricalVersion historicalVersion = versionManager.GetCurrentHistoricalVersion();
    using (Geodatabase historicalGeodatabase = historicalVersion.Connect())
    {
      //
    }
  }
}

リレヌションシップクラスの操䜜

RelationshipClass では以䞋の操䜜を行うこずができたす。

  • リレヌションシップの䜜成 - リレヌションシップを䜜成するには、RelationshipClass オブゞェクトの CreateRelationship メ゜ッドに、関連元クラスの行ず関連先クラスの行ぞの参照を枡す必芁がありたす。CreateRelationship が期埅通りに機胜するためには、関連元クラスの䞻キヌの倀および垰属するリレヌションシップクラスの関連先クラスの䞻キヌの倀が蚭定されおいる必芁があるこずに泚意しおください。䟋ずしおは、リレヌションシップの䜜成 を参照しおください。属性付きのリレヌションシップクラスの堎合、第3匕数に RowBuffer を枡しお属性を远加するこずができたすこれはオプションのパラメヌタです。RowBuffer は、 AttributedRelationshipClass オブゞェクトの CreateRowBuffer を呌び出すこずで取埗できたす。

  • リレヌションシップの削陀 - リレヌションシップの䜜成ず同様に、リレヌションシップを削陀する際には、関連元の行ず関連先の行ぞの参照を RelationshipClass の DeleteRelationship メ゜ッドに枡す必芁がありたす。䟋は、リレヌションシップの削陀 を参照しおください。

  • 指定された RelationshipClass によっお関連付けられた行の怜玢 - 関連元のクラスたたは関連先のクラスのオブゞェクト ID のリストが䞎えられるず、GetRowsRelatedToOriginRowsたたは GetRowsRelatedToDestinationRows はそれぞれ、枡されたオブゞェクト ID に関連する察応する行オブゞェクトを提䟛したす。䟋は、RelationshipClass によっお関連付けられた行の取埗 を参照しおください。

添付ファむル

添付ファむルは、個々のフィヌチャにファむルを远加するためのもので、画像、PDF、テキスト文曞など、さたざたな皮類のファむルを远加できたす。䟋えば、建物を衚すフィヌチャがある堎合、添付ファむルを䜿っお、建物を様々な角床から撮圱した耇数の写真や、建物の暩利曞や皎務情報を含む PDF ファむルを远加するこずができたす。

添付ファむルを远加するには、たず、フィヌチャクラスたたはテヌブルの添付ファむルを有効にする必芁がありたす。添付ファむルを有効にするず、添付ファむルを栌玍するための新しいテヌブルが䜜成され、フィヌチャず添付ファむルを関連付けるための新しいリレヌションシップクラスが䜜成されたす。

ArcGIS.Core.Data API は DML のみの API であるため、プログラムで添付ファむルを有効にするには、Geoprocessing API を䜿甚する方法がありたす。

IReadOnlyList<string> parameters = Geoprocessing.MakeValueArray("path\\to\\sde\\connection.sde\\FeatureClassName");
IGPResult gpResult = await Geoprocessing.ExecuteToolAsync("management.EnableAttachments", parameters);

テヌブルやフィヌチャクラスが添付ファむルを有効にしおいるかどうかの刀断は、Table や FeatureClass オブゞェクトの IsAttachmentEnabled プロパティを䜿っお行うこずができたす。

添付ファむルの远加

添付ファむルを远加するには、Attachment constructor を䜿甚しお新しい添付ファむル オブゞェクトを䜜成したす。Name、ContentType、Data は新しい添付ファむルのメ゜ッドを䜿っお取埗、蚭定できたす。すべおの情報が蚭定されたら、新しく䜜成されたAttachment オブゞェクトを䜿っお、Row の AddAttachment メ゜ッドを呌び出し、添付ファむルを远加したす。添付ファむルの远加の䟋は、アタッチメントの远加 に蚘茉されおいたす。

添付ファむルにデヌタを蚭定するには、ディスク䞊のファむルからメモリストリヌムを䜜成する必芁がありたす。この方法の1぀は、ファむルからの MemoryStream の取埗 に蚘茉されおいたす。

添付ファむルぞのアクセス

添付ファむルを取埗するには、Row の GetAttachments メ゜ッドを䜿甚できたす。匕数が枡されおいない堎合は、その行のすべおの添付ファむルが返されたす。第1匕数に添付ファむルの ID のリストが枡された堎合は、ID に䞀臎する添付ファむルが返されたす。2番目の匕数は Boolean で、添付ファむルのデヌタを返すかどうかを指定するのに䜿われたす。添付ファむルぞのアクセスの䟋に぀いおは、添付ファむルの曎新 を参照しおください。

添付ファむルの曎新

行やフィヌチャから添付ファむルを取埗した埌、添付ファむルのゲッタヌずセッタヌを䜿っお、Name、Content Type、Data を蚭定したす。そしお、曎新された添付ファむル オブゞェクトを䜿っお、Row や Feature の UpdateAttachment を呌び出すこずができたす。添付ファむルぞのアクセスの䟋に぀いおは、添付ファむルの曎新 を参照しおください。

添付ファむルの削陀

添付ファむルを削陀するには、たず行から添付ファむルを取埗し、Row たたはFeature に察しお、削陀したい添付ファむルの ID のリストを枡しおDeleteAttachments を䜿甚する必芁がありたす。戻り倀は、察応する添付ファむルの削陀に倱敗したずきにスロヌされる䟋倖に察する添付ファむルの ID のディクショナリです。ディクショナリが空の堎合、芁求された添付ファむルは正垞に削陀されたこずになりたす。DeleteAttachments に匕数が枡されない堎合、その行のすべおの添付ファむルが削陀されたす。添付ファむルの削陀の䟋に぀いおは、添付ファむルの削陀を参照しおください。

条件倀

条件倀はあるフィヌルドの倀が他のフィヌルドの倀に䟝存するこずを可胜にするデヌタ蚭蚈機胜です。
ドメむンを持぀フィヌルドは、゚ディタヌに有効な倀のリストから遞択するこずを制限したすが、条件倀では、さらに䞀歩進んで、他のフィヌルドに基づいお倀のリストを制限するこずができたす。いく぀かのフィヌルドはフィヌルド グルヌプでリンクされ、条件倀の組み合わせはフィヌルド グルヌプ内で定矩されたす。線集時には、ドメむン倀のリスト党䜓が衚瀺されるのではなく、条件倀のみが衚瀺されたす。
このように、条件倀は有効な入力の数を枛らすために远加の制玄を適甚するこずによっお、デヌタの敎合性を匷化するのに圹立ちたす。

Contingencyクラスの GetContingentValues() メ゜ッドを䜿甚するこずで条件倀にアクセスするこずができたす。このメ゜ッドは、FieldGroup 名による ContingentValue の蟞曞を返したす。
ContingentValue は、FieldGroup に属するフィヌルドの可胜な倀を定矩する基本クラスです。
条件倀は次のいずれかです。

  • ContingentCodedValue — コヌド倀ドメむンの倀
  • ContingentRangeValue — 最倧および最小範囲ドメむン倀の定矩
  • ContingentAnyValue — フィヌルドのドメむンに含たれる任意の倀が有効であるずみなされるこずを瀺すnullも同様
  • ContingentNullValue — null 倀がフィヌルドに察しお有効であるこずを瀺す

FieldGroup には、条件倀をサポヌトするフィヌルド名ずその制限が含たれたす。

TableDefinition たたは FeatureClassDefinition クラスの GetContingencies() メ゜ッドは、デヌタセットに適甚された Contingency のリストを返したす。

using (TableDefinition tableDefinition = table.GetDefinition())
{
  IReadOnlyList<Contingency> contingencies = tableDefinition.GetContingencies();
  foreach (Contingency contingency in contingencies)
  {
    // Field group 
    FieldGroup filedGroup = contingency.FieldGroup;
    string fieldGroupName = filedGroup.Name;
    IReadOnlyList<string> fieldInFieldGroup = filedGroup.FieldNames;
    bool isEditRestriction = filedGroup.IsRestrictive;

    int contingencyId = contingency.ID;
    Subtype subtype = contingency.Subtype;
    bool isContingencyRetired = contingency.IsRetired;

    // Contingent values 
    IReadOnlyDictionary<string, ContingentValue> contingentValuesByFieldName = contingency.GetContingentValues();
    foreach (KeyValuePair<string, ContingentValue> contingentValueKeyValuePair in contingentValuesByFieldName)
    {
      string attributeFieldName = contingentValueKeyValuePair.Key;

      // Contingent value type associated with the attribute field
      ContingentValue contingentValue = contingentValueKeyValuePair.Value;

      switch (contingentValue)
      {
        case ContingentCodedValue contingentCodedValue:
          string codedValueDomainName = contingentCodedValue.Name;
          object codedValueDomainValue = contingentCodedValue.CodedValue;
          break;
        case ContingentRangeValue contingentRangeValue:
          object rangeDomainMaxValue = contingentRangeValue.Max;
          object rangeDomainMinValue = contingentRangeValue.Min;
          break;
        case ContingentAnyValue contingentAnyValue:
          // Any value type
          break;
        case ContingentNullValue contingentNullValue:
          // Null value
          break;
      }
    }
  }
}

さらに、Table.GetContingentValues メ゜ッドは、䞎えられた RowBuffer ず属性フィヌルドの朜圚的な条件倀のリストを取埗したす。

using (RowBuffer rowBuffer = parcels.CreateRowBuffer())
{
  IReadOnlyDictionary<FieldGroup, IReadOnlyList<ContingentValue>> possibleZonings = parcels.GetContingentValues(rowBuffer, "Zone");
  IEnumerable<FieldGroup> possibleFieldGroups = possibleZonings.Keys;
  foreach (FieldGroup possibleFieldGroup in possibleFieldGroups)
  {
    IReadOnlyList<ContingentValue> possibleZoningValues = possibleZonings[possibleFieldGroup];
  }
}

[Table.ValidateContingencies] メ゜ッドは、行を条件倀に察しお怜蚌し、ContingencyValidationResult を返したす。この結果には、䞀臎した (有効な) 条件および反した (無効な) 条件に関する情報が含たれたす。

using (RowBuffer rowBuffer = parcels.CreateRowBuffer())
{
  // Insert values in a row buffer
  rowBuffer["Zone"] = "Business";
  rowBuffer["TaxCode"] = "TaxB";

  // Validate contingency values of the parcels' row 
  ContingencyValidationResult contingencyValidationResult = parcels.ValidateContingencies(rowBuffer);

  // Valid contingencies
  IReadOnlyList<Contingency> matchedContingencies = contingencyValidationResult.Matches;
  if (matchedContingencies.Count > 0)
  {
    // Create a row with valid contingency values
    parcels.CreateRow(rowBuffer);
  }

  // Invalid contingencies
  IReadOnlyList<ContingencyViolation> violatedContingencies = contingencyValidationResult.Violations;
  foreach (ContingencyViolation contingencyViolation in violatedContingencies)
  {
    ContingencyViolationType violationType = contingencyViolation.Type;
    Contingency violatedContingency = contingencyViolation.Contingency;
  }
}

Contingency は廃止するこずができたす。廃止されるず、既存のデヌタには残りたすが、線集には利甚できなくなりたす。

属性ルヌル

属性ルヌル は、ゞオデヌタベヌスのデヌタセットの線集䜜業を改善し、デヌタの敎合性を高めるものです。属性ルヌルは、属性を自動的に入力したり、線集操䜜䞭に無効な線集を制限したり、既存のフィヌチャの敎合チェックを行うために䜿甚できる、ナヌザ定矩のルヌルです。ゞオデヌタベヌスは、属性を自動的に入力する蚈算ルヌル、デヌタの品質を保蚌する制玄ルヌル、既存フィヌチャを確認する怜蚌ルヌルをサポヌトしおいたす。

ゞオデヌタベヌスが属性ルヌルをサポヌトしおいるかどうかを調べるには、Geodatabase クラスの IsAttributeRuleSupported() メ゜ッドを䜿甚したす。

属性ルヌルの定矩

属性ルヌルはゞオデヌタベヌスのフィヌチャクラスたたはテヌブルのプロパティずしお䜜成されたす。そのため、デヌタセットの属性ルヌルは TableDefinition の GetAttributeRules メ゜ッドを䜿甚しお取埗できたす。これは、AttributeRuleDefinition オブゞェクトの読み取り専甚リストを返したす。デヌタセットのすべおの属性ルヌルを取埗するこずもできたすし、特定のルヌル タむプ蚈算、制玄、敎合チェックの属性ルヌルを取埗するこずもできたす。属性ルヌルを取埗したら、そのプロパティを調べるこずができたす。

属性ルヌルには、GetNameメ゜ッドずGetDescriptionメ゜ッドを䜿甚しお取埗した名前ず説明がありたす。GetAttributeRuleTypeを䜿甚しお、AttributeRuleTypeを決定したす。ルヌルの詳现は、GetScriptExpressionで取埗できるスクリプト匏で定矩され、GetTriggeringEventsを調べるこずで、どのむベントがルヌルをトリガヌするかを刀断できたす。ルヌルが䜜成された時期によっおは、ルヌルの実行たたは評䟡に必芁な Arcade の最小バヌゞョンを確認するこずが圹立ちたす。 この情報を取埗するには、GetMinimumArcadeVersion を䜿甚したす。

属性ルヌルの䜜成時に、゚ラヌ番号、゚ラヌメッセヌゞ、重倧床を定矩するこずができたす。 GetErrorNumber、GetErrorMessage、GetSeverity メ゜ッドを䜿甚しお、これらを取埗するこずができたす。評䟡に関するステヌタス プロパティは、GetIsBatch、GetIsEnabled、GetExcludeFromClientEvaluation を䜿甚しお取埗できたす。

Pro SDK は、敎合チェック ルヌルずバッチ蚈算ルヌルを実行するルヌチンを提䟛したす。これらの属性ルヌルを実行するためのクラスを以䞋の図に瀺したす。詳现に぀いおは、この埌のドキュメントのセクションで説明したす。

属性ルヌルの管理

Pro SDK で属性ルヌルを扱うための䞭心ずなるクラスは AttributeRuleManager クラスです。 このオブゞェクトは、Geodatabase クラスのGetAttributeRuleManager() メ゜ッドを呌び出すこずで取埗できたす。 ゞオデヌタベヌスが属性ルヌルをサポヌトしおいるかどうかは、たず䞊述のIsAttributeRuleSupported() メ゜ッドをチェックする必芁がありたす。

属性ルヌルにはいく぀かの皮類がありたす。 即時蚈算ず制玄ルヌルは、耇数のゞオデヌタベヌスタむプでサポヌトされおおり、行の䜜成、曎新、削陀の際に自動的に発行されたす。

䞀郚のゞオデヌタベヌスでは、バッチ蚈算および怜蚌ルヌルがサポヌトされおいたす。これらのルヌルは、AttributeRuleManager クラスの EvaluateInEditOperation() 拡匵メ゜ッド を呌び出すこずで実行されたす。デヌタベヌスが評䟡をサポヌトしおいるかどうかを刀断するためには、事前に IsEvaluationSupported() メ゜ッドを呌び出す必芁がありたす。

属性ルヌルの評䟡

属性ルヌルを実行するには、EvaluateInEditOperation() メ゜ッドを䜿甚したす。 EvaluateInEditOperation() の呌び出しに枡されるパラメヌタは、AttributeRuleEvaluationDescription クラス によっお指定されたす。 サポヌトされおいる組み合わせは、限られた数のコンストラクタを䜿甚しお適甚されたす。

プロパティ 説明
AttributeRuleType AttributeRuleType パラメヌタは、バッチ蚈算ルヌル、怜蚌ルヌル、たたはその䞡方を実行するために䜿甚できたす。
Extent ゚クステント パラメヌタは、どのフィヌチャを評䟡するかを制埡するために䜿甚されたす。芋぀からない堎合は、゚クステント党䜓が評䟡されたす。
Selections 評䟡する機胜を指定する、1぀以䞊の遞択項目のリストです。既定倀は空のリストです。
VersionEvaluationScope VersionEvaluationScope パラメヌタでは、バヌゞョン内の党おの行を評䟡するか、あるいはそのバヌゞョン内で倉曎された行のみを評䟡するかを指定したす。

EvaluateInEditOperation() メ゜ッドは、AttributeRuleEvaluationResult オブゞェクトを返し、怜出された゚ラヌの数を刀別するために䜿甚されたす。

非同期サヌビスの䜿甚

フィヌチャ サヌビスで呌び出されるず、EvaluateInEditOperation() メ゜ッドはREST ゚ンドポむントぞの呌び出しを行い、同期しお実行されたす。このルヌチンは凊理のオヌバヌヘッドが少ないです。残念ながら、凊理に時間がかかりすぎるずサヌバヌのタむムアりトの圱響を受けやすくなりたす。この問題を回避するために、Evaluate REST ゚ンドポむントはこのルヌチンの非同期バヌゞョンを提䟛しおいたす。凊理は、怜蚌サヌバヌからゞオプロセシング サヌバヌにオフロヌドされたす。これによりパフォヌマンスが䜎䞋したすが、ゞオプロセシング サヌバは長時間実行されるゞョブを凊理するように蚭蚈されおおり、タむムアりトの圱響を受けたせん。このサヌビスでは、操䜜が完了するたで ArcGIS Pro がサヌビスをポヌリングしたす。倚くの評䟡コヌルは倚数のフィヌチャに察しお実行されるため、非同期バヌゞョンがデフォルトずなっおいたす。

AttributeRuleEvaluationDescription の ServiceSynchronizationType パラメヌタは、どのバヌゞョンのサヌビスを呌び出すかを制埡できたす。これには2぀の倀を持぀ServiceSynchronizationType 列挙型を䜿甚したす。Synchronous ず Asynchronous です。ここで重芁なのは、C# 開発者の芖点から芋るず、このパラメヌタに関わらず、このルヌチンは 同期 C# メ゜ッドであるずいうこずです。API の他のメ゜ッドず同様に、操䜜が完了するたで珟圚のスレッドをブロックしたす。

CoreHost アプリケヌションを曞く堎合は、AttributeRuleManager クラスの Evaluate() ベヌスメ゜ッドを䜿甚しおください。このルヌチンは独自のトランザクション管理を行うためGeodatabase.ApplyEdits() で䜜成された線集操䜜の内郚では発行できたせん。

属性ルヌル ゚ラヌ

属性ルヌルの怜蚌に倱敗するず、゚ラヌが䞀連の゚ラヌテヌブルに曞き蟌たれたす。同様に、バッチ蚈算ルヌルの実行で問題が発生した堎合も、これらのテヌブルに゚ラヌが曞き蟌たれたす。䜿甚される゚ラヌ テヌブルは、゜ヌスのフィヌチャクラスたたはテヌブルのゞオメトリに応じお4぀ありたす。これらの゚ラヌテヌブルは Pro のナヌザヌむンタヌフェヌスで芋るこずができ、Pro SDK でも AttributeRuleManager の GetErrorTable() メ゜ッドでアクセスするこずができたす。これらのテヌブルは取埗埌、他のゞオデヌタベヌスのテヌブルず同様に読み蟌んだりク゚リするこずができたす。これらのテヌブルの各行ぱラヌを衚しおいたす。

CreateAttributeRuleError() ルヌチンは、゚ラヌテヌブルの1぀から行を取り、それを䜿っお AttributeRuleError オブゞェクトを生成したす。このオブゞェクトはテヌブルをよりナヌザヌフレンドリヌに衚瀺したす。機胜的に重芁なのは、このオブゞェクトを䜿っお、゚ラヌの原因ずなったフィヌチャを取り出すこずができるこずです。OriginClass プロパティはテヌブルたたはフィヌチャのクラス名を返したす。これは Geodatabase.OpenDataset() を䜿っおテヌブルを開くのに䜿甚できたす。 AttributeRuleError クラスの OriginGlobalID たたは OriginObjectID プロパティを䜿甚するず、゚ラヌの原因ずなった特定の行を取埗するこずができたす。

属性ルヌルの゚ラヌテヌブルは、ほずんどの堎合、読み取り専甚です。 怜蚌に倱敗したフィヌチャに察しお EvaluateInEditOperation() を実行するこずによっおのみ、新しい行を䜜成するこずができたす。行を削陀するには、゚ラヌの原因ずなった根本的な問題を解決し、EvaluateInEditOperation() を再床実行する必芁がありたす。これらのテヌブルにできる唯䞀の曎新は、゚ラヌを 䟋倖 ずしおマヌクするこずです。これは、その゚ラヌが䟋倖的なケヌスであり、゚ラヌずしお扱うべきではないこずをシステムに瀺すために䜿甚されたす。゚ラヌを䟋倖ずしおマヌクするには、AttributeRuleError クラスの IsException プロパティを蚭定しお、そのリストを AttributeRuleManager の UpdateErrorsInEditOperation() ゚クステンションメ゜ッドに枡したす。

CoreHost アプリケヌションを曞く堎合は、AttributeRuleManager クラスの UpdateErrors() ベヌスメ゜ッドを䜿甚しおください。このルヌチンは独自のトランザクション管理を行うので、Geodatabase.ApplyEdits() で䜜成された線集操䜜の䞭では発行できたせん。

デヌタストアの線集

ArcGIS.Core.Data API は、耇数の線集を1぀のトランザクションずしお実行するこずをサポヌトしおいたすロングトランザクションずも呌ばれたす。トランザクションでの線集には、以䞋の2぀のモヌドがありたす。

  • アドむン モヌドでの線集
  • スタンドアロン モヌドでの線集

アドむン モヌドでの線集

これは、ArcGIS Pro のアドむンをオヌサリングする際にトランザクションで線集を実行する通垞のモヌドです。EditOperation クラスは、ArcGIS Pro でのトランザクション内の線集のサポヌトを提䟛したす。詳现に぀いおは、ArcGIS Pro ProConcepts Editing ドキュメントの 高床な線集 を参照しおください。

スタンドアロン モヌドでの線集

ArcGIS.Core API が ArcGIS.CoreHost API サポヌトを䜿甚しお ArcGIS Pro の倖郚コン゜ヌル アプリケヌションなどで䜿甚される堎合、これをスタンドアロン モヌドず呌びたす。このモヌドでは、トランザクションで線集を実行する堎合、ArcGIS.Core.Data.Geodatabase.ApplyEdits メ゜ッドを䜿甚する必芁がありたす。

geodatabase.ApplyEdits(() =>
{
  using (RowBuffer rowBuffer = citiesTable.CreateRowBuffer())
  {
    rowBuffer["State"] = "Colorado";

    rowBuffer["Name"] = "Fort Collins";
    rowBuffer["Population"] = 167830;
    citiesTable.CreateRow(rowBuffer).Dispose();

    rowBuffer["Name"] = "Denver";
    rowBuffer["Population"] = 727211;
    citiesTable.CreateRow(rowBuffer).Dispose();

    // etc.
  }
});

䞊の䟋で瀺したように、ApplyEdits メ゜ッドは Action デリゲヌトを受け取りたす。Action デリゲヌトは、トランザクション内で実行しなければならないすべおの線集をカプセル化したす。トランザクションは、Action デリゲヌトの実行䞭にスロヌされる䟋倖がない堎合にのみコミットされたす。実行䞭に凊理されない䟋倖が発生した堎合は、それたでに行われたすべおの線集がロヌルバックされ、トランザクションは䞭止されたす。

Enterprise ゞオデヌタベヌスは、デフォルトでバヌゞョン管理された線集セッションを䜿甚するように自動的に蚭定されたす。バヌゞョン管理されおいないデヌタを線集したい堎合は、バヌゞョン管理されおいない線集セッションを䜿甚するこずを瀺す远加のBoolean パラメヌタを持぀ ApplyEdits オヌバヌロヌドを䜿甚する必芁がありたす。

// The non-versioned edit of States feature class that participates in a composite relationship 
geodatabase.ApplyEdits(() =>
{
  using (Table table = geodatabase.OpenDataset<FeatureClass>("States"))
  {
    using (RowCursor cursor = table.Search(queryFilter, false))
    {
      if (cursor.MoveNext())
      {
        using (Feature feature = (Feature)cursor.Current)
        {
          feature["Name"] = "CA";
          feature.Store();
        }
      }
    }
  }
}, false);

1぀の線集セッションで、バヌゞョン管理されたデヌタずバヌゞョン管理されおいないデヌタの䞡方に察する線集を混圚させるこずは掚奚されたせん。

EditOperation.ExecuteAsync ず Geodatabase.ApplyEdits の動䜜の違いを以䞋に瀺したす。

  • ApplyEdits メ゜ッドは、単䞀のゞオデヌタベヌス内の線集にのみ䜿甚できたすが、EditOperation の ExecuteAsync は、耇数のゞオデヌタベヌスぞの線集のむンタヌリヌブを可胜にしたす。
  • ExecuteAsync ずは異なり、ApplyEdits は Undo/Redo 機胜をサポヌトしたせん。
  • ExecuteAsync は、線集セッションを終了するために SaveEdits たたは DiscardEdits 呌び出しを必芁ずしたすが、ApplyEdits は、線集セッションず線集操䜜の䞡方を暗黙的に終了したす。
  • ApplyEdits は、マップの曎新をサポヌトしたせん。

ApplyEdits は、ArcGIS Pro の倖郚での線集を目的ずしおいるこずに泚意しおください。アドむンでのすべおの線集には、EditOperation を䜿甚する必芁がありたす。

挿入カヌ゜ルによる線集

スタンドアロンの CoreHost アプリケヌションで倧量の行を挿入する堎合は、InsertCursor クラスを䜿甚しおください。これは、䞊蚘の手法ず同等以䞊のパフォヌマンスが保蚌されおいたす。䜿甚するフィヌチャクラスやテヌブルの皮類によっおは、䜕倍も速くなる可胜性がありたす。速くならないテヌブルの䟋ずしおは、アノテヌションやディメンションのフィヌチャクラス、コンポゞット リレヌションシップクラスに参加するテヌブル、添付ファむルのあるテヌブルなどがありたす。

geodatabase.ApplyEdits(() =>
{
  using (InsertCursor insertCursor = citiesTable.CreateInsertCursor())
  using (RowBuffer rowBuffer = citiesTable.CreateRowBuffer())
  {
    rowBuffer["State"] = "Colorado";

    rowBuffer["Name"] = "Fort Collins";
    rowBuffer["Population"] = 167830;
    insertCursor.Insert(rowBuffer);

    rowBuffer["Name"] = "Denver";
    rowBuffer["Population"] = 727211;
    insertCursor.Insert(rowBuffer);

    // Insert more rows here
    // A more realistic example would be reading source data from a file

    insertCursor.Flush();
  }
});

曎新カヌ゜ルによる線集

UpdateCursor クラスは、行を高速に曎新するように蚭蚈されおいたす。少なくずも、Table.CreateRow() メ゜ッドず Row.Store() メ゜ッドを繰り返し呌び出すのず同等以䞊のパフォヌマンスが保蚌されおいたす。倚くの堎合、そのパフォヌマンスは倧幅に向䞊するでしょう。

using (UpdateCursor updateCursor = citiesTable.CreateUpdateCursor(queryFilter, false))
{
  if (updateCursor.MoveNext())
  {
    using (Row row = updateCursor.Current)
    {
      int stateIndex = row.FindField("State");
      row[stateIndex] = "Colorado";

      updateCursor.Update(row);
    }
  }
}

ArcGIS Pro アドむンで䜿甚する堎合、曎新カヌ゜ルは線集操䜜のコヌルバック内で䜿甚する必芁がありたす。スタンドアロンの CoreHost アプリケヌションでは、曎新カヌ゜ルの䜿甚は Geodatabase.ApplyEdits の呌び出し内に囲む必芁がありたす。

その他のトピック

SQL の実行

デヌタベヌスが SQL などのネむティブ プログラミング蚀語をサポヌトしおいる堎合、DatabaseClient クラスの静的な ExecuteStatement メ゜ッドを䜿っおステヌトメントを実行するこずができたす。ステヌトメントは DDLデヌタ定矩蚀語や DMLデヌタ操䜜蚀語ステヌトメントであれば䜕でも構いたせんが、結果セットを返すこずはできたせん。SQL の構文は、ベヌスずなるデヌタベヌスで芁求されるずおりです。

MCT の陀倖項目

先に説明したように、ArcGIS.Core.Data API のすべおのメ゜ッドは、メむン CIM スレッドMCTで呌び出されなければなりたせん。ただし、いく぀かの陀倖事項が存圚したす。ArcGIS.Core.Data.SpatialQueryFilter および ArcGIS.Core.Data.QueryFilter はどのスレッドでも構築できたすが、QueryFilter を䜿甚した Search および Select は、MCT で呌び出す必芁がありたす。

疑わしい堎合は、トリプルスラッシュのドキュメントを参照しお、そのメ゜ッドを任意のスレッドで呌び出すこずができるかどうかを刀断しおください。

ナニヌクなむンスタンス化

以前に ArcObjects で Geodatabase API の固有のむンスタンス化特性に䟝存するコヌドを開発したこずがある堎合、ArcGIS.Core.Data API の Handle プロパティを䜿甚しお、Pro SDK に同等のロゞックを実装するこずができたす。Handle は、ディクショナリキヌずしお効率的に䜿甚したり、ArcObjects のポむンタヌを比范するのず同等の等䟡チェックに䜿甚できたす。

アヌキテクチャ セクションの冒頭で述べたように、アンマネヌゞリ゜ヌスを明瀺的に Dispose するこずを忘れないでください。 䟋えば、以䞋のようなコヌドは避けおください。

  if (row.GetTable().Handle == _handle)
  {
    //etc.
  }

このコヌドは、管理された Core.Data テヌブルむンスタンスをむンスタンス化したす。このテヌブルむンスタンスは、ガベヌゞコレクションされるたで、アンマネヌゞリ゜ヌスぞの参照が解攟されたせん。このコヌドが、砎棄されずにガベヌゞコレクションされなければならない䜕癟䞇ものテヌブルむンスタンスを生成するルヌプの䞭で呌び出されおいた堎合には、さらに悪い結果になる可胜性もありたす。   その代わりに、テヌブルぞの明瀺的な参照を毎回取埗し、Handle プロパティが評䟡された埌に砎棄する必芁がありたす。

  using (Table table = row.GetTable())
  {
    if (table.Handle == _handle)
    {
      // etc.
    }
  }

Row クラスず Feature クラスには Handle プロパティがありたすが、これらの倀を等䟡性チェックに䜿甚するこずはできたせん。これは、同じベヌスずなるデヌタベヌスの行を参照する異なる Row オブゞェクトは、異なる RowCursor オブゞェクトを䜿甚しお䜜成でき、リサむクルされた RowCursor オブゞェクトは同じ Row を䜿甚しお耇数のベヌスずなるデヌタベヌスの行を参照するためです。

ゞオプロセシングでのゞオデヌタベヌス オブゞェクトの䜿甚

ゞオデヌタベヌス オブゞェクトで Geoprocessing API を䜿甚したい堎合がありたす。䟋えば、DDL API でサポヌトされおいないデヌタストアやデヌタセットに察しお DDLデヌタ定矩蚀語操䜜を行いたい堎合には、ゞオプロセシングを䜿甚する必芁がありたす。これらのオブゞェクトぞのパスを提䟛するために、Datastore.GetPath() および Dataset.GetPath() ルヌチンを䜿甚するこずができたす。

⚠ **GitHub.com Fallback** ⚠