將圖層匯入SDE

來源:互聯網
上載者:User

 將圖層匯入SDE有兩種情況,一種是直接匯入到SDE的根目錄下,一種是SDE中使用者建立了要素集(Dataset),然後往某個要素集中匯入資料

 

第一種情況:直接往SDE根目錄下匯入圖層:

bool impLayerByName(IName lName,IWorkspace inWorkspace,IWorkspace outWorkspace)<br /> {<br /> try<br /> {<br /> //Open input Featureclass to get field definitions.<br /> IFeatureClass inFeatureClass = (IFeatureClass)lName.Open();<br /> IFeatureClassName inFeatureClassName = (IFeatureClassName)lName;<br /> // Set out dataset and feature class names.<br /> IFeatureClassName outFeatureClassName = new FeatureClassNameClass();<br /> IDatasetName outDatasetName = (IDatasetName)outFeatureClassName;<br /> IDataset outWorkspaceDataset = (IDataset)outWorkspace;<br /> IWorkspaceName outWorkspaceName = (IWorkspaceName)outWorkspaceDataset.FullName;<br /> outDatasetName.WorkspaceName = outWorkspaceName;<br /> //string outFullName = ((IDatasetName)lName).Name;<br /> //string outFileName = outFullName.Substring(outFullName.LastIndexOf(".") + 1);<br /> outDatasetName.Name = "SDE."+((IDatasetName)lName).Name;<br /> //Validate the field names.<br /> IFieldChecker fieldChecker = new FieldCheckerClass();<br /> IFields outFeatureClassFields;<br /> IFields inFeatureClassFields = inFeatureClass.Fields;<br /> IEnumFieldError enumFieldError;<br /> fieldChecker.InputWorkspace = inWorkspace;<br /> fieldChecker.ValidateWorkspace = outWorkspace;<br /> // Validate the fields.<br /> fieldChecker.Validate(inFeatureClassFields,out enumFieldError,out outFeatureClassFields);<br /> // Set up the geometry definition.<br /> IField geometryField;<br /> geometryField = outFeatureClassFields.get_Field(outFeatureClassFields.FindField(inFeatureClass.ShapeFieldName));<br /> // Get the geometry field's geometry definition.<br /> IGeometryDef geometryDef = geometryField.GeometryDef;<br /> //Set up the IQueryFilter to convert all the features by leaving a blank WhereClause<br /> QueryFilter qf = new QueryFilterClass();<br /> qf.WhereClause = "";<br /> //Load the feature class<br /> IFeatureDataConverter fctofc = new FeatureDataConverterClass();<br /> IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(inFeatureClassName,qf,null,outFeatureClassName,geometryDef,outFeatureClassFields,"",1000,0);<br /> return true;<br /> }<br /> catch (Exception ex)<br /> {<br /> MessageBox.Show(ex.Message);<br /> return false;<br /> }<br /> }<br />

其中,lName是源圖層的IName,inWorkspace是源圖層所在的工作空間,outWorkspace是要匯出到的工作空間,這段代碼預設將匯出後的圖層命名為與源圖層一樣

 

 

第二種情況:往SDE中某個要素集匯入圖層

bool impLayerByNameIntoDataset(IName lName,IWorkspace inWorkspace,IFeatureDataset featureDataset)<br /> {<br /> try<br /> {<br /> //IFeatureClassDescription fcDesc = new FeatureClassDescriptionClass();<br /> //IObjectClassDescription ocDesc = (IObjectClassDescription)fcDesc;<br /> //Open input Featureclass to get field definitions.<br /> IFeatureClass inFeatureClass = (IFeatureClass)lName.Open();<br /> IFeatureClassName inFeatureClassName = (IFeatureClassName)lName;<br /> // Set out dataset and feature class names.<br /> IFeatureClassName outFeatureClassName = new FeatureClassNameClass();<br /> IDatasetName outDatasetName = (IDatasetName)outFeatureClassName;<br /> IDataset outWorkspaceDataset = (IDataset)featureDataset.Workspace;<br /> IWorkspaceName outWorkspaceName = (IWorkspaceName)outWorkspaceDataset.FullName;<br /> outDatasetName.WorkspaceName = outWorkspaceName;<br /> outDatasetName.Name = "SDE." + ((IDatasetName)lName).Name;<br /> //Validate the field names.<br /> IFieldChecker fieldChecker = new FieldCheckerClass();<br /> IFields outFeatureClassFields;<br /> IFields inFeatureClassFields = inFeatureClass.Fields;<br /> IEnumFieldError enumFieldError;<br /> fieldChecker.InputWorkspace = inWorkspace;<br /> fieldChecker.ValidateWorkspace = featureDataset.Workspace;</p><p> // Validate the fields.<br /> fieldChecker.Validate(inFeatureClassFields,out enumFieldError,out outFeatureClassFields);<br /> //featureDataset.CreateFeatureClass("SDE." + ((IDatasetName)lName).Name,outFeatureClassFields,ocDesc.InstanceCLSID,ocDesc.ClassExtensionCLSID,esriFeatureType.esriFTSimple,fcDesc.ShapeFieldName,"");<br /> // Set up the geometry definition.<br /> IField geometryField;<br /> geometryField = outFeatureClassFields.get_Field(outFeatureClassFields.FindField(inFeatureClass.ShapeFieldName));<br /> // Get the geometry field's geometry definition.<br /> IGeometryDef geometryDef = geometryField.GeometryDef;<br /> //Set up the IQueryFilter to convert all the features by leaving a blank WhereClause<br /> IQueryFilter qf = new QueryFilterClass();<br /> qf.WhereClause = "";<br /> //Load the feature class<br /> IFeatureDataConverter fctofc = new FeatureDataConverterClass();<br /> IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(inFeatureClassName,qf,(IFeatureDatasetName)featureDataset.FullName,outFeatureClassName,geometryDef,outFeatureClassFields,"",1000,0);</p><p> return true;<br /> }<br /> catch (Exception ex)<br /> {<br /> MessageBox.Show(ex.Message);<br /> return false;<br /> }</p><p> }<br />

其中,lName是源圖層的IName,inWorkspace是源圖層所在的工作空間,featureDataset是目標資料集,這段代碼預設將匯出後的圖層命名為與源圖層一樣

 

附:擷取SDE中資料集(Dataset)的方法:

//在SDE裡尋找名稱為datasetName的Dataset<br />IFeatureDataset outSet = null;<br />IEnumDatasetName idNames = outSpace.get_DatasetNames(esriDatasetType.esriDTFeatureDataset);<br />IDatasetName idNames.Reset();<br />fNameBase = idNames.Next();<br />while (fNameBase != null)<br />{<br /> if(fNameBase.Name == datasetName) outSet = (IFeatureDataset)((IName)fNameBase).Open();<br /> fNameBase = idNames.Next();<br />}

其中outSpace為已經開啟的SDE工作空間

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.