ArcGIS Pro二次開發創建.sde空間數據庫連接文件
在ArcGIS Pro空間數據管理系統的開發中,很多時候需要連接到空間數據庫,利用.sde的數據庫連接文件連接和管理數據是一個很好地選擇,在ArcGIS Pro中可以直接通過“創建數據庫連接”工具,實現.sde數據庫連接文件的創建,總結了兩個方法通過ArcGIS Pro二次開發的方式創建.sde數據庫連接文件:
方法一、通過C#程序後通過調用ArcGIS Pro SDK的GP接口實現
如下:
#region GP執行
List<object> argument = new List<object>();
argument.Add(out_folder_path);
argument.Add(out_name);
argument.Add(database_platform);
argument.Add(instance);
argument.Add(account_authentication);;
argument.Add(username);
argument.Add(password);
argument.Add(save_user_pass);
argument.Add(database);
argument.Add(schema);
argument.Add(version_type);
argument.Add(version);
argument.Add(data);
var parameters = Geoprocessing.MakeValueArray(argument.ToArray());
var cts = new CancellationTokenSource();
var result = Geoprocessing.ExecuteToolAsync("CreateDatabaseConnection_management", parameters, null, cts.Token,
(event_name, values) =>
{
switch (event_name)
{
case "OnValidate":
IGPMessage[] gpMess = values as IGPMessage[];
for (int n = 0; n < gpMess.Count<IGPMessage>(); n++)
{
IGPMessage gpMe = gpMess[n];
string msg1 = "OnValidate:" + gpMe.Text;
System.Diagnostics.Debug.WriteLine(msg1);
LogManagers.LogManager.Log.WriteLog(LogManagers.LogManager.LogFile.SDEConn, msg1);
}
break;
case "OnProgressMessage":
string msg2 = "OnProgressMessage:" + (string)values;
System.Diagnostics.Debug.WriteLine(msg2);
LogManagers.LogManager.Log.WriteLog(LogManagers.LogManager.LogFile.SDEConn, msg2);
break;
case "OnMessage":
string msg3 = "OnMessage:" + values.ToString();
System.Diagnostics.Debug.WriteLine(msg3);
LogManagers.LogManager.Log.WriteLog(LogManagers.LogManager.LogFile.SDEConn, msg3);
break;
case "OnProgressPos":
string msg4 = "OnProgressPos:" + (Convert.ToInt16(values)).ToString();
System.Diagnostics.Debug.WriteLine(msg4);
LogManagers.LogManager.Log.WriteLog(LogManagers.LogManager.LogFile.SDEConn, msg4);
break;
case "OnBeginExecute":
string msg5 = "OnBeginExecute:" + values.ToString();
System.Diagnostics.Debug.WriteLine(msg5);
LogManagers.LogManager.Log.WriteLog(LogManagers.LogManager.LogFile.SDEConn, msg5);
break;
case "OnEndExecute":
IGPResult resultGP = values as IGPResult;
for (int k = 0; k < resultGP.Messages.Count(); k++)
{
IGPMessage mess = resultGP.Messages.ElementAt(k);
if (mess.Text.IndexOf("成功") > -1)
{
bSucess = true;
}
string msg6 = "OnEndExecute:" + mess.Text;
System.Diagnostics.Debug.WriteLine(msg6);
LogManagers.LogManager.Log.WriteLog(LogManagers.LogManager.LogFile.SDEConn, msg6);
}
break;
}
});
#endregion
具體的GP參數參考如下地址:
https://pro.arcgis.com/zh-cn/pro-app/tool-reference/data-management/create-database-connection.htm
方法二、通過ArcGIS Pro SDK中的數據庫連接接口,獲取.sde文件,另存出來;具體實現方式如下:
DatabaseConnectionProperties databaseConnectionProperties = new DatabaseConnectionProperties(EnterpriseDatabaseType.PostgreSQL);
databaseConnectionProperties.Instance = "localhost";
databaseConnectionProperties.AuthenticationMode = AuthenticationMode.DBMS;
databaseConnectionProperties.User = "sde";
databaseConnectionProperties.Password = "sde";
databaseConnectionProperties.Database = "sde";
databaseConnectionProperties.Version = "sde.DEFAULT";
EnterpriseDatabaseType enterpriseDatabaseType = databaseConnectionProperties.DBMS;
string Branch = databaseConnectionProperties.Branch;
string ProjectInstance = databaseConnectionProperties.ProjectInstance;
string Version = databaseConnectionProperties.Version;
Geodatabase geodatabase = new Geodatabase(databaseConnectionProperties);
string LocalPath = geodatabase.GetPath().LocalPath;
string sourceFileName = LocalPath;
string destFileName = @"C:\data\test.sde";
//C:\Users\ADMINI~1\AppData\Local\Temp\ArcGISProTemp2168\34524089aa9ebfb50017dd596072fdcb.sde
File.Copy(sourceFileName, destFileName, true);
實際上每次在通過空間數據庫接口連接空間數據庫的時候,都會生成一個臨時的.sde文件,我們可以在連接成功之後,將臨時路徑中的.sde文件直接保存出來。