public static class DataConvert
{
#region 将mdb中要素类转换追加到sde数据库已有的要素类中
/// <summary>
/// 将mdb中要素类转换追加到sde数据库已有的要素类中
/// </summary>
/// <param name="sourceWorkspace">源工作空间</param>
/// <param name="targetWorkspace">目标工作空间</param>
/// <param name="nameOfSourceFeatureClass">源FeatureClass名称</param>
/// <param name="nameOfTargetFeatureClass">目标FeatureClass名称</param>
public static void AddMDBFeatureClassToSDE(IWorkspace sourceWorkspace, IWorkspace targetWorkspace,string nameOfSourceAttributeTable, string nameOfSourceSpatialTable, string nameOfTargetSpatialTable)
{
try
{
IFeatureWorkspace pSourceFW = sourceWorkspace as IFeatureWorkspace;
//源空间表
IFeatureClass pSourceFc = pSourceFW.OpenFeatureClass(nameOfSourceSpatialTable);
//源属性表
ITable pSourceAttributeTable = pSourceFW.OpenTable(nameOfSourceAttributeTable);
IFeatureWorkspace pTargetFW = targetWorkspace as IFeatureWorkspace;
//目标空间表
IFeatureClass pTargetFc = pTargetFW.OpenFeatureClass(nameOfTargetSpatialTable);
if (pTargetFc.AliasName == "采伐小班")
{
//空间数据从mdb导入到oracle数据库
mdb2fc(targetWorkspace, pSourceFc, pTargetFc);
//属性数据从mdb导入到oracle数据库
mdb2fcOfAttributeTable_Cf(targetWorkspace, pSourceAttributeTable, pTargetFc);
}
if (pTargetFc.AliasName == "征占小班")
{
//空间数据从mdb导入到oracle数据库
mdb2fc(targetWorkspace, pSourceFc, pTargetFc);
mdb2fcOfAttributeTable_Zz(targetWorkspace, pSourceAttributeTable, pTargetFc);
}
}
catch(Exception ex)
{
ForeStar.CoreUI.Message.MessageManager.Show(ForeStar.CoreUI.Message.MessageType.Error,ex.Message, "提示");
return;
}
}
#endregion
#region 空间数据导入——追加要素到SDE的featureclass中
/// <summary>
/// 追加要素到SDE的featureclass中
/// </summary>
/// <param name="targetWorkspace">源工作空间</param>
/// <param name="pSourceFc"></param>
/// <param name="pTargetFc"></param>
private static void mdb2fc(IWorkspace targetWorkspace, IFeatureClass pSourceFc, IFeatureClass pTargetFc)
{
IFeatureCursor pFeaCursor = pSourceFc.Search(null, false);
//目标工作空间开启编辑模式
IWorkspaceEdit workSpaceEdit = targetWorkspace as IWorkspaceEdit;
workSpaceEdit.StartEditing(false);
workSpaceEdit.StartEditOperation();
IFeature pFeature = pFeaCursor.NextFeature();
IField pField = new FieldClass();
int iIndex = 0;
while (pFeature != null)
{
ESRI.ArcGIS.Geodatabase.IFeature tempFeature = pTargetFc.CreateFeature();
tempFeature.Shape = pFeature.Shape;
try
{
//添加字段值
for (int j = 0; j < pSourceFc.Fields.FieldCount; j++)
{
pField = pSourceFc.Fields.get_Field(j);
iIndex = tempFeature.Fields.FindField(pField.Name);
for (int i = 0; i < pTargetFc.Fields.FieldCount; i++)
{
IField pTargetField = new FieldClass();
pTargetField = pTargetFc.Fields.get_Field(i);
if (pTargetField.Name == pField.Name && iIndex != -1)
{
if (pTargetField.Name == "OBJECTID" || pTargetField.Name == "SHAPE")
{
continue;
}
tempFeature.set_Value(iIndex, pFeature.get_Value(j));
}
}
}
tempFeature.Store();
}
catch (System.Exception ex)
{
ForeStar.CoreUI.Message.MessageManager.Show(ForeStar.CoreUI.Message.MessageType.Error, "要素写入异常!" + ex.Message, "提示");
return;
}
pFeature = pFeaCursor.NextFeature();
}
//目标工作空间停止编辑模式并保存编辑结果
workSpaceEdit.StopEditing(true);
workSpaceEdit.StopEditOperation();
}
#endregion
#region 属性数据导入——征占——根据对应条件(XIANGMU_BH)补充pTargetFc中信息
/// <summary>
/// 征占——根据对应条件(XIANGMU_BH)补充pTargetFc中信息
/// </summary>
/// <param name="targetWorkspace">目标工作空间</param>
/// <param name="pSourceAttributeTable">源ITable</param>
/// <param name="pTargetFc">目标IFeatureClass</param>
private static void mdb2fcOfAttributeTable_Zz(IWorkspace targetWorkspace, ITable pSourceAttributeTable, IFeatureClass pTargetFc)
{
try
{
IFeatureCursor pTargetFeatureCursor = pTargetFc.Search(null, false);
//目标工作空间开启编辑模式
IWorkspaceEdit workSpaceEdit = targetWorkspace as IWorkspaceEdit;
workSpaceEdit.StartEditing(false);
workSpaceEdit.StartEditOperation();
int j = 0;
IFeature pTargetFeatureRow = pTargetFeatureCursor.NextFeature();
while (j < pTargetFc.FeatureCount(null))
{
string strTargetFcProductID = pTargetFeatureRow.get_Value(1).ToString();
int i = 0;
ICursor pSourceFeatureCursor = pSourceAttributeTable.Search(null, false);
IRow pSourceTableRow = pSourceFeatureCursor.NextRow();
while (i < pSourceAttributeTable.RowCount(null))
{
//源数据该行ProductID
string strSourceAttributeTableProductID = pSourceTableRow.get_Value(0).ToString();
if (!string.IsNullOrEmpty(strTargetFcProductID) && strTargetFcProductID == strSourceAttributeTableProductID)
{
pTargetFeatureRow.set_Value(48, pSourceTableRow.get_Value(1));
pTargetFeatureRow.set_Value(49, pSourceTableRow.get_Value(2));
pTargetFeatureRow.set_Value(50, pSourceTableRow.get_Value(3));
pTargetFeatureRow.set_Value(51, pSourceTableRow.get_Value(4));
pTargetFeatureRow.set_Value(52, pSourceTableRow.get_Value(5));
pTargetFeatureRow.set_Value(53, pSourceTableRow.get_Value(6));
pTargetFeatureRow.set_Value(54, pSourceTableRow.get_Value(7));
pTargetFeatureRow.set_Value(55, pSourceTableRow.get_Value(8));
pTargetFeatureRow.set_Value(56, pSourceTableRow.get_Value(9));
pTargetFeatureRow.set_Value(57, pSourceTableRow.get_Value(10));
pTargetFeatureRow.set_Value(58, pSourceTableRow.get_Value(11));
pTargetFeatureRow.set_Value(59, pSourceTableRow.get_Value(12));
pTargetFeatureRow.set_Value(60, pSourceTableRow.get_Value(13));
pTargetFeatureRow.set_Value(61, pSourceTableRow.get_Value(14));
pTargetFeatureRow.set_Value(62, pSourceTableRow.get_Value(15));
pTargetFeatureRow.set_Value(63, pSourceTableRow.get_Value(16));
pTargetFeatureRow.set_Value(64, pSourceTableRow.get_Value(17));
pTargetFeatureRow.set_Value(65, pSourceTableRow.get_Value(18));
pTargetFeatureRow.set_Value(66, pSourceTableRow.get_Value(19));
pTargetFeatureRow.set_Value(67, pSourceTableRow.get_Value(20));
pTargetFeatureRow.set_Value(68, pSourceTableRow.get_Value(21));
pTargetFeatureRow.set_Value(69, pSourceTableRow.get_Value(22));
pTargetFeatureRow.set_Value(70, pSourceTableRow.get_Value(23));
pTargetFeatureRow.set_Value(71, pSourceTableRow.get_Value(24));
pTargetFeatureRow.set_Value(72, pSourceTableRow.get_Value(25));
pTargetFeatureRow.set_Value(73, pSourceTableRow.get_Value(26));
pTargetFeatureRow.set_Value(74, pSourceTableRow.get_Value(27));
pTargetFeatureRow.set_Value(75, pSourceTableRow.get_Value(28));
pTargetFeatureRow.set_Value(76, pSourceTableRow.get_Value(29));
pTargetFeatureRow.set_Value(77, pSourceTableRow.get_Value(30));
pTargetFeatureRow.set_Value(78, pSourceTableRow.get_Value(31));
pTargetFeatureRow.set_Value(79, pSourceTableRow.get_Value(32));
pTargetFeatureRow.set_Value(80, pSourceTableRow.get_Value(33));
pTargetFeatureRow.set_Value(81, pSourceTableRow.get_Value(34));
pTargetFeatureRow.set_Value(82, pSourceTableRow.get_Value(35));
pTargetFeatureRow.set_Value(83, pSourceTableRow.get_Value(36));
pTargetFeatureRow.set_Value(84, pSourceTableRow.get_Value(37));
pTargetFeatureRow.set_Value(85, pSourceTableRow.get_Value(38));
pTargetFeatureRow.set_Value(86, pSourceTableRow.get_Value(39));
pTargetFeatureRow.set_Value(87, pSourceTableRow.get_Value(40));
pTargetFeatureRow.set_Value(88, pSourceTableRow.get_Value(41));
pTargetFeatureRow.set_Value(89, pSourceTableRow.get_Value(42));
pTargetFeatureRow.set_Value(90, pSourceTableRow.get_Value(43));
pTargetFeatureRow.set_Value(91, pSourceTableRow.get_Value(44));
pTargetFeatureRow.Store();
}
pSourceTableRow = pSourceFeatureCursor.NextRow();
i++;
}
pTargetFeatureRow = pTargetFeatureCursor.NextFeature();
j++;
}
//目标工作空间停止编辑模式并保存编辑结果
workSpaceEdit.StopEditing(true);
workSpaceEdit.StopEditOperation();
}
catch (System.Exception ex)
{
ForeStar.CoreUI.Message.MessageManager.Show(ForeStar.CoreUI.Message.MessageType.Error, "要素写入异常!" + ex.Message, "提示");
return;
}
}
#endregion
#region 属性数据导入——采伐——根据对应条件(ProductID)补充pTargetFc中信息
/// <summary>
/// 采伐——根据对应条件(ProductID)补充pTargetFc中信息
/// </summary>
/// <param name="targetWorkspace">目标工作空间</param>
/// <param name="pSourceAttributeTable">源ITable</param>
/// <param name="pTargetFc">目标IFeatureClass</param>
private static void mdb2fcOfAttributeTable_Cf(IWorkspace targetWorkspace, ITable pSourceAttributeTable, IFeatureClass pTargetFc)
{
try
{
IFeatureCursor pTargetFeatureCursor = pTargetFc.Search(null, false);
//目标工作空间开启编辑模式
IWorkspaceEdit workSpaceEdit = targetWorkspace as IWorkspaceEdit;
workSpaceEdit.StartEditing(false);
workSpaceEdit.StartEditOperation();
int j = 0;
IFeature pTargetFeatureRow = pTargetFeatureCursor.NextFeature();
while (j < pTargetFc.FeatureCount(null))
{
string strTargetFcProductID = pTargetFeatureRow.get_Value(1).ToString();
int i = 0;
ICursor pSourceFeatureCursor = pSourceAttributeTable.Search(null, false);
IRow pSourceTableRow = pSourceFeatureCursor.NextRow();
while (i < pSourceAttributeTable.RowCount(null))
{
//源数据该行ProductID
string strSourceAttributeTableProductID = pSourceTableRow.get_Value(0).ToString();
if (!string.IsNullOrEmpty(strTargetFcProductID) && strTargetFcProductID == strSourceAttributeTableProductID)
{
pTargetFeatureRow.set_Value(88, pSourceTableRow.get_Value(1));
pTargetFeatureRow.set_Value(89, pSourceTableRow.get_Value(2));
pTargetFeatureRow.set_Value(90, pSourceTableRow.get_Value(3));
pTargetFeatureRow.set_Value(91, pSourceTableRow.get_Value(4));
pTargetFeatureRow.set_Value(92, pSourceTableRow.get_Value(5));
pTargetFeatureRow.set_Value(93, pSourceTableRow.get_Value(6));
pTargetFeatureRow.set_Value(94, pSourceTableRow.get_Value(7));
pTargetFeatureRow.set_Value(95, pSourceTableRow.get_Value(8));
pTargetFeatureRow.set_Value(96, pSourceTableRow.get_Value(9));
pTargetFeatureRow.set_Value(97, pSourceTableRow.get_Value(10));
pTargetFeatureRow.set_Value(98, pSourceTableRow.get_Value(11));
pTargetFeatureRow.set_Value(99, pSourceTableRow.get_Value(12));
pTargetFeatureRow.set_Value(100, pSourceTableRow.get_Value(13));
pTargetFeatureRow.set_Value(101, pSourceTableRow.get_Value(14));
pTargetFeatureRow.set_Value(102, pSourceTableRow.get_Value(15));
pTargetFeatureRow.set_Value(103, pSourceTableRow.get_Value(16));
pTargetFeatureRow.set_Value(104, pSourceTableRow.get_Value(17));
pTargetFeatureRow.set_Value(105, pSourceTableRow.get_Value(18));
pTargetFeatureRow.set_Value(106, pSourceTableRow.get_Value(19));
pTargetFeatureRow.set_Value(107, pSourceTableRow.get_Value(20));
pTargetFeatureRow.set_Value(108, pSourceTableRow.get_Value(21));
pTargetFeatureRow.set_Value(109, pSourceTableRow.get_Value(22));
pTargetFeatureRow.set_Value(110, pSourceTableRow.get_Value(23));
pTargetFeatureRow.set_Value(111, pSourceTableRow.get_Value(24));
pTargetFeatureRow.set_Value(112, pSourceTableRow.get_Value(25));
pTargetFeatureRow.Store();
}
pSourceTableRow = pSourceFeatureCursor.NextRow();
i++;
}
pTargetFeatureRow = pTargetFeatureCursor.NextFeature();
j++;
}
//目标工作空间停止编辑模式并保存编辑结果
workSpaceEdit.StopEditing(true);
workSpaceEdit.StopEditOperation();
}
catch (System.Exception ex)
{
ForeStar.CoreUI.Message.MessageManager.Show(ForeStar.CoreUI.Message.MessageType.Error, "要素写入异常!" + ex.Message, "提示");
return;
}
}
#endregion
#region 将mdb中的要素数据集转换到sde数据库中 (数据库根目录)
/// <summary>
/// 将mdb中的要素数据集转换到sde数据库中 (数据库根目录)
/// </summary>
/// <param name="lName"></param>
/// <param name="inWorkspace"></param>
/// <param name="outWorkspace"></param>
/// <returns></returns>
public static bool impLayerByName(ESRI.ArcGIS.esriSystem.IName lName, ESRI.ArcGIS.Geodatabase.IWorkspace inWorkspace,
ESRI.ArcGIS.Geodatabase.IWorkspace outWorkspace)
{
try
{
//输入要素
ESRI.ArcGIS.Geodatabase.IFeatureClass inFeatureClass = (ESRI.ArcGIS.Geodatabase.IFeatureClass)lName.Open();
ESRI.ArcGIS.Geodatabase.IFeatureClassName inFeatureClassName = (ESRI.ArcGIS.Geodatabase.IFeatureClassName)lName;
// 输出要素
ESRI.ArcGIS.Geodatabase.IFeatureClassName outFeatureClassName = new ESRI.ArcGIS.Geodatabase.FeatureClassNameClass();
ESRI.ArcGIS.Geodatabase.IDatasetName outDatasetName = (ESRI.ArcGIS.Geodatabase.IDatasetName)outFeatureClassName;
ESRI.ArcGIS.Geodatabase.IDataset outWorkspaceDataset = (ESRI.ArcGIS.Geodatabase.IDataset)outWorkspace;
ESRI.ArcGIS.Geodatabase.IWorkspaceName outWorkspaceName = (ESRI.ArcGIS.Geodatabase.IWorkspaceName)outWorkspaceDataset.FullName;
outDatasetName.WorkspaceName = outWorkspaceName;
//string outFullName = ((IDatasetName)lName).Name;
//string outFileName = outFullName.Substring(outFullName.LastIndexOf(".") + 1);
//outDatasetName.Name = "SDE." + ((ESRI.ArcGIS.Geodatabase.IDatasetName)lName).Name;
outDatasetName.Name = "XYLYZY." + ((ESRI.ArcGIS.Geodatabase.IDatasetName)lName).Name;
//验证字段
ESRI.ArcGIS.Geodatabase.IFieldChecker fieldChecker = new ESRI.ArcGIS.Geodatabase.FieldCheckerClass();
ESRI.ArcGIS.Geodatabase.IFields outFeatureClassFields;
ESRI.ArcGIS.Geodatabase.IFields inFeatureClassFields = inFeatureClass.Fields;
ESRI.ArcGIS.Geodatabase.IEnumFieldError enumFieldError;
fieldChecker.InputWorkspace = inWorkspace;
fieldChecker.ValidateWorkspace = outWorkspace;
fieldChecker.Validate(inFeatureClassFields, out enumFieldError, out outFeatureClassFields);
// Set up the geometry definition.
ESRI.ArcGIS.Geodatabase.IField geometryField;
geometryField = outFeatureClassFields.get_Field(outFeatureClassFields.FindField(inFeatureClass.ShapeFieldName));
// Get the geometry field's geometry definition.
ESRI.ArcGIS.Geodatabase.IGeometryDef geometryDef = geometryField.GeometryDef;
ESRI.ArcGIS.Geodatabase.QueryFilter qf = new ESRI.ArcGIS.Geodatabase.QueryFilterClass();
qf.WhereClause = "";
ESRI.ArcGIS.Geodatabase.IFeatureDataConverter fctofc = new ESRI.ArcGIS.Geodatabase.FeatureDataConverterClass();
ESRI.ArcGIS.Geodatabase.IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(inFeatureClassName, qf, null, outFeatureClassName, geometryDef, outFeatureClassFields, "", 1000, 0);
return true;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return false;
}
}
#endregion
#region 将mdb中的要素数据集转换到sde数据库中 ConvertFeatureDataset
/// <summary>
/// 将mdb中的要素数据集转换到sde数据库中
/// </summary>
/// <param name="sourceWorkspace"></param>
/// <param name="targetWorkspace"></param>
/// <param name="nameOfSourceFeatureDataset"></param>
/// <param name="nameOfTargetFeatureDataset"></param>
public static void ConvertMDBFeatureDatasetToSDE(IWorkspace sourceWorkspace, IWorkspace targetWorkspace,
string nameOfSourceFeatureDataset, string nameOfTargetFeatureDataset)
{
if (sourceWorkspace == null || targetWorkspace == null)
{
return;
}
//创建源工作空间名
IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace;
IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName;
//创建源数据集名
IFeatureDatasetName sourceFeatureDatasetName = new FeatureDatasetNameClass();
IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureDatasetName;
sourceDatasetName.WorkspaceName = sourceWorkspaceName;
sourceDatasetName.Name = nameOfSourceFeatureDataset;
//创建目标工作空间名
IDataset targetWorkspaceDataset = (IDataset)targetWorkspace;
IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName;
//创建目标数据集名
IFeatureDatasetName targetFeatureDatasetName = new FeatureDatasetNameClass();
IDatasetName targetDatasetName = (IDatasetName)targetFeatureDatasetName;
targetDatasetName.WorkspaceName = targetWorkspaceName;
targetDatasetName.Name = nameOfTargetFeatureDataset;
//转换(复制)源数据集到目标数据集
IFeatureDataConverter featureDataConverter = new FeatureDataConverter();
featureDataConverter.ConvertFeatureDataset(sourceFeatureDatasetName, targetFeatureDatasetName, null, "", 1000, 0);
}
#endregion
#region 将mdb中的要素数据集转换到sde数据库中 (数据集中)
/// <summary>
/// 将mdb中的要素数据集转换到sde数据库中 (数据集中)
/// </summary>
/// <param name="lName"></param>
/// <param name="inWorkspace"></param>
/// <param name="featureDataset"></param>
/// <returns></returns>
public static bool impLayerByNameIntoDataset(ESRI.ArcGIS.esriSystem.IName lName, IWorkspace inWorkspace, IFeatureDataset featureDataset)
{
try
{
//IFeatureClassDescription fcDesc = new FeatureClassDescriptionClass();
//IObjectClassDescription ocDesc = (IObjectClassDescription)fcDesc;
//Open input Featureclass to get field definitions.
IFeatureClass inFeatureClass = (IFeatureClass)lName.Open();
IFeatureClassName inFeatureClassName = (IFeatureClassName)lName;
// Set out dataset and feature class names.
IFeatureClassName outFeatureClassName = new FeatureClassNameClass();
IDatasetName outDatasetName = (IDatasetName)outFeatureClassName;
IDataset outWorkspaceDataset = (IDataset)featureDataset.Workspace;
IWorkspaceName outWorkspaceName = (IWorkspaceName)outWorkspaceDataset.FullName;
outDatasetName.WorkspaceName = outWorkspaceName;
outDatasetName.Name = "SDE." + ((IDatasetName)lName).Name;
//Validate the field names.
IFieldChecker fieldChecker = new FieldCheckerClass();
IFields outFeatureClassFields;
IFields inFeatureClassFields = inFeatureClass.Fields;
IEnumFieldError enumFieldError;
fieldChecker.InputWorkspace = inWorkspace;
fieldChecker.ValidateWorkspace = featureDataset.Workspace;
// Validate the fields.
fieldChecker.Validate(inFeatureClassFields, out enumFieldError, out outFeatureClassFields);
//featureDataset.CreateFeatureClass("SDE." + ((IDatasetName)lName).Name,outFeatureClassFields,ocDesc.InstanceCLSID,ocDesc.ClassExtensionCLSID,esriFeatureType.esriFTSimple,fcDesc.ShapeFieldName,"");
// Set up the geometry definition.
IField geometryField;
geometryField = outFeatureClassFields.get_Field(outFeatureClassFields.FindField(inFeatureClass.ShapeFieldName));
// Get the geometry field's geometry definition.
IGeometryDef geometryDef = geometryField.GeometryDef;
//Set up the IQueryFilter to convert all the features by leaving a blank WhereClause
IQueryFilter qf = new QueryFilterClass();
qf.WhereClause = "";
//Load the feature class
IFeatureDataConverter fctofc = new FeatureDataConverterClass();
IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(inFeatureClassName, qf, (IFeatureDatasetName)featureDataset.FullName, outFeatureClassName, geometryDef, outFeatureClassFields, "", 1000, 0);
return true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return false;
}
}
#endregion
}
DataConvert,实现MDB到Oracle属性、空间数据的插入
最新推荐文章于 2022-07-12 09:41:38 发布