AE开发实例代码总结

发布时间 : 星期二 文章AE开发实例代码总结更新完毕开始阅读

2、 打开文件数据库:

public IWorkspace GetFGDBWorkspace(String _pGDBName) {

IWorkspaceFactory pWsFac = new FileGDBWorkspaceFactoryClass(); IWorkspace pWs = pWsFac.OpenFromFile(_pGDBName, 0); return pWs; }

3、 打开SDE数据库:

打开SDE数据库我们使用的是Open方法,要用这个方法,我们就要对IPropertySet对象设置,要打开SDE数据库,我们要获取SDE数据库的服务器地址,数据库实例,数据库,用户,密码等参数。而IPropertySet就好比一个Key-Value的对象,用来帮组我们设置这些,然后传到Open方法中。

public IWorkspace GetSDEWorkspace(String _pServerIP, String _pInstance, String _pUser, String _pPassword, String _pDatabase, String _pVersion) {

ESRI.ArcGIS.esriSystem.IPropertySet pPropertySet = new ESRI.ArcGIS.esriSystem.PropertySetClass(); pPropertySet.SetProperty(\, _pServerIP); pPropertySet.SetProperty(\, _pInstance); pPropertySet.SetProperty(\, _pDatabase); pPropertySet.SetProperty(\, _pUser);

pPropertySet.SetProperty(\, _pPassword); pPropertySet.SetProperty(\, _pVersion);

ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2 workspaceFactory; workspaceFactory = (ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2)new ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactoryClass(); return workspaceFactory.Open(pPropertySet, 0); }

注意,打开SDE数据库需要用到ArcGIS Engine运行时的企业级许可。(即此时的License需要特别设置——ArcEngine的Lisence应使用企业数据库类型,在From1_Load事件中初始化lisence,不能使用lisence控件设置,否则提示没有许可lisence。)

具体的解决代码如下:

private void From1_Load(object sender,EventArg e) {

IAoInitialize pao=new AoInitializeClass();

pao.Initialize(esriLisenceProductCode.esriLisenceProductCodeEngineGeoDB); }

4.4.2 获取数据库中的要素类

在ArcGIS Engine中,要得到某一个类,首要要获取工作空间,然后进入工作空间再得到相应的东西,也就是以下两个步骤: ?获取工作空间; ?获取相应的要素类。

我们定义一个函数用来获取个人数据库的路径

public string WsPath() {

string WsFileName=\

OpenFileDialog OpenFile = new OpenFileDialog(); OpenFile.Filter = \个人数据库(MDB)|*.mdb\ DialogResult DialogR = OpenFile.ShowDialog(); if (DialogR == DialogResult.Cancel) { } else {

WsFileName = OpenFile.FileName; }

return WsFileName;

}

要获取要素类,首先获取工作空间,然后对工作空间中的要素类进行遍历,代码如下:

private void button2_Click(object sender, EventArgs e) {

string WsName = WsPath(); if (WsName != \ {

IWorkspaceFactory pWsFt = new AccessWorkspaceFactoryClass(); IWorkspace pWs = pWsFt.OpenFromFile(WsName, 0);

IEnumDataset pEDataset =pWs.get_Datasets(esriDatasetType.esriDTAny); IDataset pDataset = pEDataset.Next(); while (pDataset != null) {

if (pDataset.Type ==esriDatasetType.esriDTFeatureClass) {

FeatureClassBox.Items.Add(pDataset.Name); }

//如果是数据集

else if (pDataset.Type == esriDatasetType.esriDTFeatureDataset) {

IEnumDataset pESubDataset = pDataset.Subsets; IDataset pSubDataset = pESubDataset.Next(); while (pSubDataset != null) {

FeatureClassBox.Items.Add(pSubDataset.Name);// ----这是从哪里来的???------------ pSubDataset = pESubDataset.Next(); } }

pDataset = pEDataset.Next(); } }

FeatureClassBox.Text = FeatureClassBox.Items[0].ToString(); }

判断要素是否被编辑:

ArcGIS Engine 提供了一个IDatasetEdit的接口用来判断我们的数据是否处于编辑状态,该接口只有一个方法

示例代码如下:

public bool ISEdit (IFeatureClass pFeatureClass) {

IDatasetEdit pDataEdit = pFeatureClass as IDatasetEdit; return pDataEdit.IsBeingEdited(); }

如何删除要素类:

IFeatureWorkspace这个接口主要是用于管理基于矢量数据的,如表,要素类,要素数据集等。

要想删除一个要素类,那么必须先得到这个。,如要打开一个名称为PointTest的要素类,只需要在OpenFeatureClass中传入这个要素类的名称,代码如下:

IWorkspaceFactory pWsFt = new AccessWorkspaceFactoryClass(); IWorkspace pWs = pWsFt.OpenFromFile(WsName, 0); IFeatureWorkspace pFWs = pWs as IFeatureWorkspace; IFeatureClass pFClass = pFWs.OpenFeatureClass(\

如果是在ArcMap中,我们会切换到Catalog中然后进入相应的数据库,然后删除相应的要素类,这种操作会让我们想到FeatureClas这个对象会提供删除的方法,其实不然,这个删除的方法是定义在Dataset这个对象中。

private void button1_Click(object sender, EventArgs e) {

string WsName = WsPath(); if( WsName !=\ {

IWorkspaceFactory pWsFt = new AccessWorkspaceFactoryClass(); IWorkspace pWs = pWsFt.OpenFromFile(WsName, 0); IFeatureWorkspace pFWs = pWs as IFeatureWorkspace; IFeatureClass pFClass = pFWs.OpenFeatureClass(\IDataset pDatset = pFClass as IDataset; pDatset.Delete(); } } 删除前:

删除后:

创建要素类

创建要素类用到了IFeatureWorkspace.CreateFeatureClass方法。

所需接口:

IField,IFieldEdit,IFields,IFieldsEdit,IGeometryDef,

IGeometryDefEdit接口

联系合同范文客服:xxxxx#qq.com(#替换为@)