您的位置:首页 > 理论基础 > 计算机网络

深入理解数据集(转自 http://www.gisall.com/html/63/151663-4895.html)

2012-07-27 16:32 453 查看
在Geodatabase中,要素类可以直接存储在数据库中,也可以存储在数据集中。数据集(Dataset)是一个代表了Workspace中所谓数据集合的抽象类,它是一个集合,但是在理解数据集对象的时候,要用广义的概念来看待,不要从我们在数据库里存储的那个物理结构去理解,否则会走入误区,因为在设计数据库的时候,我们可以在数据集里面存储相关的要素类。那么我们在编程的时候就可以这么想,要获取数据库中的某一个要素类,要先获取数据集,然后获取要素类,其实通过工作空间IFeatureWorkspace.OpenFeatureClass就可以,可以把数据库比作文件夹,数据集比作子文件夹,但是在数据库中的表,要素类,是没有重复的,不像Windows上的文件夹,子文件夹里面可以有名称重复的文件,刚才说到用广义的意义,应该知道所有放在工作空间的对象都是一种数据集对象,也就是说Table,FeatureClass等都是数据集,也就是说数据集中的数据可以是一个字段,一行记录,一张表等。Workspace其实也是一种数据集,它也继承了IDataset这个接口。在数据库中一切对象都可以看做是数据集,不管是要素类,还是表,或者栅格数据,那么怎么区分我们得到的到底是表,还是要素类?IDataset有一个很重要的属性IDataset.Type,通过这个属性我们就可以判断,IDataset.Type的这个属性是一个枚举类型的常量,如下图

获取数据库中的要素类

在AE中,要得到某一个类,首要要获取工作空间,然后进入工作空间再得到相应的东西,我们定义一个函数用来获取个人数据库的路径

public string WsPath()

{

string WsFileName="";

OpenFileDialog penFile = 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();

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐